Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mikolalysenko/morton-page
Morton order page index for multidimensional arrays
https://github.com/mikolalysenko/morton-page
Last synced: about 2 months ago
JSON representation
Morton order page index for multidimensional arrays
- Host: GitHub
- URL: https://github.com/mikolalysenko/morton-page
- Owner: mikolalysenko
- License: mit
- Created: 2013-07-17T16:08:10.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2013-07-18T14:21:09.000Z (over 11 years ago)
- Last Synced: 2024-10-20T14:28:18.395Z (2 months ago)
- Language: JavaScript
- Size: 54.7 KB
- Stars: 12
- Watchers: 5
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
morton-page
===========
A data structure for maintaining a list of pages keyed by [Morton order](http://en.wikipedia.org/wiki/Z-order_curve) (also known as z-order or interleaving).## Example
```javascript
//Create a 2D page store having a capacity of (1<<4) == 16
var pageStore = require("morton-page")(2, 4)//Add a page
pageStore.add({key: [10, 10], value: "foo"})//Retrieve a page
var x = pageStore.get(10, 10)
console.log(x)//Remove the page
pageStore.remove(10, 10)//Try pulling the page out (returns null now)
console.log(pageStore.get(10, 10))
```## Install
npm install morton-page
## API
```javascript
var createPageStore = require("morton-page")
```### Constructor
#### `var store = createPageStore(dimension, log_size[, shift, key])`
Creates a z-order page store.* `dimension` is the dimension of the pages
* `log_size` is the log base 2 of the number of buckets in the store
* `shift` is the number of bits to shift each page by before indexing (default: `0`)
* `key` is the property of each page to use for the index (default: `"key"`)**Returns** An instance of a `MortonPageStore` class specialized for the given input parameters.
### Methods
#### `store.add(page)`
Adds a page to the store* `page` is an object with a field called `key` which is an array of coordinates representing the identifier of the page in the store.
#### `store.get(i0, i1, ...)`
Retrieves the page with the given key from the page store* `i0, i1, ...` is the name of the page
**Returns** The page with the key `i0, i1, ...` if it is in the store, or `null` otherwise.
#### `store.remove(i0, i1, ...)`
Removes the page with the given key from the store.* `i0, i1, ...` is the key of the page
## FAQ
### Why use this instead of an object?
Basically it is faster and does not require creating any string objects. All of the methods in this class require 0 allocations and thus will not trigger garbage collection events.
## Credits
(c) 2013 Mikola Lysenko. MIT License