🖇 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
6.9 KiB

7 years ago
"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();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){var _require=require("./utils"),always=_require.always,isNonZeroFalsy=_require.isNonZeroFalsy,stringify=_require.stringify,areNumbers=_require.areNumbers;var InfiniteListItem=function(){function InfiniteListItem(list,value,index){_classCallCheck(this,InfiniteListItem);this.value=value;this.index=index;this.next=function(z){return!z?list.get(index+1):list.get(index+z)};this.previous=function(z){return!z?list.get(index-1):list.get(index-z)};if(typeof Symbol!=="undefined"&&Symbol.iterator){this[Symbol.iterator]=function(){return{next:function next(){return{value:list.get(index+1),done:false}}}}}}_createClass(InfiniteListItem,[{key:"toString",value:function toString(){return"InfiniteListItem [ .. "+stringify(this.value)+" .. ]"}}]);return InfiniteListItem}();var InfiniteList=function InfiniteList(start,next){_classCallCheck(this,InfiniteList);var cache=[];var j=0;this.get=function(index){if(isNonZeroFalsy(index)||index<0||!areNumbers(index))return;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)};this.clearCache=function(){return cache=[],undefined};if(typeof Symbol!=="undefined"&&Symbol.iterator){this[Symbol.iterator]=function(){var _this=this;return{next:function next(){return{value:_this.get(j++),done:false}}}}}if(typeof Proxy!=="undefined")return new Proxy(this,{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()}})};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