/* This file contains proprietary software owned by Motorola Mobility, Inc.
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
*/ // RDGE namespaces var RDGE = RDGE || {}; /* generic handle-based object manager */ RDGE.objectManager = function() { this.guidCounter = 0; this.objects = []; this.numObjects = 0; this.freelist = []; this.reset = function() { this.objects = []; this.freelist = []; this.guidCounter = 0; } // validHandle this.validHandle = function(h) { return this.handleToIndex(h) != -1; } // handleToIndex this.handleToIndex = function(h) { var index = ( h >> 16 ) & 0xFFFF; if( this.objects[index] != null && h == this.objects[index].handle ) { return index; } return -1; } // handleToObject this.handleToObject = function(h) { var index = this.handleToIndex( h ); if( index != -1 ) { return this.objects[index]; } return null; } // add object this.addObject = function(ob) { var index = this.objects.length; if( this.freelist.length > 0 ) { index = this.freelist.pop(); } if( ++this.guidCounter >= 0xFFFF ) { // wrap the counter, zero is reserved for invalid handles. this.guidCounter = 1; } ob.handle = ( index << 16 | ++this.guidCounter ); this.objects[index] = ob; return ob.handle; } // remove object this.removeObject = function(h) { var index = this.handleToIndex( h ); if( index != -1 ) { if( this.objects[index].onremove != undefined ) { this.objects[index].onremove(); } this.objects[index] = null; this.freelist.push(index); } } }