Source: resource/Requests.js

//------------------------------------------------------------------------------
// Constructor scope
//------------------------------------------------------------------------------

/**
 * Creates a new instance of the Requests class.
 *
 * @constructor
 *
 * @class
 * @classdesc
 * 
 * The Requests class represents a list (batch) containing the name and path 
 * of files (resources) to be used by the current application.
 */
rune.resource.Requests = function() {
	
	//--------------------------------------------------------------------------
	// Private properties
	//--------------------------------------------------------------------------
	
	/**
	 * List containing all requests registered by the object.
	 *
	 * @type {Array.<rune.resource.Request>}
	 * @private
	 */
	this.m_requests = [];
	
	//--------------------------------------------------------------------------
	// Constructor call
	//--------------------------------------------------------------------------
	
	/**
	 * Invokes secondary class constructor.
	 */
	this.m_construct();
};

//------------------------------------------------------------------------------
// Public prototype getter and setter methods
//------------------------------------------------------------------------------

/**
 * The number of registered requested resources.
 *
 * @member {number} length
 * @memberof rune.resource.Requests
 * @instance
 * @readonly
 */
Object.defineProperty(rune.resource.Requests.prototype, "length", {
	/**
	 * @this rune.resource.Requests
	 * @ignore
	 */
	get : function() {
		return this.m_requests.length;
	}
});

//------------------------------------------------------------------------------
// Public prototype methods
//------------------------------------------------------------------------------

/**
 * Add a new resource request.
 *
 * @param {string} name Resource name (ID).
 * @param {string} path Resource path.
 *
 * @returns {undefined}
 */
rune.resource.Requests.prototype.add = function(name, path) {
	if (this.get(name) == null) {
		this.m_requests.push(
			new rune.resource.Request(name, path)
		);
	}
};

/**
 * Clears the entire list (batch) of requests.
 *
 * @returns {undefined}
 */
rune.resource.Requests.prototype.clear = function() {
	while (this.m_requests.length) {
		this.m_requests[0].dispose();
		this.m_requests[0] = null;
		this.m_requests.splice(0, 1);
	}
};

/**
 * Retrieve a resource request based on its name.
 *
 * @param {string} name Resource name (ID).
 *
 * @returns {rune.resource.Request}
 */
rune.resource.Requests.prototype.get = function(name) {
	var i = this.m_requests.length;
	while (i--) {
		if (this.m_requests[i]['name'] == name.toLowerCase()) {
			return this.m_requests[i];
		}
	}
	
	return null;
};

//------------------------------------------------------------------------------
// Internal prototype methods
//------------------------------------------------------------------------------

/**
 * Removes the first request from the list.
 *
 * @returns {rune.resource.Request}
 * @package
 * @ignore
 */
rune.resource.Requests.prototype.shift = function() {
	return this.m_requests.shift();
};

//------------------------------------------------------------------------------
// Protected prototype methods
//------------------------------------------------------------------------------

/**
 * The class constructor.
 *
 * @returns {undefined}
 * @protected
 * @ignore
 */
rune.resource.Requests.prototype.m_construct = function() {
	//@note: override to add resource requests.
};