projects
/
dygraphs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Iterator performance enhancements - turn hasNext and peek into element access, and...
[dygraphs.git]
/
dygraph-utils.js
diff --git
a/dygraph-utils.js
b/dygraph-utils.js
index
8cfd861
..
7aeca8d
100644
(file)
--- a/
dygraph-utils.js
+++ b/
dygraph-utils.js
@@
-684,46
+684,37
@@
Dygraph.isAndroid = function() {
Dygraph.Iterator = function(array, start, length, predicate) {
start = start || 0;
length = length || array.length;
Dygraph.Iterator = function(array, start, length, predicate) {
start = start || 0;
length = length || array.length;
+ this.hasNext = true; // Use to identify if there's another element.
+ this.peek = null; // Use for look-ahead
this.array_ = array;
this.predicate_ = predicate;
this.end_ = Math.min(array.length, start + length);
this.array_ = array;
this.predicate_ = predicate;
this.end_ = Math.min(array.length, start + length);
- this.nextIdx_ = start - 1; // use -1 so initial call to advance works.
- this.hasNext_ = true;
- this.peek_ = null;
- this.advance_();
-}
-
-Dygraph.Iterator.prototype.hasNext = function() {
- return this.hasNext_;
+ this.nextIdx_ = start - 1; // use -1 so initial advance works.
+ this.next(); // ignoring result.
}
Dygraph.Iterator.prototype.next = function() {
}
Dygraph.Iterator.prototype.next = function() {
- if (this.hasNext_) {
- var obj = this.peek_;
- this.advance_();
- return obj;
+ if (!this.hasNext) {
+ return null;
}
}
- return null;
-}
+ var obj = this.peek;
-Dygraph.Iterator.prototype.peek = function() {
- return this.peek_;
-}
-
-Dygraph.Iterator.prototype.advance_ = function() {
- var nextIdx = this.nextIdx_;
- nextIdx++;
- while(nextIdx < this.end_) {
+ var nextIdx = this.nextIdx_ + 1;
+ var found = false;
+ while (nextIdx < this.end_) {
if (!this.predicate_ || this.predicate_(this.array_, nextIdx)) {
if (!this.predicate_ || this.predicate_(this.array_, nextIdx)) {
- this.peek
_
= this.array_[nextIdx];
-
this.nextIdx_ = nextIdx
;
-
return
;
+ this.peek = this.array_[nextIdx];
+
found = true
;
+
break
;
}
nextIdx++;
}
this.nextIdx_ = nextIdx;
}
nextIdx++;
}
this.nextIdx_ = nextIdx;
- this.hasNext_ = false;
- this.peek_ = null;
+ if (!found) {
+ this.hasNext = false;
+ this.peek = null;
+ }
+ return obj;
}
/**
}
/**