Eric H. Jung wrote:
Hi Axel,
The next question to ask is, are you frequently going to hit 500
messages? Or are you most of the time fine with 25? That determines how
much of the array you want to allocate to boot with.
Yes, 500 will be hit constantly and very rapidly.
Then I'd recommend having a 'currentIndex' member, and cycle that
around. That way, you never move the 499 items inside the array that you
didn't intend to change.
OK, I could even just push() the elements onto the end of the array but display
elements in
reverse order in the <tree/>; that is fine--the tree is only displayed when the
user wants to see
it, anyway. But how does a currentIndex prevent the Array from growing without
bounds? I still
need o shift() or splice() every time, no? Is splice() better than shift() to
remove from the
front?
function BoundedStack() {
this._max = 500;
this._buffer = new Array(this._max);
this._current = 0;
this._overflew = false;
}
BoundedStack.prototype = {
push: function(aElem) {
this._current++;
if (this._current == this._max)
this._current = 0;
this._overflew = true;
}
this._buffer[this._current] = aElem;
},
get length() {
return this._overflew ? this._max : this._current;
},
get: function(aIndex) {
if (this._overflew) {
aIndex += this._current + 1; //XXX check this logic
}
aIndex = aIndex % this._max;
return this._buffer[aIndex];
}
}
This is from the top of my head, without testing, all numbers in the
getter could be off by one. Consider this to be devmo-style MIT License ;-)
Axel
_______________________________________________
Project_owners mailing list
[email protected]
http://mozdev.org/mailman/listinfo/project_owners