mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-05 01:17:50 +00:00
Move MapCache modules into MapCache.
This commit is contained in:
@@ -1,17 +1,45 @@
|
|||||||
import mapCacheClear from './.internal/mapCacheClear.js';
|
|
||||||
import mapCacheDelete from './.internal/mapCacheDelete.js';
|
import Hash from './.internal/Hash.js';
|
||||||
import mapCacheGet from './.internal/mapCacheGet.js';
|
import ListCache from './.internal/ListCache.js';
|
||||||
import mapCacheHas from './.internal/mapCacheHas.js';
|
|
||||||
import mapCacheSet from './.internal/mapCacheSet.js';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a map cache object to store key-value pairs.
|
* Gets the data for `map`.
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
* @constructor
|
* @param {Object} map The map to query.
|
||||||
* @param {Array} [entries] The key-value pairs to cache.
|
* @param {string} key The reference key.
|
||||||
|
* @returns {*} Returns the map data.
|
||||||
*/
|
*/
|
||||||
|
function getMapData({ __data__ }, key) {
|
||||||
|
const data = __data__;
|
||||||
|
return isKeyable(key)
|
||||||
|
? data[typeof key == 'string' ? 'string' : 'hash']
|
||||||
|
: data.map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if `value` is suitable for use as unique object key.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {*} value The value to check.
|
||||||
|
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
|
||||||
|
*/
|
||||||
|
function isKeyable(value) {
|
||||||
|
const type = typeof value;
|
||||||
|
return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
|
||||||
|
? (value !== '__proto__')
|
||||||
|
: (value === null);
|
||||||
|
}
|
||||||
|
|
||||||
class MapCache {
|
class MapCache {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a map cache object to store key-value pairs.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @constructor
|
||||||
|
* @param {Array} [entries] The key-value pairs to cache.
|
||||||
|
*/
|
||||||
constructor(entries) {
|
constructor(entries) {
|
||||||
let index = -1;
|
let index = -1;
|
||||||
const length = entries == null ? 0 : entries.length;
|
const length = entries == null ? 0 : entries.length;
|
||||||
@@ -22,13 +50,72 @@ class MapCache {
|
|||||||
this.set(entry[0], entry[1]);
|
this.set(entry[0], entry[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all key-value entries from the map.
|
||||||
|
*
|
||||||
|
* @memberOf MapCache
|
||||||
|
*/
|
||||||
|
clear() {
|
||||||
|
this.size = 0;
|
||||||
|
this.__data__ = {
|
||||||
|
'hash': new Hash,
|
||||||
|
'map': new (Map || ListCache),
|
||||||
|
'string': new Hash
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes `key` and its value from the map.
|
||||||
|
*
|
||||||
|
* @memberOf MapCache
|
||||||
|
* @param {string} key The key of the value to remove.
|
||||||
|
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
||||||
|
*/
|
||||||
|
delete(key) {
|
||||||
|
const result = getMapData(this, key)['delete'](key);
|
||||||
|
this.size -= result ? 1 : 0;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the map value for `key`.
|
||||||
|
*
|
||||||
|
* @memberOf MapCache
|
||||||
|
* @param {string} key The key of the value to get.
|
||||||
|
* @returns {*} Returns the entry value.
|
||||||
|
*/
|
||||||
|
get(key) {
|
||||||
|
return getMapData(this, key).get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a map value for `key` exists.
|
||||||
|
*
|
||||||
|
* @memberOf MapCache
|
||||||
|
* @param {string} key The key of the entry to check.
|
||||||
|
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||||||
|
*/
|
||||||
|
has(key) {
|
||||||
|
return getMapData(this, key).has(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the map `key` to `value`.
|
||||||
|
*
|
||||||
|
* @memberOf MapCache
|
||||||
|
* @param {string} key The key of the value to set.
|
||||||
|
* @param {*} value The value to set.
|
||||||
|
* @returns {Object} Returns the map cache instance.
|
||||||
|
*/
|
||||||
|
set(key, value) {
|
||||||
|
const data = getMapData(this, key);
|
||||||
|
const size = data.size;
|
||||||
|
|
||||||
|
data.set(key, value);
|
||||||
|
this.size += data.size == size ? 0 : 1;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add methods to `MapCache`.
|
|
||||||
MapCache.prototype.clear = mapCacheClear;
|
|
||||||
MapCache.prototype['delete'] = mapCacheDelete;
|
|
||||||
MapCache.prototype.get = mapCacheGet;
|
|
||||||
MapCache.prototype.has = mapCacheHas;
|
|
||||||
MapCache.prototype.set = mapCacheSet;
|
|
||||||
|
|
||||||
export default MapCache;
|
export default MapCache;
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
import isKeyable from './.internal/isKeyable.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the data for `map`.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {Object} map The map to query.
|
|
||||||
* @param {string} key The reference key.
|
|
||||||
* @returns {*} Returns the map data.
|
|
||||||
*/
|
|
||||||
function getMapData({ __data__ }, key) {
|
|
||||||
const data = __data__;
|
|
||||||
return isKeyable(key)
|
|
||||||
? data[typeof key == 'string' ? 'string' : 'hash']
|
|
||||||
: data.map;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default getMapData;
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
/**
|
|
||||||
* Checks if `value` is suitable for use as unique object key.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {*} value The value to check.
|
|
||||||
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
|
|
||||||
*/
|
|
||||||
function isKeyable(value) {
|
|
||||||
const type = typeof value;
|
|
||||||
return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
|
|
||||||
? (value !== '__proto__')
|
|
||||||
: (value === null);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default isKeyable;
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
import Hash from './.internal/Hash.js';
|
|
||||||
import ListCache from './.internal/ListCache.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes all key-value entries from the map.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @name clear
|
|
||||||
* @memberOf MapCache
|
|
||||||
*/
|
|
||||||
function mapCacheClear() {
|
|
||||||
this.size = 0;
|
|
||||||
this.__data__ = {
|
|
||||||
'hash': new Hash,
|
|
||||||
'map': new (Map || ListCache),
|
|
||||||
'string': new Hash
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export default mapCacheClear;
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
import getMapData from './.internal/getMapData.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes `key` and its value from the map.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @name delete
|
|
||||||
* @memberOf MapCache
|
|
||||||
* @param {string} key The key of the value to remove.
|
|
||||||
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
|
||||||
*/
|
|
||||||
function mapCacheDelete(key) {
|
|
||||||
const result = getMapData(this, key)['delete'](key);
|
|
||||||
this.size -= result ? 1 : 0;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default mapCacheDelete;
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
import getMapData from './.internal/getMapData.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the map value for `key`.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @name get
|
|
||||||
* @memberOf MapCache
|
|
||||||
* @param {string} key The key of the value to get.
|
|
||||||
* @returns {*} Returns the entry value.
|
|
||||||
*/
|
|
||||||
function mapCacheGet(key) {
|
|
||||||
return getMapData(this, key).get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default mapCacheGet;
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
import getMapData from './.internal/getMapData.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if a map value for `key` exists.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @name has
|
|
||||||
* @memberOf MapCache
|
|
||||||
* @param {string} key The key of the entry to check.
|
|
||||||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
|
||||||
*/
|
|
||||||
function mapCacheHas(key) {
|
|
||||||
return getMapData(this, key).has(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default mapCacheHas;
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
import getMapData from './.internal/getMapData.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the map `key` to `value`.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @name set
|
|
||||||
* @memberOf MapCache
|
|
||||||
* @param {string} key The key of the value to set.
|
|
||||||
* @param {*} value The value to set.
|
|
||||||
* @returns {Object} Returns the map cache instance.
|
|
||||||
*/
|
|
||||||
function mapCacheSet(key, value) {
|
|
||||||
const data = getMapData(this, key);
|
|
||||||
const size = data.size;
|
|
||||||
|
|
||||||
data.set(key, value);
|
|
||||||
this.size += data.size == size ? 0 : 1;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default mapCacheSet;
|
|
||||||
Reference in New Issue
Block a user