Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
817def00
Commit
817def00
authored
May 27, 2014
by
Maran
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of github.com:ethereum/eth-go into develop
parents
2232974c
6e24d603
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
71 additions
and
12 deletions
+71
-12
encoding.go
ethutil/encoding.go
+15
-0
trie.go
ethutil/trie.go
+46
-0
trie_test.go
ethutil/trie_test.go
+10
-12
No files found.
ethutil/encoding.go
View file @
817def00
...
...
@@ -59,3 +59,18 @@ func CompactHexDecode(str string) []int {
return
hexSlice
}
func
DecodeCompact
(
key
[]
int
)
string
{
base
:=
"0123456789abcdef"
var
str
string
for
_
,
v
:=
range
key
{
if
v
<
16
{
str
+=
string
(
base
[
v
])
}
}
res
,
_
:=
hex
.
DecodeString
(
str
)
return
string
(
res
)
}
ethutil/trie.go
View file @
817def00
...
...
@@ -442,6 +442,8 @@ type TrieIterator struct {
shas
[][]
byte
values
[]
string
lastNode
[]
byte
}
func
(
t
*
Trie
)
NewIterator
()
*
TrieIterator
{
...
...
@@ -513,3 +515,47 @@ func (it *TrieIterator) Key() string {
func
(
it
*
TrieIterator
)
Value
()
string
{
return
""
}
type
EachCallback
func
(
key
string
,
node
*
Value
)
func
(
it
*
TrieIterator
)
Each
(
cb
EachCallback
)
{
it
.
fetchNode
(
nil
,
NewValue
(
it
.
trie
.
Root
)
.
Bytes
(),
cb
)
}
func
(
it
*
TrieIterator
)
fetchNode
(
key
[]
int
,
node
[]
byte
,
cb
EachCallback
)
{
it
.
iterateNode
(
key
,
it
.
trie
.
cache
.
Get
(
node
),
cb
)
}
func
(
it
*
TrieIterator
)
iterateNode
(
key
[]
int
,
currentNode
*
Value
,
cb
EachCallback
)
{
if
currentNode
.
Len
()
==
2
{
k
:=
CompactDecode
(
currentNode
.
Get
(
0
)
.
Str
())
if
currentNode
.
Get
(
1
)
.
Str
()
==
""
{
it
.
iterateNode
(
key
,
currentNode
.
Get
(
1
),
cb
)
}
else
{
pk
:=
append
(
key
,
k
...
)
if
k
[
len
(
k
)
-
1
]
==
16
{
cb
(
DecodeCompact
(
pk
),
currentNode
.
Get
(
1
))
}
else
{
it
.
fetchNode
(
pk
,
currentNode
.
Get
(
1
)
.
Bytes
(),
cb
)
}
}
}
else
{
for
i
:=
0
;
i
<
currentNode
.
Len
();
i
++
{
pk
:=
append
(
key
,
i
)
if
i
==
16
&&
currentNode
.
Get
(
i
)
.
Len
()
!=
0
{
cb
(
DecodeCompact
(
pk
),
currentNode
.
Get
(
i
))
}
else
{
if
currentNode
.
Get
(
i
)
.
Str
()
==
""
{
it
.
iterateNode
(
pk
,
currentNode
.
Get
(
i
),
cb
)
}
else
{
val
:=
currentNode
.
Get
(
i
)
.
Str
()
if
val
!=
""
{
it
.
fetchNode
(
pk
,
[]
byte
(
val
),
cb
)
}
}
}
}
}
}
ethutil/trie_test.go
View file @
817def00
...
...
@@ -154,7 +154,7 @@ func TestTrieDeleteWithValue(t *testing.T) {
}
func
TestTrie
Iterator
(
t
*
testing
.
T
)
{
func
TestTrie
Purge
(
t
*
testing
.
T
)
{
_
,
trie
:=
New
()
trie
.
Update
(
"c"
,
LONG_WORD
)
trie
.
Update
(
"ca"
,
LONG_WORD
)
...
...
@@ -171,16 +171,14 @@ func TestTrieIterator(t *testing.T) {
}
}
func
Test
Hashes
(
t
*
testing
.
T
)
{
func
Test
TrieIt
(
t
*
testing
.
T
)
{
_
,
trie
:=
New
()
trie
.
Update
(
"cat"
,
"dog"
)
trie
.
Update
(
"ca"
,
"dude"
)
trie
.
Update
(
"doge"
,
"1234567890abcdefghijklmnopqrstuvwxxzABCEFGHIJKLMNOPQRSTUVWXYZ"
)
trie
.
Update
(
"dog"
,
"test"
)
trie
.
Update
(
"test"
,
"1234567890abcdefghijklmnopqrstuvwxxzABCEFGHIJKLMNOPQRSTUVWXYZ"
)
fmt
.
Printf
(
"%x
\n
"
,
trie
.
Root
)
trie
.
Delete
(
"dog"
)
fmt
.
Printf
(
"%x
\n
"
,
trie
.
Root
)
trie
.
Delete
(
"test"
)
fmt
.
Printf
(
"%x
\n
"
,
trie
.
Root
)
trie
.
Update
(
"c"
,
LONG_WORD
)
trie
.
Update
(
"ca"
,
LONG_WORD
)
trie
.
Update
(
"cat"
,
LONG_WORD
)
it
:=
trie
.
NewIterator
()
it
.
Each
(
func
(
key
string
,
node
*
Value
)
{
fmt
.
Println
(
key
,
":"
,
node
.
Str
())
})
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment