// A search utility for arbitrary (new) tileUpdates. // Provides `add` functionality, which auto-checks adjacency with other blocks. Subsequently, it searches them // Provides `del` functionality, which should be used with auto-deletion // As of now, it assumes that no search block is larger than 8x16, or the size of a block. const bs = require('binary-search'); function getComp(index){ return (element,needle) => element[index] - needle[index]; } function Search(searchBlock){ // searchBlock should be a Space object. this.tiles = {}; // Object which stores Spaces. this.vertsort = []; // Vertically sorted list of tiles for fast addition, deletion, and searching this.horisort = []; // Horizantally sorted list this.add = function(loc, space){ // loc should be [tileY,tileX] and space Space. this.tiles[loc] = space; vertsort.insert(loc, bs(vertsort, loc, getComp(0))); // TEST horisort.insert(loc, bs(horisort, loc, getComp(1))); } this.del = function(loc){ delete tiles[loc]; vertsort.remove(bs(vertsort, loc, getComp(0))); // TEST horisort.remove(bs(horisort, loc, getComp(1))); } } module.exports = Search;