Store.coffee | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
EventEmitter = (require 'events').EventEmitter
List = (require '../list/List.coffee').List
Cursor = (require './Cursor.coffee').Cursor
class Store extends EventEmitter | |||||||||||||||||
@private | env: undefined | ||||||||||||||||
@private | name: undefined | ||||||||||||||||
@private | structureId: undefined | ||||||||||||||||
@private | config: undefined | ||||||||||||||||
@private | log: undefined | ||||||||||||||||
@private | list: undefined
@EMITTER: new EventEmitter() | ||||||||||||||||
Constructor. @param env @param name @param structureId @param config | @create$Environment$String$int$StoreConfiguration: (env, name, structureId, config, o) ->
if !o? then o = new Store
o.env = env
o.name = name
o.structureId = structureId
o.config = config
log = env.getLog$String name
List.EMITTER.once 'create', (list) =>
o.list = list
Store.EMITTER.emit 'create', o
List.create$Log$Boolean$int log, config.dublicates, structureId
getName: () ->
return @name
getList: () ->
return @list
getConfig: () ->
return @config
get$TransactionDescriptor$ByteIterable$emit: (txn, key) ->
list = txn.getCurrentList$String @name
list.once 'get', (node) =>
if node?
@emit 'get', node.value
else
@emit 'get', undefined
list.get$ByteIterable$emit key
exists$TransactionDescriptor$ByteIterable$ByteIterable$emit: (txn, key, data) ->
list = txn.getCurrentList$String @name
list.once 'get', (node) =>
if node?
value = node.value
value.once 'compare', (res) =>
@emit 'exists', res
res = value.compare$int$int$ByteIterable$emit(0, value.getLength(), data)
if res?
value.removeAllListeners 'compare'
@emit 'exists', res
else
@emit 'exists', false
list.get$ByteIterable$emit key | ||||||||||||||||
If tree supports duplicates, then add key/value pair. If tree doesn't support duplicates and key already exists, then overwrite value. If tree doesn't support duplicates and key doesn't exists, then add key/value pair.
|