Spaces:
Sleeping
Sleeping
| import "../core/class"; | |
| d3.map = function(object, f) { | |
| var map = new d3_Map; | |
| if (object instanceof d3_Map) { | |
| object.forEach(function(key, value) { map.set(key, value); }); | |
| } else if (Array.isArray(object)) { | |
| var i = -1, | |
| n = object.length, | |
| o; | |
| if (arguments.length === 1) while (++i < n) map.set(i, object[i]); | |
| else while (++i < n) map.set(f.call(object, o = object[i], i), o); | |
| } else { | |
| for (var key in object) map.set(key, object[key]); | |
| } | |
| return map; | |
| }; | |
| function d3_Map() { | |
| this._ = Object.create(null); | |
| } | |
| var d3_map_proto = "__proto__", | |
| d3_map_zero = "\0"; | |
| d3_class(d3_Map, { | |
| has: d3_map_has, | |
| get: function(key) { | |
| return this._[d3_map_escape(key)]; | |
| }, | |
| set: function(key, value) { | |
| return this._[d3_map_escape(key)] = value; | |
| }, | |
| remove: d3_map_remove, | |
| keys: d3_map_keys, | |
| values: function() { | |
| var values = []; | |
| for (var key in this._) values.push(this._[key]); | |
| return values; | |
| }, | |
| entries: function() { | |
| var entries = []; | |
| for (var key in this._) entries.push({key: d3_map_unescape(key), value: this._[key]}); | |
| return entries; | |
| }, | |
| size: d3_map_size, | |
| empty: d3_map_empty, | |
| forEach: function(f) { | |
| for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]); | |
| } | |
| }); | |
| function d3_map_escape(key) { | |
| return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key; | |
| } | |
| function d3_map_unescape(key) { | |
| return (key += "")[0] === d3_map_zero ? key.slice(1) : key; | |
| } | |
| function d3_map_has(key) { | |
| return d3_map_escape(key) in this._; | |
| } | |
| function d3_map_remove(key) { | |
| return (key = d3_map_escape(key)) in this._ && delete this._[key]; | |
| } | |
| function d3_map_keys() { | |
| var keys = []; | |
| for (var key in this._) keys.push(d3_map_unescape(key)); | |
| return keys; | |
| } | |
| function d3_map_size() { | |
| var size = 0; | |
| for (var key in this._) ++size; | |
| return size; | |
| } | |
| function d3_map_empty() { | |
| for (var key in this._) return false; | |
| return true; | |
| } | |