aboutsummaryrefslogtreecommitdiffstats
path: root/ethutil
diff options
context:
space:
mode:
Diffstat (limited to 'ethutil')
-rw-r--r--ethutil/value.go29
-rw-r--r--ethutil/value_test.go13
2 files changed, 42 insertions, 0 deletions
diff --git a/ethutil/value.go b/ethutil/value.go
index 3dd84d12d..46681ec2a 100644
--- a/ethutil/value.go
+++ b/ethutil/value.go
@@ -224,3 +224,32 @@ func (val *Value) Append(v interface{}) *Value {
return val
}
+
+type ValueIterator struct {
+ value *Value
+ currentValue *Value
+ idx int
+}
+
+func (val *Value) NewIterator() *ValueIterator {
+ return &ValueIterator{value: val}
+}
+
+func (it *ValueIterator) Next() bool {
+ if it.idx >= it.value.Len() {
+ return false
+ }
+
+ it.currentValue = it.value.Get(it.idx)
+ it.idx++
+
+ return true
+}
+
+func (it *ValueIterator) Value() *Value {
+ return it.currentValue
+}
+
+func (it *ValueIterator) Idx() int {
+ return it.idx
+}
diff --git a/ethutil/value_test.go b/ethutil/value_test.go
index 0e2da5328..a100f44bc 100644
--- a/ethutil/value_test.go
+++ b/ethutil/value_test.go
@@ -50,3 +50,16 @@ func TestValueTypes(t *testing.T) {
t.Errorf("expected BigInt to return '%v', got %v", bigExp, bigInt.BigInt())
}
}
+
+func TestIterator(t *testing.T) {
+ value := NewValue([]interface{}{1, 2, 3})
+ it := value.NewIterator()
+ values := []uint64{1, 2, 3}
+ i := 0
+ for it.Next() {
+ if values[i] != it.Value().Uint() {
+ t.Errorf("Expected %d, got %d", values[i], it.Value().Uint())
+ }
+ i++
+ }
+}