aboutsummaryrefslogtreecommitdiffstats
path: root/trie/encoding.go
diff options
context:
space:
mode:
authorzsfelfoldi <zsfelfoldi@gmail.com>2015-11-30 20:34:19 +0800
committerzsfelfoldi <zsfelfoldi@gmail.com>2015-12-17 23:07:54 +0800
commitef422ee1e1eef831c681aaec31ce7da23b12ae6d (patch)
tree771913e23581908925e4f4b547e8a316ae89e46c /trie/encoding.go
parente6408617049d10a6366eef33ea9e97b58c7e30f9 (diff)
downloaddexon-ef422ee1e1eef831c681aaec31ce7da23b12ae6d.tar.gz
dexon-ef422ee1e1eef831c681aaec31ce7da23b12ae6d.tar.zst
dexon-ef422ee1e1eef831c681aaec31ce7da23b12ae6d.zip
light: implemented odr-capable trie and state structures
Diffstat (limited to 'trie/encoding.go')
-rw-r--r--trie/encoding.go21
1 files changed, 21 insertions, 0 deletions
diff --git a/trie/encoding.go b/trie/encoding.go
index 3c172b843..761bad188 100644
--- a/trie/encoding.go
+++ b/trie/encoding.go
@@ -69,6 +69,27 @@ func compactHexDecode(str []byte) []byte {
return nibbles
}
+// compactHexEncode encodes a series of nibbles into a byte array
+func compactHexEncode(nibbles []byte) []byte {
+ nl := len(nibbles)
+ if nl == 0 {
+ return nil
+ }
+ if nibbles[nl-1] == 16 {
+ nl--
+ }
+ l := (nl + 1) / 2
+ var str = make([]byte, l)
+ for i, _ := range str {
+ b := nibbles[i*2] * 16
+ if nl > i*2 {
+ b += nibbles[i*2+1]
+ }
+ str[i] = b
+ }
+ return str
+}
+
func decodeCompact(key []byte) []byte {
l := len(key) / 2
var res = make([]byte, l)