|
241 | 241 | }); else for (var key in object) map.set(key, object[key]); |
242 | 242 | return map; |
243 | 243 | }; |
244 | | - function d3_Map() {} |
| 244 | + function d3_Map() { |
| 245 | + this._ = Object.create(null); |
| 246 | + } |
245 | 247 | d3_class(d3_Map, { |
246 | 248 | has: d3_map_has, |
247 | 249 | get: function(key) { |
248 | | - return this[d3_map_escape(key)]; |
| 250 | + return this._[key]; |
249 | 251 | }, |
250 | 252 | set: function(key, value) { |
251 | | - return this[d3_map_escape(key)] = value; |
| 253 | + return this._[key] = value; |
252 | 254 | }, |
253 | 255 | remove: d3_map_remove, |
254 | 256 | keys: d3_map_keys, |
255 | 257 | values: function() { |
256 | 258 | var values = []; |
257 | | - for (var key in this) { |
258 | | - if (d3_map_hasOwnProperty.call(this, key)) { |
259 | | - values.push(this[key]); |
260 | | - } |
| 259 | + for (var key in this._) { |
| 260 | + values.push(this._[key]); |
261 | 261 | } |
262 | 262 | return values; |
263 | 263 | }, |
264 | 264 | entries: function() { |
265 | 265 | var entries = []; |
266 | | - for (var key in this) { |
267 | | - if (d3_map_hasOwnProperty.call(this, key)) { |
268 | | - entries.push({ |
269 | | - key: d3_map_unescape(key), |
270 | | - value: this[key] |
271 | | - }); |
272 | | - } |
| 266 | + for (var key in this._) { |
| 267 | + entries.push({ |
| 268 | + key: key, |
| 269 | + value: this._[key] |
| 270 | + }); |
273 | 271 | } |
274 | 272 | return entries; |
275 | 273 | }, |
276 | 274 | size: d3_map_size, |
277 | 275 | empty: d3_map_empty, |
278 | 276 | forEach: function(f) { |
279 | | - for (var key in this) { |
280 | | - if (d3_map_hasOwnProperty.call(this, key)) { |
281 | | - f.call(this, d3_map_unescape(key), this[key]); |
282 | | - } |
| 277 | + for (var key in this._) { |
| 278 | + f.call(this, key, this._[key]); |
283 | 279 | } |
284 | 280 | } |
285 | 281 | }); |
286 | | - var d3_map_prefix = "\x00", d3_map_builtin = new d3_Map(), d3_map_hasOwnProperty = Object.prototype.hasOwnProperty; |
287 | | - function d3_map_escape(key) { |
288 | | - return (key += "") in d3_map_builtin || key[0] === d3_map_prefix ? d3_map_prefix + key : key; |
289 | | - } |
290 | | - function d3_map_unescape(key) { |
291 | | - return (key += "")[0] === d3_map_prefix ? key.slice(1) : key; |
292 | | - } |
293 | 282 | function d3_map_has(key) { |
294 | | - return d3_map_escape(key) in this; |
| 283 | + return key in this._; |
295 | 284 | } |
296 | 285 | function d3_map_remove(key) { |
297 | | - return (key = d3_map_escape(key)) in this && delete this[key]; |
| 286 | + return key in this._ && delete this._[key]; |
298 | 287 | } |
299 | 288 | function d3_map_keys() { |
300 | 289 | var keys = []; |
301 | | - for (var key in this) { |
302 | | - if (d3_map_hasOwnProperty.call(this, key)) { |
303 | | - keys.push(d3_map_unescape(key)); |
304 | | - } |
| 290 | + for (var key in this._) { |
| 291 | + keys.push(key); |
305 | 292 | } |
306 | 293 | return keys; |
307 | 294 | } |
308 | 295 | function d3_map_size() { |
309 | 296 | var size = 0; |
310 | | - for (var key in this) { |
311 | | - if (d3_map_hasOwnProperty.call(this, key)) { |
312 | | - ++size; |
313 | | - } |
| 297 | + for (var key in this._) { |
| 298 | + ++size; |
314 | 299 | } |
315 | 300 | return size; |
316 | 301 | } |
317 | 302 | function d3_map_empty() { |
318 | | - for (var key in this) { |
319 | | - if (d3_map_hasOwnProperty.call(this, key)) { |
320 | | - return false; |
321 | | - } |
| 303 | + for (var key in this._) { |
| 304 | + return false; |
322 | 305 | } |
323 | 306 | return true; |
324 | 307 | } |
|
390 | 373 | if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]); |
391 | 374 | return set; |
392 | 375 | }; |
393 | | - function d3_Set() {} |
| 376 | + function d3_Set() { |
| 377 | + this._ = Object.create(null); |
| 378 | + } |
394 | 379 | d3_class(d3_Set, { |
395 | 380 | has: d3_map_has, |
396 | 381 | add: function(key) { |
397 | | - this[d3_map_escape(key)] = true; |
| 382 | + this._[key] = true; |
398 | 383 | return key; |
399 | 384 | }, |
400 | 385 | remove: d3_map_remove, |
401 | 386 | values: d3_map_keys, |
402 | 387 | size: d3_map_size, |
403 | 388 | empty: d3_map_empty, |
404 | 389 | forEach: function(f) { |
405 | | - for (var key in this) { |
406 | | - if (d3_map_hasOwnProperty.call(this, key)) { |
407 | | - f.call(this, d3_map_unescape(key)); |
408 | | - } |
| 390 | + for (var key in this._) { |
| 391 | + f.call(this, key); |
409 | 392 | } |
410 | 393 | } |
411 | 394 | }); |
412 | | - for (var key in new d3_Set()) d3_map_builtin[key] = true; |
413 | 395 | d3.behavior = {}; |
414 | 396 | d3.rebind = function(target, source) { |
415 | 397 | var i = 1, n = arguments.length, method; |
|
0 commit comments