rangemap v0.8.0
rangemap.js
A memory efficient, garbage-collector-friendly, linked list for allocation of fixed-size, indexed ranges.
Installation
Using npm
:
$ npm install rangemap
Using 'bower´:
$ bower install rangemap
In your web project, include the file rangemap.js
.
Usage
In Node.js:
var RangeMap = require('rangemap').RangeMap;
var map = new RangeMap(0xffff);
In Webbrowser using an AMD loader:
var RangeMap = require('rangemap').RangeMap;
var map = new RangeMap(0xffff);
In Webbrowser without an AMD loader:
<script src="rangemap.js"></script>
<script>
var map = new RangeMap(0xffff);
</script>
Class: RangeMap
A RangeMap
has the following methods, members.
new RangeMap(startOrLength, end, options)
startOrLength
The range start (ifend
is present) else length of the map (start is then set to 0).end
The range end.options
{Object}useAllocPool
{Boolean} Use an object pool when creating new Segment object instances. Default=falsedefragAfterClear
{Boolean} De-frags (merges) empty (null) ranges after clear is issued. Default=false
rangemap.start
Represents the start position of the RangeMap
.
rangemap.end
Represents the end position of the RangeMap
.
rangemap.length
Represents the total number of indicies in the RangeMap
.
rangemap.unallocated
Represents the total number of unallocated indicies in the RangeMap
.
rangemap.ranges
Represents the total number of Range objects in the RangeMap
.
rangemap.useAllocPool
Indicates if the object pool is should be used when creating new RangeMapSegment
object instances.
rangemap.defragAfterClear
Indicates that segments should be de-fraged after the clear
method is issued.
rangemap.init(start, end)
start
{Number} The start of the range.end
{Number} The end of the range.
The RangeMap
class is automatically initialized in constructor, so no need to call init
on a newly created RangeMap. The init
can however after the destroy
method is called.
rangemap.alloc(length, value)
length
{Number} Number of inidices that should be allocatedvalue
{Object} A value associated with the range.- return {Segment} An Array with
RangeMapSegment
instance's representing the newly allocated range.
Allocates a new range of size length
. The alloc
method tries to keep the allocation as little fragmented as possible, but there is now guarantee that the ranges is in one sequence.
rangemap.dealloc(value)
value
{Object} A value associated with the range.- return {Number} The number of unallocations that was made (null ranges are not included).
Deallocates all ranges of value
.
rangemap.clear(start, end)
start
{Number} The start position.end
{Number} The end position.- return {Number} The number of unallocations that was made (null ranges are not included).
Deallocates all segments between start
and end
, with a value.
rangemap.validateRange(value, start, end)
value
{Object} The value to validate against.start
{Number} The start position.end
{Number} The end position. Default=rangemap.end- return {Boolean}
true
if defined range matchesvalue
, elsefalse
.
Validates that specified value
is within defined range.
rangemap.getValue(pos)
pos
{Number} The position in range- return {Object} The
value
of specifiedpos
.
Returns the value
associated with specified pos
.
rangemap.getSegmentsByValue(value)
value
{Number} Thevalue
to find.- return {Array} array with all matching range segments.
Finds all range segments of given value
.
rangemap.destroy()
Destroys the RangeMap instance and free's all range segments.
Class: RangeMapSegment
A RangeMapSegment
, which represents a seqment in a RangeMap
, has the following methods, members.
RangeMapSegment.poolMaxObjects
(static) Inidicates how many objects that should be stored in the allocation pool. Default=1000
rangemapsegment.start
Represents the start position of the RangeMapSegment
.
rangemapsegment.end
Represents the end position of the RangeMapSegment
.
rangemapsegment.length
Represents the total number of indicies in the RangeMapSegment
.
Testing
There are a number of unit-tests in the package. The easiest way is to run the test suite via npm
in the repository:
$ npm test
Browser compatibility
This library is compatible with all major browsers.
Issues
Please report any issue on github: https://github.com/jfd/rangemap-js/issues
License
RangeMap.js is licensed under the MIT license. See LICENSE in this repo for more information.
Copyright
Copyright (c) 2013 Johan Dahlberg http://jfd.github.com
11 years ago