@@ -17,52 +17,45 @@ import (
1717 "github.com/consensys/go-corset/pkg/zkc/vm/word"
1818)
1919
20- // Array is a flat-slice implementation of ReadOnlyMemory backed by a []W.
21- // Reads are performed by delegating address decoding to a D (an AddressDecoder)
22- // which translates the incoming multi-word address tuple into a (start, end)
23- // index range, and then returning the corresponding sub-slice of the backing
24- // data.
20+ // StaticArray is a memory implementation backed by a fixed-size []W, meaning
21+ // that an out-of-bound read will panic. Reads are performed by delegating
22+ // address decoding to a D (an AddressDecoder) which translates the incoming
23+ // multi-word address tuple into a (start, end) index range, and then returning
24+ // the corresponding sub-slice of the backing data.
2525//
2626// The type parameter W is the word type (e.g. a field element or big.Int), and
2727// D is the AddressDecoder strategy that encodes the layout of rows within the
2828// flat slice.
29- type Array [W word.Word [W ]] struct {
29+ type StaticArray [W word.Word [W ]] struct {
3030 geometry Geometry [W ]
3131 name string
3232 data []W
3333}
3434
35- // newArray constructs a new array initialised with a given set of values.
36- func newArray [W word.Word [W ]](name string , registers []register.Register , init ... W ) Array [W ] {
35+ // newStaticArray constructs a new array initialised with a given set of values.
36+ func newStaticArray [W word.Word [W ]](name string , registers []register.Register , init ... W ) StaticArray [W ] {
3737 var geometry = NewGeometry [W ](registers )
3838 //
39- return Array [W ]{geometry , name , init }
39+ return StaticArray [W ]{geometry , name , init }
4040}
4141
4242// Name implementation for Memory interface.
43- func (p * Array [W ]) Name () string {
43+ func (p * StaticArray [W ]) Name () string {
4444 return p .name
4545}
4646
4747// Initialise implementation for Memory interface.
48- func (p * Array [W ]) Initialise (contents []W ) {
48+ func (p * StaticArray [W ]) Initialise (contents []W ) {
4949 p .data = contents
5050}
5151
5252// Geometry implementation for Memory interface.
53- func (p * Array [W ]) Geometry () Geometry [W ] {
53+ func (p * StaticArray [W ]) Geometry () Geometry [W ] {
5454 return p .geometry
5555}
5656
5757// Read implementation for Memory interface.
58- func (p * Array [W ]) Read (address []W ) []W {
59- var start , end = p .geometry .Decode (address )
60- //
61- return p .data [start :end ]
62- }
63-
64- // FrameRead implementation for Memory interface.
65- func (p * Array [W ]) FrameRead (frame []W , address []register.Id , data []register.Id ) error {
58+ func (p * StaticArray [W ]) Read (frame []W , address []register.Id , data []register.Id ) error {
6659 var start , _ = p .geometry .FrameDecode (frame , address )
6760 //
6861 for i := range data {
@@ -72,8 +65,8 @@ func (p *Array[W]) FrameRead(frame []W, address []register.Id, data []register.I
7265 return nil
7366}
7467
75- // FrameWrite implementation for Memory interface.
76- func (p * Array [W ]) FrameWrite (frame []W , address []register.Id , data []register.Id ) error {
68+ // Write implementation for Memory interface.
69+ func (p * StaticArray [W ]) Write (frame []W , address []register.Id , data []register.Id ) error {
7770 var (
7871 n = uint64 (len (p .data ))
7972 start , end = p .geometry .FrameDecode (frame , address )
@@ -92,23 +85,7 @@ func (p *Array[W]) FrameWrite(frame []W, address []register.Id, data []register.
9285 return nil
9386}
9487
95- // Write implementation for Memory interface.
96- func (p * Array [W ]) Write (address []W , data []W ) {
97- var (
98- n = uint64 (len (p .data ))
99- start , end = p .geometry .Decode (address )
100- )
101- // expand memory if needed
102- if n <= end {
103- ndata := make ([]W , end )
104- copy (ndata , p .data )
105- p .data = ndata
106- }
107- //
108- copy (p .data [start :end ], data )
109- }
110-
11188// Contents implementation for Memory interface.
112- func (p * Array [W ]) Contents () []W {
89+ func (p * StaticArray [W ]) Contents () []W {
11390 return p .data
11491}
0 commit comments