mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-08 02:31:19 +00:00
5735379963
* employ a val reader to prevent constant copies * clean it up and fix tests * gaz * radek's review --------- Co-authored-by: Radosław Kapka <rkapka@wp.pl>
60 lines
1.8 KiB
Go
60 lines
1.8 KiB
Go
package stateutil
|
|
|
|
import (
|
|
multi_value_slice "github.com/prysmaticlabs/prysm/v5/container/multi-value-slice"
|
|
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
|
)
|
|
|
|
// ValReader specifies an interface through which we can access the validator registry.
|
|
type ValReader interface {
|
|
Len() int
|
|
At(i int) (*ethpb.Validator, error)
|
|
}
|
|
|
|
// ValSliceReader describes a struct that conforms to the ValReader interface
|
|
type ValSliceReader struct {
|
|
Validators []*ethpb.Validator
|
|
}
|
|
|
|
// NewValSliceReader constructs a ValSliceReader object.
|
|
func NewValSliceReader(vals []*ethpb.Validator) ValSliceReader {
|
|
return ValSliceReader{Validators: vals}
|
|
}
|
|
|
|
// Len is the length of the validator registry.
|
|
func (v ValSliceReader) Len() int {
|
|
return len(v.Validators)
|
|
}
|
|
|
|
// At returns the validator at the provided index.
|
|
func (v ValSliceReader) At(i int) (*ethpb.Validator, error) {
|
|
return v.Validators[i], nil
|
|
}
|
|
|
|
// ValMultiValueSliceReader describes a struct that conforms to the ValReader interface.
|
|
// This struct is specifically designed for accessing validator data from a
|
|
// multivalue slice.
|
|
type ValMultiValueSliceReader struct {
|
|
ValMVSlice *multi_value_slice.Slice[*ethpb.Validator]
|
|
Identifier multi_value_slice.Identifiable
|
|
}
|
|
|
|
// NewValMultiValueSliceReader constructs a new val reader object.
|
|
func NewValMultiValueSliceReader(valSlice *multi_value_slice.Slice[*ethpb.Validator],
|
|
identifier multi_value_slice.Identifiable) ValMultiValueSliceReader {
|
|
return ValMultiValueSliceReader{
|
|
ValMVSlice: valSlice,
|
|
Identifier: identifier,
|
|
}
|
|
}
|
|
|
|
// Len is the length of the validator registry.
|
|
func (v ValMultiValueSliceReader) Len() int {
|
|
return v.ValMVSlice.Len(v.Identifier)
|
|
}
|
|
|
|
// At returns the validator at the provided index.
|
|
func (v ValMultiValueSliceReader) At(i int) (*ethpb.Validator, error) {
|
|
return v.ValMVSlice.At(v.Identifier, uint64(i))
|
|
}
|