mirror of
https://github.com/edu4rdshl/gnome-shell.git
synced 2026-07-18 07:34:54 +00:00
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
This commit is contained in:
parent
c4f744d7ec
commit
3a0197c8db
1 changed files with 4 additions and 1 deletions
|
|
@ -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;
|
||||
},
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue