⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iter.js

📁 Ajax下日志框架
💻 JS
📖 第 1 页 / 共 2 页
字号:
/***MochiKit.Iter 1.3.1See <http://mochikit.com/> for documentation, downloads, license, etc.(c) 2005 Bob Ippolito.  All rights Reserved.***/if (typeof(dojo) != 'undefined') {    dojo.provide('MochiKit.Iter');    dojo.require('MochiKit.Base');}if (typeof(JSAN) != 'undefined') {    JSAN.use("MochiKit.Base", []);}   try {    if (typeof(MochiKit.Base) == 'undefined') {        throw "";    }} catch (e) {    throw "MochiKit.Iter depends on MochiKit.Base!";}              if (typeof(MochiKit.Iter) == 'undefined') {    MochiKit.Iter = {};}                   MochiKit.Iter.NAME = "MochiKit.Iter";MochiKit.Iter.VERSION = "1.3.1";MochiKit.Base.update(MochiKit.Iter, {    __repr__: function () {        return "[" + this.NAME + " " + this.VERSION + "]";    },    toString: function () {        return this.__repr__();    },    registerIteratorFactory: function (name, check, iterfactory, /* optional */ override) {        MochiKit.Iter.iteratorRegistry.register(name, check, iterfactory, override);    },    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;        } else if (typeof(iterable.iter) == 'function') {            return iterable.iter();        }        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;        }    },    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)        };    },    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];                        };                    }                    return this.next();                }            }        };    },    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;            }        };    },                next: function (iterator) {        return iterator.next();    },    izip: function (p, q/*, ...*/) {        var m = MochiKit.Base;        var next = MochiKit.Iter.next;        var iterables = m.map(iter, arguments);        return {            repr: function () { return "izip(...)"; },            toString: m.forwardCall("repr"),            next: function () { return m.map(next, iterables); }        };    },    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;            }        };    },    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;            }        };    },         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];        } else if (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;            }        };    },    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));            }        };    },            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());            }        };    },    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);                    return this.next();                }                throw self.StopIteration;            }        };    },    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;            }        };    },    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];                if (i == sync.max) {                    rval = iterable.next();                    sync.deque.push(rval);                    sync.max += 1;                    sync.pos[ident] += 1;                } else {                    rval = sync.deque[i - sync.min];                    sync.pos[ident] += 1;                    if (i == sync.min && listMin(sync.pos) != sync.min) {                        sync.min += 1;                        sync.deque.shift();                    }                }                return rval;            }        };    },    tee: function (iterable, n/* = 2 */) {        var rval = [];        var sync = {            "pos": [],            "deque": [],            "max": -1,            "min": -1        };        if (arguments.length == 1) {            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;    },    list: function (iterable) {        // Fast-path for Array and Array-like        var m = MochiKit.Base;        if (typeof(iterable.slice) == 'function') {            return iterable.slice();        } else if (m.isArrayLike(iterable)) {            return m.concat(iterable);        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -