🖇 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.5 KiB

6 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{done:false,value:list.get(index+1)}}}}}}_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{done:false,value:_this.get(j++)}}}}}};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;Infinite