1 /* 2 * Copyright (C) 2013 Glyptodon LLC 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a copy 5 * of this software and associated documentation files (the "Software"), to deal 6 * in the Software without restriction, including without limitation the rights 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 * copies of the Software, and to permit persons to whom the Software is 9 * furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 * THE SOFTWARE. 21 */ 22 23 var Guacamole = Guacamole || {}; 24 25 /** 26 * Integer pool which returns consistently increasing integers while integers 27 * are in use, and previously-used integers when possible. 28 * @constructor 29 */ 30 Guacamole.IntegerPool = function() { 31 32 /** 33 * Reference to this integer pool. 34 */ 35 var guac_pool = this; 36 37 /** 38 * Array of available integers. 39 * @type Number[] 40 */ 41 var pool = []; 42 43 /** 44 * The next integer to return if no more integers remain. 45 * @type Number 46 */ 47 this.next_int = 0; 48 49 /** 50 * Returns the next available integer in the pool. If possible, a previously 51 * used integer will be returned. 52 * 53 * @return {Number} The next available integer. 54 */ 55 this.next = function() { 56 57 // If free'd integers exist, return one of those 58 if (pool.length > 0) 59 return pool.shift(); 60 61 // Otherwise, return a new integer 62 return guac_pool.next_int++; 63 64 }; 65 66 /** 67 * Frees the given integer, allowing it to be reused. 68 * 69 * @param {Number} integer The integer to free. 70 */ 71 this.free = function(integer) { 72 pool.push(integer); 73 }; 74 75 }; 76