mirror of
https://github.com/wahyd4/cdnjs.git
synced 2026-08-20 10:16:29 +10:00
160 lines
4.9 KiB
JavaScript
160 lines
4.9 KiB
JavaScript
/**
|
|
* Copyright (c) 2014, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
var ImmutableMap = require('./Map');
|
|
|
|
|
|
for(var ImmutableMap____Key in ImmutableMap){if(ImmutableMap.hasOwnProperty(ImmutableMap____Key)){OrderedMap[ImmutableMap____Key]=ImmutableMap[ImmutableMap____Key];}}var ____SuperProtoOfImmutableMap=ImmutableMap===null?null:ImmutableMap.prototype;OrderedMap.prototype=Object.create(____SuperProtoOfImmutableMap);OrderedMap.prototype.constructor=OrderedMap;OrderedMap.__superConstructor__=ImmutableMap;
|
|
|
|
// @pragma Construction
|
|
|
|
function OrderedMap(sequence) {"use strict";
|
|
if (sequence && sequence.constructor === OrderedMap) {
|
|
return sequence;
|
|
}
|
|
if (!sequence || sequence.length === 0) {
|
|
return OrderedMap.empty();
|
|
}
|
|
return OrderedMap.empty().merge(sequence);
|
|
}
|
|
|
|
OrderedMap.empty=function() {"use strict";
|
|
return __EMPTY_ORDERED_MAP || (__EMPTY_ORDERED_MAP = OrderedMap.$OrderedMap_make());
|
|
};
|
|
|
|
OrderedMap.prototype.toString=function() {"use strict";
|
|
return this.__toString('OrderedMap {', '}');
|
|
};
|
|
|
|
// @pragma Access
|
|
|
|
OrderedMap.prototype.get=function(k, undefinedValue) {"use strict";
|
|
if (k != null && this.$OrderedMap_map) {
|
|
var index = this.$OrderedMap_map.get(k);
|
|
if (index != null) {
|
|
return this.$OrderedMap_vector.get(index)[1];
|
|
}
|
|
}
|
|
return undefinedValue;
|
|
};
|
|
|
|
// @pragma Modification
|
|
|
|
OrderedMap.prototype.clear=function() {"use strict";
|
|
if (this.__ownerID) {
|
|
this.length = 0;
|
|
this.$OrderedMap_map = this.$OrderedMap_vector = null;
|
|
return this;
|
|
}
|
|
return OrderedMap.empty();
|
|
};
|
|
|
|
OrderedMap.prototype.set=function(k, v) {"use strict";
|
|
if (k == null) {
|
|
return this;
|
|
}
|
|
var newMap = this.$OrderedMap_map;
|
|
var newVector = this.$OrderedMap_vector;
|
|
if (newMap) {
|
|
var index = newMap.get(k);
|
|
if (index == null) {
|
|
newMap = newMap.set(k, newVector.length);
|
|
newVector = newVector.push([k, v]);
|
|
} else if (newVector.get(index)[1] !== v) {
|
|
newVector = newVector.set(index, [k, v]);
|
|
}
|
|
} else {
|
|
newVector = require('./Vector').empty().__ensureOwner(this.__ownerID).set(0, [k, v]);
|
|
newMap = ImmutableMap.empty().__ensureOwner(this.__ownerID).set(k, 0);
|
|
}
|
|
if (this.__ownerID) {
|
|
this.length = newMap.length;
|
|
this.$OrderedMap_map = newMap;
|
|
this.$OrderedMap_vector = newVector;
|
|
return this;
|
|
}
|
|
return newVector === this.$OrderedMap_vector ? this : OrderedMap.$OrderedMap_make(newMap, newVector);
|
|
};
|
|
|
|
OrderedMap.prototype.delete=function(k) {"use strict";
|
|
if (k == null || this.$OrderedMap_map == null) {
|
|
return this;
|
|
}
|
|
var index = this.$OrderedMap_map.get(k);
|
|
if (index == null) {
|
|
return this;
|
|
}
|
|
var newMap = this.$OrderedMap_map.delete(k);
|
|
var newVector = this.$OrderedMap_vector.delete(index);
|
|
|
|
if (newMap.length === 0) {
|
|
return this.clear();
|
|
}
|
|
if (this.__ownerID) {
|
|
this.length = newMap.length;
|
|
this.$OrderedMap_map = newMap;
|
|
this.$OrderedMap_vector = newVector;
|
|
return this;
|
|
}
|
|
return newMap === this.$OrderedMap_map ? this : OrderedMap.$OrderedMap_make(newMap, newVector);
|
|
};
|
|
|
|
// @pragma Mutability
|
|
|
|
OrderedMap.prototype.__ensureOwner=function(ownerID) {"use strict";
|
|
if (ownerID === this.__ownerID) {
|
|
return this;
|
|
}
|
|
var newMap = this.$OrderedMap_map && this.$OrderedMap_map.__ensureOwner(ownerID);
|
|
var newVector = this.$OrderedMap_vector && this.$OrderedMap_vector.__ensureOwner(ownerID);
|
|
if (!ownerID) {
|
|
this.__ownerID = ownerID;
|
|
this.$OrderedMap_map = newMap;
|
|
this.$OrderedMap_vector = newVector;
|
|
return this;
|
|
}
|
|
return OrderedMap.$OrderedMap_make(newMap, newVector, ownerID);
|
|
};
|
|
|
|
|
|
// @pragma Iteration
|
|
|
|
OrderedMap.prototype.__deepEqual=function(other) {"use strict";
|
|
var is = require('./Immutable').is;
|
|
var iterator = this.$OrderedMap_vector.__iterator__();
|
|
return other.every(function(v, k) {
|
|
var entry = iterator.next();
|
|
entry && (entry = entry[1]);
|
|
return entry && is(k, entry[0]) && is(v, entry[1]);
|
|
});
|
|
};
|
|
|
|
OrderedMap.prototype.__iterate=function(fn, reverse) {"use strict";
|
|
return this.$OrderedMap_vector ? this.$OrderedMap_vector.fromEntries().__iterate(fn, reverse) : 0;
|
|
};
|
|
|
|
// @pragma Private
|
|
|
|
OrderedMap.$OrderedMap_make=function(map, vector, ownerID) {"use strict";
|
|
var omap = Object.create(OrderedMap.prototype);
|
|
omap.length = map ? map.length : 0;
|
|
omap.$OrderedMap_map = map;
|
|
omap.$OrderedMap_vector = vector;
|
|
omap.__ownerID = ownerID;
|
|
return omap;
|
|
};
|
|
|
|
|
|
OrderedMap.from = OrderedMap;
|
|
|
|
|
|
var __EMPTY_ORDERED_MAP;
|
|
|
|
module.exports = OrderedMap;
|