Skip to content

Commit 0c73dea

Browse files
authored
Merge pull request #316 from onflow/fxamacker/change-array-get-to-return-value
Change `Array.Get()` to return `Value` instead of `Storable`
2 parents f54dc2f + 044db01 commit 0c73dea

File tree

4 files changed

+23
-20
lines changed

4 files changed

+23
-20
lines changed

array.go

+12-3
Original file line numberDiff line numberDiff line change
@@ -1995,9 +1995,18 @@ func NewArrayWithRootID(storage SlabStorage, rootID StorageID) (*Array, error) {
19951995
}, nil
19961996
}
19971997

1998-
func (a *Array) Get(i uint64) (Storable, error) {
1999-
// Don't need to wrap error as external error because err is already categorized by ArraySlab.Get().
2000-
return a.root.Get(a.Storage, i)
1998+
func (a *Array) Get(i uint64) (Value, error) {
1999+
storable, err := a.root.Get(a.Storage, i)
2000+
if err != nil {
2001+
// Don't need to wrap error as external error because err is already categorized by ArraySlab.Get().
2002+
return nil, err
2003+
}
2004+
v, err := storable.StoredValue(a.Storage)
2005+
if err != nil {
2006+
// Wrap err as external error (if needed) because err is returned by Storable interface.
2007+
return nil, wrapErrorfAsExternalErrorIfNeeded(err, "failed to get storable's stored value")
2008+
}
2009+
return v, nil
20012010
}
20022011

20032012
func (a *Array) Set(index uint64, value Value) (Storable, error) {

array_bench_test.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ import (
2525
"github.com/stretchr/testify/require"
2626
)
2727

28-
var noop Storable
28+
var noopValue Value
29+
var noopStorable Storable
2930

3031
func BenchmarkArrayGet100x(b *testing.B) {
3132
benchmarks := []struct {
@@ -223,18 +224,18 @@ func benchmarkArrayGet(b *testing.B, initialArraySize, numberOfOps int) {
223224

224225
array := setupArray(b, r, storage, initialArraySize)
225226

226-
var storable Storable
227+
var value Value
227228

228229
b.StartTimer()
229230

230231
for i := 0; i < b.N; i++ {
231232
for i := 0; i < numberOfOps; i++ {
232233
index := r.Intn(int(array.Count()))
233-
storable, _ = array.Get(uint64(index))
234+
value, _ = array.Get(uint64(index))
234235
}
235236
}
236237

237-
noop = storable
238+
noopValue = value
238239
}
239240

240241
func benchmarkArrayInsert(b *testing.B, initialArraySize, numberOfOps int) {
@@ -307,7 +308,7 @@ func benchmarkArrayRemoveAll(b *testing.B, initialArraySize int) {
307308
}
308309
}
309310

310-
noop = storable
311+
noopStorable = storable
311312
}
312313

313314
func benchmarkArrayPopIterate(b *testing.B, initialArraySize int) {
@@ -336,7 +337,7 @@ func benchmarkArrayPopIterate(b *testing.B, initialArraySize int) {
336337
}
337338
}
338339

339-
noop = storable
340+
noopStorable = storable
340341
}
341342

342343
func benchmarkNewArrayFromAppend(b *testing.B, initialArraySize int) {

array_test.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,7 @@ func verifyArray(
5757

5858
// Verify array elements
5959
for i, v := range values {
60-
s, err := array.Get(uint64(i))
61-
require.NoError(t, err)
62-
63-
e, err := s.StoredValue(array.Storage)
60+
e, err := array.Get(uint64(i))
6461
require.NoError(t, err)
6562

6663
valueEqual(t, typeInfoComparator, v, e)
@@ -153,8 +150,8 @@ func TestArrayAppendAndGet(t *testing.T) {
153150
require.NoError(t, err)
154151
}
155152

156-
storable, err := array.Get(array.Count())
157-
require.Nil(t, storable)
153+
e, err := array.Get(array.Count())
154+
require.Nil(t, e)
158155
require.Equal(t, 1, errorCategorizationCount(err))
159156

160157
var userError *UserError

cmd/stress/array.go

+1-5
Original file line numberDiff line numberDiff line change
@@ -417,14 +417,10 @@ func checkArrayDataLoss(array *atree.Array, values []atree.Value) error {
417417

418418
// Check every element
419419
for i, v := range values {
420-
storable, err := array.Get(uint64(i))
420+
convertedValue, err := array.Get(uint64(i))
421421
if err != nil {
422422
return fmt.Errorf("failed to get element at %d: %w", i, err)
423423
}
424-
convertedValue, err := storable.StoredValue(array.Storage)
425-
if err != nil {
426-
return fmt.Errorf("failed to convert storable to value at %d: %w", i, err)
427-
}
428424
err = valueEqual(v, convertedValue)
429425
if err != nil {
430426
return fmt.Errorf("failed to compare %s and %s: %w", v, convertedValue, err)

0 commit comments

Comments
 (0)