diff options
author | zsfelfoldi <zsfelfoldi@gmail.com> | 2015-11-30 20:34:19 +0800 |
---|---|---|
committer | zsfelfoldi <zsfelfoldi@gmail.com> | 2015-12-17 23:07:54 +0800 |
commit | ef422ee1e1eef831c681aaec31ce7da23b12ae6d (patch) | |
tree | 771913e23581908925e4f4b547e8a316ae89e46c /trie/encoding.go | |
parent | e6408617049d10a6366eef33ea9e97b58c7e30f9 (diff) | |
download | dexon-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.go | 21 |
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) |