simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

lruQueue.js (1389B)


      1 "use strict";
      2 
      3 Object.defineProperty(exports, "__esModule", {
      4   value: true
      5 });
      6 exports.lruQueue = lruQueue;
      7 
      8 // (c) 2018, Mariusz Nowak
      9 // SPDX-License-Identifier: ISC
     10 // Derived from https://github.com/medikoo/lru-queue
     11 function lruQueue(limit) {
     12   var size = 0;
     13   var base = 1;
     14   var queue = Object.create(null);
     15   var map = Object.create(null);
     16   var index = 0;
     17 
     18   var del = function del(id) {
     19     var oldIndex = map[id];
     20     if (!oldIndex) return;
     21     delete queue[oldIndex];
     22     delete map[id];
     23     --size;
     24     if (base !== oldIndex) return;
     25 
     26     if (!size) {
     27       index = 0;
     28       base = 1;
     29       return;
     30     }
     31 
     32     while (!hasOwnProperty.call(queue, ++base)) {
     33       continue;
     34     }
     35   };
     36 
     37   limit = Math.abs(limit);
     38   return {
     39     hit: function hit(id) {
     40       var oldIndex = map[id];
     41       var nuIndex = ++index;
     42       queue[nuIndex] = id;
     43       map[id] = nuIndex;
     44 
     45       if (!oldIndex) {
     46         ++size;
     47         if (size <= limit) return undefined;
     48         id = queue[base];
     49         del(id);
     50         return id;
     51       }
     52 
     53       delete queue[oldIndex];
     54       if (base !== oldIndex) return undefined;
     55 
     56       while (!hasOwnProperty.call(queue, ++base)) {
     57         continue;
     58       }
     59 
     60       return undefined;
     61     },
     62     delete: del,
     63     clear: function clear() {
     64       size = index = 0;
     65       base = 1;
     66       queue = Object.create(null);
     67       map = Object.create(null);
     68     }
     69   };
     70 }
     71 
     72 ;