/** @id MochiKit.Iter.iter */
iter: function (iterable, /* optional */ sentinel) { var self = MochiKit.Iter; if (arguments.length == 2) { return self.takewhile( function (a) { return a != sentinel; },
iterable
);
} if (typeof(iterable.next) == 'function') { return iterable;
} elseif (typeof(iterable.iter) == 'function') { return iterable.iter(); /* }elseif(typeof(iterable.__iterator__)=='function'){ // // XXX: We can't support JavaScript 1.7 __iterator__ directly // because of Object.prototype.__iterator__ // returniterable.__iterator__();
*/
}
try { return self.iteratorRegistry.match(iterable);
} catch (e) { var m = MochiKit.Base; if (e == m.NotFound) {
e = new TypeError(typeof(iterable) + ": " + m.repr(iterable) + " is not iterable");
} throw e;
}
},
/** @id MochiKit.Iter.count */
count: function (n) { if (!n) {
n = 0;
} var m = MochiKit.Base; return {
repr: function () { return"count(" + n + ")"; },
toString: m.forwardCall("repr"),
next: m.counter(n)
};
},
/** @id MochiKit.Iter.cycle */
cycle: function (p) { var self = MochiKit.Iter; var m = MochiKit.Base; var lst = []; var iterator = self.iter(p); return {
repr: function () { return"cycle(...)"; },
toString: m.forwardCall("repr"),
next: function () { try { var rval = iterator.next();
lst.push(rval); return rval;
} catch (e) { if (e != self.StopIteration) { throw e;
} if (lst.length === 0) { this.next = function () { throw self.StopIteration;
};
} else { var i = -1; this.next = function () {
i = (i + 1) % lst.length; return lst[i];
};
} returnthis.next();
}
}
};
},
/** @id MochiKit.Iter.repeat */
repeat: function (elem, /* optional */n) { var m = MochiKit.Base; if (typeof(n) == 'undefined') { return {
repr: function () { return"repeat(" + m.repr(elem) + ")";
},
toString: m.forwardCall("repr"),
next: function () { return elem;
}
};
} return {
repr: function () { return"repeat(" + m.repr(elem) + ", " + n + ")";
},
toString: m.forwardCall("repr"),
next: function () { if (n <= 0) { throw MochiKit.Iter.StopIteration;
}
n -= 1; return elem;
}
};
},
/** @id MochiKit.Iter.izip */
izip: function (p, q/*, ...*/) { var m = MochiKit.Base; var self = MochiKit.Iter; var next = self.next; var iterables = m.map(self.iter, arguments); return {
repr: function () { return"izip(...)"; },
toString: m.forwardCall("repr"),
next: function () { return m.map(next, iterables); }
};
},
/** @id MochiKit.Iter.ifilter */
ifilter: function (pred, seq) { var m = MochiKit.Base;
seq = MochiKit.Iter.iter(seq); if (pred === null) {
pred = m.operator.truth;
} return {
repr: function () { return"ifilter(...)"; },
toString: m.forwardCall("repr"),
next: function () { while (true) { var rval = seq.next(); if (pred(rval)) { return rval;
}
} // mozilla warnings aren't too bright return undefined;
}
};
},
/** @id MochiKit.Iter.ifilterfalse */
ifilterfalse: function (pred, seq) { var m = MochiKit.Base;
seq = MochiKit.Iter.iter(seq); if (pred === null) {
pred = m.operator.truth;
} return {
repr: function () { return"ifilterfalse(...)"; },
toString: m.forwardCall("repr"),
next: function () { while (true) { var rval = seq.next(); if (!pred(rval)) { return rval;
}
} // mozilla warnings aren't too bright return undefined;
}
};
},
/** @id MochiKit.Iter.islice */
islice: function (seq/*, [start,] stop[, step] */) { var self = MochiKit.Iter; var m = MochiKit.Base;
seq = self.iter(seq); var start = 0; var stop = 0; var step = 1; var i = -1; if (arguments.length == 2) {
stop = arguments[1];
} elseif (arguments.length == 3) {
start = arguments[1];
stop = arguments[2];
} else {
start = arguments[1];
stop = arguments[2];
step = arguments[3];
} return {
repr: function () { return"islice(" + ["...", start, stop, step].join(", ") + ")";
},
toString: m.forwardCall("repr"),
next: function () { var rval; while (i < start) {
rval = seq.next();
i++;
} if (start >= stop) { throw self.StopIteration;
}
start += step; return rval;
}
};
},
/** @id MochiKit.Iter.imap */
imap: function (fun, p, q/*, ...*/) { var m = MochiKit.Base; var self = MochiKit.Iter; var iterables = m.map(self.iter, m.extend(null, arguments, 1)); var map = m.map; var next = self.next; return {
repr: function () { return"imap(...)"; },
toString: m.forwardCall("repr"),
next: function () { return fun.apply(this, map(next, iterables));
}
};
},
/** @id MochiKit.Iter.applymap */
applymap: function (fun, seq, self) {
seq = MochiKit.Iter.iter(seq); var m = MochiKit.Base; return {
repr: function () { return"applymap(...)"; },
toString: m.forwardCall("repr"),
next: function () { return fun.apply(self, seq.next());
}
};
},
/** @id MochiKit.Iter.chain */
chain: function (p, q/*, ...*/) { // dumb fast path var self = MochiKit.Iter; var m = MochiKit.Base; if (arguments.length == 1) { return self.iter(arguments[0]);
} var argiter = m.map(self.iter, arguments); return {
repr: function () { return"chain(...)"; },
toString: m.forwardCall("repr"),
next: function () { while (argiter.length > 1) { try { return argiter[0].next();
} catch (e) { if (e != self.StopIteration) { throw e;
}
argiter.shift();
}
} if (argiter.length == 1) { // optimize last element var arg = argiter.shift(); this.next = m.bind("next", arg); returnthis.next();
} throw self.StopIteration;
}
};
},
/** @id MochiKit.Iter.takewhile */
takewhile: function (pred, seq) { var self = MochiKit.Iter;
seq = self.iter(seq); return {
repr: function () { return"takewhile(...)"; },
toString: MochiKit.Base.forwardCall("repr"),
next: function () { var rval = seq.next(); if (!pred(rval)) { this.next = function () { throw self.StopIteration;
}; this.next();
} return rval;
}
};
},
/** @id MochiKit.Iter.dropwhile */
dropwhile: function (pred, seq) {
seq = MochiKit.Iter.iter(seq); var m = MochiKit.Base; var bind = m.bind; return { "repr": function () { return"dropwhile(...)"; }, "toString": m.forwardCall("repr"), "next": function () { while (true) { var rval = seq.next(); if (!pred(rval)) { break;
}
} this.next = bind("next", seq); return rval;
}
};
},
_tee: function (ident, sync, iterable) {
sync.pos[ident] = -1; var m = MochiKit.Base; var listMin = m.listMin; return {
repr: function () { return"tee(" + ident + ", ...)"; },
toString: m.forwardCall("repr"),
next: function () { var rval; var i = sync.pos[ident];
/** @id MochiKit.Iter.tee */
tee: function (iterable, n/* = 2 */) { var rval = []; var sync = { "pos": [], "deque": [], "max": -1, "min": -1
}; if (arguments.length == 1 || typeof(n) == "undefined" || n === null) {
n = 2;
} var self = MochiKit.Iter;
iterable = self.iter(iterable); var _tee = self._tee; for (var i = 0; i < n; i++) {
rval.push(_tee(i, sync, iterable));
} return rval;
},
/** @id MochiKit.Iter.list */
list: function (iterable) { // Fast-path for Array and Array-like var rval; if (iterable instanceof Array) { return iterable.slice();
} // this is necessary to avoid a Safari crash if (typeof(iterable) == "function" &&
!(iterable instanceofFunction) && typeof(iterable.length) == 'number') {
rval = []; for (var i = 0; i < iterable.length; i++) {
rval.push(iterable[i]);
} return rval;
}
var self = MochiKit.Iter;
iterable = self.iter(iterable); var rval = []; try { while (true) {
rval.push(iterable.next());
}
} catch (e) { if (e != self.StopIteration) { throw e;
} return rval;
} // mozilla warnings aren't too bright return undefined;
},
/** @id MochiKit.Iter.reduce */
reduce: function (fn, iterable, /* optional */initial) { var i = 0; var x = initial; var self = MochiKit.Iter;
iterable = self.iter(iterable); if (arguments.length < 3) { try {
x = iterable.next();
} catch (e) { if (e == self.StopIteration) {
e = new TypeError("reduce() of empty sequence with no initial value");
} throw e;
}
i++;
} try { while (true) {
x = fn(x, iterable.next());
}
} catch (e) { if (e != self.StopIteration) { throw e;
}
} return x;
},
/** @id MochiKit.Iter.range */
range: function (/* [start,] stop[, step] */) { var start = 0; var stop = 0; var step = 1; if (arguments.length == 1) {
stop = arguments[0];
} elseif (arguments.length == 2) {
start = arguments[0];
stop = arguments[1];
} elseif (arguments.length == 3) {
start = arguments[0];
stop = arguments[1];
step = arguments[2];
} else { thrownew TypeError("range() takes 1, 2, or 3 arguments!");
} if (step === 0) { thrownew TypeError("range() step must not be 0");
} return {
next: function () { if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) { throw MochiKit.Iter.StopIteration;
} var rval = start;
start += step; return rval;
},
repr: function () { return"range(" + [start, stop, step].join(", ") + ")";
},
toString: MochiKit.Base.forwardCall("repr")
};
},
/** @id MochiKit.Iter.sum */
sum: function (iterable, start/* = 0 */) { if (typeof(start) == "undefined" || start === null) {
start = 0;
} var x = start; var self = MochiKit.Iter;
iterable = self.iter(iterable); try { while (true) {
x += iterable.next();
}
} catch (e) { if (e != self.StopIteration) { throw e;
}
} return x;
},
/** @id MochiKit.Iter.exhaust */
exhaust: function (iterable) { var self = MochiKit.Iter;
iterable = self.iter(iterable); try { while (true) {
iterable.next();
}
} catch (e) { if (e != self.StopIteration) { throw e;
}
}
},
/** @id MochiKit.Iter.forEach */
forEach: function (iterable, func, /* optional */self) { var m = MochiKit.Base; if (arguments.length > 2) {
func = m.bind(func, self);
} // fast path for array if (m.isArrayLike(iterable)) { try { for (var i = 0; i < iterable.length; i++) {
func(iterable[i]);
}
} catch (e) { if (e != MochiKit.Iter.StopIteration) { throw e;
}
}
} else {
self = MochiKit.Iter;
self.exhaust(self.imap(func, iterable));
}
},
/** @id MochiKit.Iter.every */
every: function (iterable, func) { var self = MochiKit.Iter; try {
self.ifilterfalse(func, iterable).next(); returnfalse;
} catch (e) { if (e != self.StopIteration) { throw e;
} returntrue;
}
},
/** @id MochiKit.Iter.sorted */
sorted: function (iterable, /* optional */cmp) { var rval = MochiKit.Iter.list(iterable); if (arguments.length == 1) {
cmp = MochiKit.Base.compare;
}
rval.sort(cmp); return rval;
},
/** @id MochiKit.Iter.reversed */
reversed: function (iterable) { var rval = MochiKit.Iter.list(iterable);
rval.reverse(); return rval;
},
/** @id MochiKit.Iter.some */
some: function (iterable, func) { var self = MochiKit.Iter; try {
self.ifilter(func, iterable).next(); returntrue;
} catch (e) { if (e != self.StopIteration) { throw e;
} returnfalse;
}
},
/** @id MochiKit.Iter.iextend */
iextend: function (lst, iterable) { if (MochiKit.Base.isArrayLike(iterable)) { // fast-path for array-like for (var i = 0; i < iterable.length; i++) {
lst.push(iterable[i]);
}
} else { var self = MochiKit.Iter;
iterable = self.iter(iterable); try { while (true) {
lst.push(iterable.next());
}
} catch (e) { if (e != self.StopIteration) { throw e;
}
}
} return lst;
},
/** @id MochiKit.Iter.groupby */
groupby: function(iterable, /* optional */ keyfunc) { var m = MochiKit.Base; var self = MochiKit.Iter; if (arguments.length < 2) {
keyfunc = m.operator.identity;
}
iterable = self.iter(iterable);
// shared var pk = undefined; var k = undefined; var v;
function fetch() {
v = iterable.next();
k = keyfunc(v);
};
function eat() { var ret = v;
v = undefined; return ret;
};
var first = true; var compare = m.compare; return {
repr: function () { return"groupby(...)"; },
next: function() { // iterator-next
// iterate until meet next group while (compare(k, pk) === 0) {
fetch(); if (first) {
first = false; break;
}
}
pk = k; return [k, {
next: function() { // subiterator-next if (v == undefined) { // Is there something to eat?
fetch();
} if (compare(k, pk) !== 0) { throw self.StopIteration;
} return eat();
}
}];
}
};
},
/** @id MochiKit.Iter.groupby_as_array */
groupby_as_array: function (iterable, /* optional */ keyfunc) { var m = MochiKit.Base; var self = MochiKit.Iter; if (arguments.length < 2) {
keyfunc = m.operator.identity;
}
iterable = self.iter(iterable); var result = []; var first = true; var prev_key; var compare = m.compare; while (true) { try { var value = iterable.next(); var key = keyfunc(value);
} catch (e) { if (e == self.StopIteration) { break;
} throw e;
} if (first || compare(key, prev_key) !== 0) { var values = [];
result.push([key, values]);
}
values.push(value);
first = false;
prev_key = key;
} return result;
},
/** @id MochiKit.Iter.arrayLikeIter */
arrayLikeIter: function (iterable) { var i = 0; return {
repr: function () { return"arrayLikeIter(...)"; },
toString: MochiKit.Base.forwardCall("repr"),
next: function () { if (i >= iterable.length) { throw MochiKit.Iter.StopIteration;
} return iterable[i++];
}
};
},
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.12Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.