0.7.0 • Published 2 years ago
@graspologic/memstore v0.7.0
@graspologic/memstore
A fast, memory efficient, data storage library that utilizes ArrayBuffer instances as its storage medium.
Usage
First we create an implementation that users will directly interact with.
Rectangle Implementation
import {
createLayoutBuilder,
InterpretationHint,
AttributeType,
PropertySpecification,
createReader
} from '@graspologic/memstore'
// create a unique symbol for our type we are defining
export const type = Symbol('Rectangle')
// Create a memory layout descriptor which describes the
// properties of a rectangle
export const memoryLayout = createLayoutBuilder()
.addUint32('color')
.addFloat32Vec2('position', { components: ['x', 'y'] })
.addFloat32('width')
.addFloat32('height')
.build()
// Set up an interface which represents a rectangle that matches
// the data of the memory layout defined above
export interface Rectangle {
// uint32
color: number
// float32[2]
position: [number, number]
// float32
width: number
// float32
height: number
}
// Create a class implementation using the layout you created earlier
export const RectangleImpl = createReader<Rectangle>(
type,
memoryLayout,
)
Now we create a store around our Rectangle implementation so we can store their data in the underlying ArrayBuffer
Rectangle Store
import {
ArrayStore,
ArrayStoreImpl,
SlotAllocator,
ReaderStoreImpl,
} from '@graspologic/memstore'
// Defined above
import { RectangleImpl, memoryLayout } from './rectangle'
export function createStore() {
// Constructs an underlying ArrayBuffer backed store for storing data
// in the format of the memoryLayout you created earlier
const store: ArrayStore = new ArrayStoreImpl(memoryLayout)
const initialCapacity = 1
const slotAllocator = new SlotAllocator(initialCapacity)
// Constructs a store which interacts directly with your implementation you created earlier
return new ReaderStoreImpl(RectangleImpl, store, slotAllocator)
}
Finally we construct our Rectangle store and add instances of it
Use the store
import { RectangleImpl } from './rectangle'
import { createStore } from './rectangleStore'
const myStore = createStore()
const myRectangle = new RectangleImpl()
myRectangle.color = 0xff00ff
myRectangle.position = [10, 10]
myRectangle.width = 20
myRectangle.height = 200
// Add the rectangle to our store
myStore.receive(myRectangle)
// Underlying ArrayBuffer that is storing the rectangle data.
// The data is in the layout we created earlier in the rectangle module
const ab = myStore.store.buffer
// Iterate through all the rectangles in the store
for (const rectangle of myStore) {
rectangle.width = 200
rectangle.position = [Math.random() * 100, Math.random() * 100]
}
See the API documentation or examples for additional examples.
0.7.0
2 years ago
0.7.0-13
3 years ago
0.7.0-12
3 years ago
0.7.0-11
3 years ago
0.7.0-10
3 years ago
0.7.0-9
3 years ago
0.7.0-8
3 years ago
0.7.0-7
3 years ago
0.7.0-6
3 years ago
0.7.0-3
3 years ago
0.7.0-5
3 years ago
0.0.7-3
3 years ago
0.7.0-4
3 years ago
0.7.0-1
3 years ago
0.7.0-2
3 years ago
0.7.0-0
3 years ago
0.6.0
3 years ago
0.5.0
3 years ago
0.5.0-3
3 years ago
0.5.0-2
3 years ago
0.5.0-modularize
4 years ago
0.5.0-1
4 years ago
0.4.1-beta.14.0
4 years ago
0.4.0
4 years ago