🖇 Infinitely generating linked list with memoisation (or an nth-generator).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 lines
7.0 KiB

"use strict";var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}(function(f){if((typeof exports==="undefined"?"undefined":_typeof(exports))==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.isEq=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++){o(t[i])}return o}return r}()({1:[function(require,module,exports){module.exports=require("../src/InfiniteList");module.exports.InfiniteListItem=require("../src/InfiniteListItem")},{"../src/InfiniteList":2,"../src/InfiniteListItem":3}],2:[function(require,module,exports){var _require=require("../utils"),isNonZeroFalsy=_require.isNonZeroFalsy,stringify=_require.stringify,areNumbers=_require.areNumbers;var InfiniteListItem=require("./InfiniteListItem");var handler={get:function get(obj,key){if(key in obj)return obj[key];var index=typeof key==="string"&&/^\d*$/g.test(key)?parseInt(key):undefined;if(index)return obj["get"](index)},has:function has(obj,key){var index=typeof key==="string"&&/^\d*$/g.test(key)?parseInt(key):undefined;return key in obj||areNumbers(index)&&index%1===0&&index>=0},enumerate:function enumerate(obj){return obj.keys()},ownKeys:function ownKeys(obj){return obj.keys()}};var InfiniteList=function InfiniteList(start,next){_classCallCheck(this,InfiniteList);this.__start__=start;this.__next__=next;this.__cache__=[];if(typeof Proxy!=="undefined")return new Proxy(this,handler)};if(typeof Symbol!=="undefined"&&Symbol.iterator){InfiniteList.prototype[Symbol.iterator]=function(){var _this=this;var j=0;return{next:function next(){return{value:_this.get(j++),done:false}}}}}InfiniteList.prototype.get=function(index){if(isNonZeroFalsy(index)||index<0||!areNumbers(index))return;var start=this.__start__;var next=this.__next__;var cache=this.__cache__;if(!cache[0])cache[0]=start;if(index===Infinity)return new InfiniteListItem(this,Infinity,Infinity);if(index in cache)return new InfiniteListItem(this,cache[index],index);if(!(index in cache)){if(cache.length<=index&&cache.length-1 in cache)while(cache.length<=index){cache[cache.length]=next(cache[cache.length-1],cache[cache.length-2])}}return new InfiniteListItem(this,cache[index],index)};InfiniteList.prototype.clearCache=function(){this.__cache__=[]};InfiniteList.prototype.take=function(from,to){var arr=[];if(isNonZeroFalsy(from)||from===0&&isNonZeroFalsy(to)||!areNumbers(from)&&isNonZeroFalsy(to))return arr;var source=void 0,target=void 0;if(isNonZeroFalsy(to)){source=0;target=from}else{source=from;target=to+1}for(var i=source;i<target;i++){arr.push(this.get(i))}return arr};InfiniteList.prototype.top=function(){return this.get(0)};InfiniteList.prototype.end=function(){return this.get(Infinity)};InfiniteList.prototype.toString=function(){var length=_typeof(this.first())==="object"?2:5;return["InfiniteList [",this.take(length).map(function(x){return" "+stringify(x.value)})+",","... ]"].join(" ")};InfiniteList.prototype.first=InfiniteList.prototype.top;InfiniteList.prototype.last=InfiniteList.prototype.end;module.exports=InfiniteList},{"../utils":5,"./InfiniteListItem":3}],3:[function(require,module,exports){var _this3=this;var _require2=require("../utils"),stringify=_re