class/class_basic.js

if (!global.Class)
	/**
	 * The namespace for all UF/Class utility functions, typically for static methods.
	 * 
	 * @namespace Class
	 */
	global.Class = {};

{
	/**
	 * Generates a random ID given the values in the `.instances` Array.
	 * @alias Class.generateRandomID
	 *
	 * @param {Class} arg0_class
	 *
	 * @returns {string}
	 */
	Class.generateRandomID = function (arg0_class) {
		//Convert from parameters
		let local_class = arg0_class;
		
		//Declare local instance variables
		let random_id = Math.randomNumber(0, 100000000000).toString();
		
		//Check if local_class is defined
		if (typeof local_class == "function") {
			//Internal guard clause if class doesn't have .instances
			if (local_class.instances === undefined) {
				console.warn(`${local_class.constructor.name} has an undefined .instances dictionary. Returning default random ID.`);
				return random_id;
			}
			if (!Array.isArray(local_class.instances)) {
				console.warn(`${local_class.constructor.name} has an .instances field, but it is not of type Array. Returning default random ID.`);
				return random_id;
			}
			
			//Continually iterate over .instances in class until we can guarantee that the generated ID is not a duplicate
			while (true) {
				let is_duplicate_id = false;
				let local_id = Class.generateRandomID();
				
				//Return and break once a true ID is found
				for (let i = 0; i < local_class.instances.length; i++)
					if (local_class.instances[i].id === local_id) {
						is_duplicate_id = true;
						break;
					}
				
				if (!is_duplicate_id)
					//Return statement
					return local_id;
			}
		} else {
			//Return statement
			return random_id;
		}
	};
}