bugcore
Version:
bugcore is a JavaScript library that provides a foundational architecture for object oriented JS
225 lines (193 loc) • 5.89 kB
JavaScript
/*
* Copyright (c) 2016 airbug Inc. http://airbug.com
*
* bugcore may be freely distributed under the MIT license.
*/
//-------------------------------------------------------------------------------
// Annotations
//-------------------------------------------------------------------------------
//@Export('Collections')
//@Require('BidiMap')
//@Require('Class')
//@Require('Collection')
//@Require('Exception')
//@Require('List')
//@Require('Map')
//@Require('MultiListMap')
//@Require('Obj')
//@Require('Queue')
//@Require('Set')
//-------------------------------------------------------------------------------
// Context
//-------------------------------------------------------------------------------
require('bugpack').context("*", function(bugpack) {
//-------------------------------------------------------------------------------
// BugPack
//-------------------------------------------------------------------------------
var BidiMap = bugpack.require('BidiMap');
var Class = bugpack.require('Class');
var Collection = bugpack.require('Collection');
var Exception = bugpack.require('Exception');
var List = bugpack.require('List');
var Map = bugpack.require('Map');
var MultiListMap = bugpack.require('MultiListMap');
var Obj = bugpack.require('Obj');
var Queue = bugpack.require('Queue');
var Set = bugpack.require('Set');
//-------------------------------------------------------------------------------
// Declare Class
//-------------------------------------------------------------------------------
/**
* @class
* @extends {Obj}
*/
var Collections = Class.extend(Obj, {
_name: "Collections"
});
//-------------------------------------------------------------------------------
// Static Methods
//-------------------------------------------------------------------------------
/**
* @static
* @param {(IKeyValueIterable.<K, V> | Object.<K, V>)} map
* @return {BidiMap.<K, V>}
* @template K, V
*/
Collections.bidiMap = function() {
return new BidiMap();
};
/**
* @static
* @param {?(ICollection.<I> | Array.<I>)=} items
* @return {Collection.<I>}
* @template I
*/
Collections.collection = function(items) {
return new Collection(items);
};
/**
* @static
* @param {?(ICollection.<I> | Array.<I>)=} items
* @return {Collection.<I>}
* @template I
*/
Collections.ensureCollection = function(items) {
if (!Class.doesExtend(items, Collection)) {
return new Collection(items);
} else {
return /** @type {Collection.<I>} */(items);
}
};
/**
* @static
* @param {?(ICollection.<I> | Array.<I>)=} items
* @return {List.<I>}
* @template I
*/
Collections.ensureList = function(items) {
if (!Class.doesExtend(items, List)) {
return new List(items);
} else {
return /** @type {List.<I>} */(items);
}
};
/**
* @static
* @param {?(IKeyValueIterable.<K, V> | Object.<K, V>)=} map
* @return {Map.<K, V>}
* @template K, V
*/
Collections.ensureMap = function(map) {
if (!Class.doesExtend(map, Map)) {
return new Map(map);
} else {
return /** @type {Map.<K, V>} */(map);
}
};
/**
* @static
* @param {?(IMap.<K, V> | Object.<K, V>)=} map
* @return {MultiListMap.<K, V>}
*/
Collections.ensureMultiListMap = function(map) {
if (!Class.doesExtend(map, MultiListMap)) {
return new MultiListMap(map);
} else {
return /** @type {MultiListMap.<I>} */(map);
}
};
/**
* @static
* @param {?(ICollection.<I> | Array.<I>)=} items
* @return {Queue.<I>}
* @template I
*/
Collections.ensureQueue = function(items) {
if (!Class.doesExtend(items, Queue)) {
return new Queue(items);
} else {
return /** @type {Queue.<I>} */(items);
}
};
/**
* @static
* @param {?(ICollection.<I> | Array.<I>)=} items
* @return {Set.<I>}
* @template I
*/
Collections.ensureSet = function(items) {
if (!Class.doesExtend(items, Set)) {
return new Set(items);
} else {
return /** @type {Set.<I>} */(items);
}
};
/**
* @static
* @param {?(ICollection.<I> | Array.<I>)=} items
* @return {List.<I>}
* @template I
*/
Collections.list = function(items) {
return new List(items);
};
/**
* @static
* @param {(IKeyValueIterable.<K, V> | Object.<K, V>)=} map
* @return {Map.<K, V>}
* @template K, V
*/
Collections.map = function(map) {
return new Map(map);
};
/**
* @static
* @param {?(IMap.<K, V> | Object.<K, V>)=} map
* @return {MultiListMap.<K, V>}
*/
Collections.multiListMap = function(map) {
return new MultiListMap(map);
};
/**
* @static
* @param {?(ICollection.<I> | Array.<I>)=} items
* @return {Queue}
* @template I
*/
Collections.queue = function(items) {
return new Queue(items);
};
/**
* @static
* @param {?(ICollection.<I> | Array.<I>)=} items
* @return {Set.<I>}
* @template I
*/
Collections.set = function(items) {
return new Set(items);
};
//-------------------------------------------------------------------------------
// Exports
//-------------------------------------------------------------------------------
bugpack.export('Collections', Collections);
});