git ssb

0+

wanderer🌟 / js-dfinity-radix-tree



Commit 1bb0f712f235b45d52a42d0114f890762ece4602

added flush

wanderer committed on 8/4/2017, 8:06:42 PM
Parent: 8c69b0f11212bb2c638df784054352a8f974a63b

Files changed

index.jschanged
tests/index.jschanged
index.jsView
@@ -10,11 +10,9 @@
1010
1111 const RadixTree = module.exports = class RadixTree {
1212 constructor (opts) {
1313 this.root = opts.root || {'/': null}
14- this.dag = opts.dag
15- this.radix = 2
16- this.graph = new Graph(this.dag)
14 + this.graph = opts.graph || new Graph(opts.dag)
1715 }
1816
1917 static get ArrayConstructor () {
2018 return Uint1Array
@@ -28,8 +26,10 @@
2826 let index = 0
2927 let root = this.root
3028 let parent
3129 while (1) {
30 + // load the root
31 + await this.graph.get(root, 0, true)
3232 if (hasExtension(root)) {
3333 let extensionIndex = 0
3434 const extensionLen = getExLength(root)
3535 const extension = getExtension(root)
@@ -53,9 +53,9 @@
5353
5454 let keySegment = key[index]
5555 if (keySegment !== undefined) {
5656 const branch = getBranch(root)
57- await this.graph.get(branch, keySegment)
57 + await this.graph.get(branch, keySegment, true)
5858 // preseves the '/'
5959 const nextRoot = branch[keySegment]
6060 if (!nextRoot) {
6161 return {
@@ -75,9 +75,9 @@
7575
7676 let value = getValue(root)
7777
7878 if (value && value['/']) {
79- value = await this.graph.get(root, VALUE)
79 + value = await this.graph.get(root, VALUE, true)
8080 }
8181
8282 return {
8383 value: value,
@@ -188,15 +188,17 @@
188188 }
189189 }
190190 }
191191
192 + flush () {
193 + return this.graph.flush(this.root)
194 + }
195 +
192196 static formatKey (key) {
193197 if (typeof key === 'string') {
194198 key = encoder.encode(key)
195- return new RadixTree.ArrayConstructor(key.buffer)
196- } else {
197- return key
198199 }
200 + return new RadixTree.ArrayConstructor(key.buffer)
199201 }
200202 }
201203
202204 function setBranch (node, branch) {
tests/index.jsView
@@ -8,64 +8,76 @@
88 })
99
1010 node.on('ready', () => {
1111 tape('set and get', async t => {
12- const tree = new RadixTree({
12 + let tree = new RadixTree({
1313 dag: node.dag
1414 })
15- try {
16- await tree.set('test', 'cat')
17- let val = await tree.get('test')
18- t.equals(val, 'cat')
19- await tree.set('te', 'blop')
20- val = await tree.get('test')
21- t.equals(val, 'cat')
15 + await tree.set('test', 'cat')
16 + let val = await tree.get('test')
17 + t.equals(val, 'cat')
18 + await tree.set('te', 'blop')
19 + val = await tree.get('test')
20 + t.equals(val, 'cat')
2221
23- val = await tree.get('te')
24- t.equals(val, 'blop')
22 + val = await tree.get('te')
23 + t.equals(val, 'blop')
2524
26- await tree.set('rad', 'cat2')
25 + await tree.set('rad', 'cat2')
2726
28- val = await tree.get('rad')
29- t.equals(val, 'cat2')
27 + val = await tree.get('rad')
28 + t.equals(val, 'cat2')
3029
31- await tree.set('test', 'cat111')
32- val = await tree.get('test')
33- t.equals(val, 'cat111')
34- } catch (e) {
35- console.log(e)
36- }
30 + await tree.set('test', 'cat111')
31 + val = await tree.get('test')
32 + t.equals(val, 'cat111')
33 +
34 + const stateRoot = await tree.flush()
35 +
36 + // try reteriving node from ipfs
37 + tree = new RadixTree({
38 + dag: node.dag,
39 + root: stateRoot
40 + })
41 +
42 + val = await tree.get('te')
43 + t.equals(val, 'blop')
44 +
45 + val = await tree.get('rad')
46 + t.equals(val, 'cat2')
47 +
48 + val = await tree.get('test')
49 + t.equals(val, 'cat111')
50 + console.log(JSON.stringify(tree.root, null, 2))
51 +
3752 t.end()
3853 })
3954
4055 tape('branch nodes', async t => {
4156 const tree = new RadixTree({
4257 dag: node.dag
4358 })
44- try {
45- let key0 = new RadixTree.ArrayConstructor([1, 1, 0, 0])
46- await tree.set(key0, 'cat')
47- let key1 = new RadixTree.ArrayConstructor([0, 1, 0, 1])
48- await tree.set(key1, 'cat2')
49- let val = await tree.get(key0)
50- t.equals(val, 'cat')
5159
52- val = await tree.get(key1)
53- t.equals(val, 'cat2')
60 + let key0 = new RadixTree.ArrayConstructor([1, 1, 0, 0])
61 + await tree.set(key0, 'cat')
62 + let key1 = new RadixTree.ArrayConstructor([0, 1, 0, 1])
63 + await tree.set(key1, 'cat2')
64 + let val = await tree.get(key0)
65 + t.equals(val, 'cat')
5466
55- let key3 = new RadixTree.ArrayConstructor([0, 1, 0, 1, 1])
56- await tree.set(key3, 'test')
57- val = await tree.get(key3)
67 + val = await tree.get(key1)
68 + t.equals(val, 'cat2')
5869
59- t.equals(val, 'test')
70 + let key3 = new RadixTree.ArrayConstructor([0, 1, 0, 1, 1])
71 + await tree.set(key3, 'test')
72 + val = await tree.get(key3)
6073
61- let key4 = new RadixTree.ArrayConstructor([0, 1, 0, 0, 0])
62- await tree.set(key4, 'dog')
63- val = await tree.get(key4)
64- t.equals(val, 'dog')
65- } catch (e) {
66- console.log(e)
67- }
74 + t.equals(val, 'test')
75 +
76 + let key4 = new RadixTree.ArrayConstructor([0, 1, 0, 0, 0])
77 + await tree.set(key4, 'dog')
78 + val = await tree.get(key4)
79 + t.equals(val, 'dog')
6880 t.end()
6981 })
7082
7183 tape('delete', async t => {

Built with git-ssb-web