[gnome-shell] Hash: make .size() constant time



commit b0dc841e00d2f99af4bdfbe60800c74f0c89f50c
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Sun May 12 20:13:08 2013 +0200

    Hash: make .size() constant time
    
    MessageTray calls .size() very often to update the no messages label,
    so a linear time implementation is not good enough.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=700194

 js/misc/hash.js |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
---
diff --git a/js/misc/hash.js b/js/misc/hash.js
index 19d4df6..db70d65 100644
--- a/js/misc/hash.js
+++ b/js/misc/hash.js
@@ -58,6 +58,7 @@ const Map = new Lang.Class({
 
     _init: function(iterable) {
         this._pool = { };
+        this._size = 0;
 
         if (iterable) {
             for (let i = 0; i < iterable.length; i++) {
@@ -99,6 +100,7 @@ const Map = new Lang.Class({
             node.value = value;
         } else {
             this._pool[hash] = { key: key, value: value };
+            this._size++;
         }
     },
 
@@ -108,6 +110,7 @@ const Map = new Lang.Class({
 
         if (node && _sameValue(node.key, key)) {
             delete this._pool[hash];
+            this._size--;
             return [node.key, node.value];
         } else {
             return [null, null];
@@ -136,6 +139,6 @@ const Map = new Lang.Class({
     },
 
     size: function() {
-        return Object.getOwnPropertyNames(this._pool).length;
+        return this._size;
     },
 });


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]