data-state
v0.1.0
Published
Fast state based on top of typed arrays.
Downloads
11
Maintainers
Readme
data-state
Fast state based on top of typed arrays.
A simple typed array state container that is fast and scalable.
var state = createState({
type: Float32Array
}, function dispatch (index, value, oldValue) {
// Handle value changes on the data
})
for (var i = 0; i < 100) {
state.stage(i, Math.random())
}
state.update()
I might use it in managing coordinates in canvas, and videos/audio processing. Or maybe any time I want a fast/simple Set
:
var state = createState()
state.set(0, 123)
state.get(0) === 123
Installation
$ npm install --save data-state
Usage
createState([options], dispatch)
Create state
and container for data. Returns state
functions.
Parameters
options
(Object
): Options for your state and data.type
(TypedArray
): ATypedArray
interface for the data backing your state. Defaults toFloat32Array
.data
(ArrayBuffer
): A buffer to initialize the typed array with. (Note: overrideslength
if set)length
(Number
): Alternative todata
, initialize empty typed array at specified length. Defaults to10000
.lowSecurity
(Boolean
): Makes thedump()
return state internals. Defaults tofalse
.
dispatch
(Function
): Dispatch function triggered every time you update.
Dispatch
Updates are called on your function like dispatch(index, value, oldValue)
. This is called by both state.set()
and state.update()
.
Example
var state = createState({
type: Uint16Array,
length: 500 // Maximum amount of data.
}, function (i, value, oldValue) {
// Dispatch on update
})
state.get(index)
Return value at the given index
number.
Example
var foo = state({ data: someExistingData })
var value = foo.get(10)
state.set(index, value)
Set value at the given index
number. This calls a dispatch after (opposed to state.stage()
).
Example
var state = createState({ type: Float32Array })
state.set(0, 100)
state.get(0) === 100
state.set(1, 0.005)
state.stage(index, value)
Stages the setting of value
at the given index
number. Values are dispatched when state.update()
is called.
Example
var state = createState()
state.stage(1, 123)
stage.get(1) !== 123
// Update it, set staged values
stage.update()
stage.get(1) === 123
state.update()
Sets staged values, dispatching them in ascending order of their index numbers.
Example
var state = createState({
type: Float32Array
}, function dispatch (index, value, oldValue) {
// Handle value changes on the data
})
for (var i = 0; i < 100) {
state.stage(i, Math.random())
}
state.update()
state.length()
Get length of state's array.
Example
var state = createState({ length: 10 })
// Get length
state.length() === 10
state.dump()
This only returns null
by default. It can be a risk if you do not want access to any of the data below (i.e. passing to plugins). It can be useful for debugging and unit testing though.
Returns an object containing data
, staging
, dispatch
, and options
.
Example
var state = createState({ lowSecurity: true })
var internals = state.dump()
internals.staging[0] = 123
internals.data.buffer
internals.dispatch(10, 0.101, 0.001)
// ...
License
MIT © Jamen Marz