package vm import "fmt" type Memory struct { entries []uint64 } func NewMemory(size uint64) *Memory { return &Memory{ entries: make([]uint64, size), } } func (mem *Memory) ReadUnsigned(index uint64) (uint64, error) { if index >= uint64(len(mem.entries)) { return 0, fmt.Errorf("Invalid memory index: %016x", index) } return mem.entries[index], nil } func (mem *Memory) MustReadUnsigned(index uint64) uint64 { value, err := mem.ReadUnsigned(index) if err != nil { panic(err) } return value } func (mem *Memory) WriteUnsigned(index uint64, value uint64) error { if index >= uint64(len(mem.entries)) { return fmt.Errorf("Invalid memory index: %016x", index) } mem.entries[index] = value return nil }