Simplified instruction pointer delta handling

This commit is contained in:
Julien Dessaux 2021-09-21 15:41:52 +02:00
parent 11dac6494d
commit 270a3845cd
4 changed files with 12 additions and 19 deletions

View file

@ -1,10 +0,0 @@
package pointer
type Delta struct {
x int
y int
}
func NewDelta(x, y int) *Delta {
return &Delta{x: x, y: y}
}

View file

@ -3,16 +3,19 @@ package pointer
import "git.adyxax.org/adyxax/gofunge/pkg/field" import "git.adyxax.org/adyxax/gofunge/pkg/field"
type Pointer struct { type Pointer struct {
x int // the position
y int x int
delta *Delta y int
// The delta
dx int
dy int
// The Storage offset // The Storage offset
sox int sox int
soy int soy int
} }
func NewPointer() *Pointer { func NewPointer() *Pointer {
return &Pointer{delta: NewDelta(1, 0)} return &Pointer{dx: 1}
} }
func (p Pointer) Split() *Pointer { func (p Pointer) Split() *Pointer {
@ -20,5 +23,5 @@ func (p Pointer) Split() *Pointer {
} }
func (p *Pointer) Step(f field.Field) { func (p *Pointer) Step(f field.Field) {
p.x, p.y = f.Step(p.x, p.y, p.delta.x, p.delta.y) p.x, p.y = f.Step(p.x, p.y, p.dx, p.dy)
} }

View file

@ -9,7 +9,7 @@ import (
) )
func TestNewPointer(t *testing.T) { func TestNewPointer(t *testing.T) {
require.Equal(t, NewPointer(), &Pointer{delta: &Delta{1, 0}}) require.Equal(t, NewPointer(), &Pointer{dx: 1})
} }
func TestSplit(t *testing.T) { func TestSplit(t *testing.T) {
@ -23,8 +23,8 @@ func TestSplit(t *testing.T) {
// We check that p2 is a real copy // We check that p2 is a real copy
p.Step(*f) p.Step(*f)
p2.Step(*f) p2.Step(*f)
require.Equal(t, p, &Pointer{x: 1, y: 0, delta: &Delta{1, 0}}) require.Equal(t, p, &Pointer{x: 1, y: 0, dx: 1})
require.Equal(t, p2, &Pointer{x: 1, y: 0, delta: &Delta{1, 0}}) require.Equal(t, p2, &Pointer{x: 1, y: 0, dx: 1})
} }
func TestStep(t *testing.T) { // Step is thoroughly tested in the field package func TestStep(t *testing.T) { // Step is thoroughly tested in the field package

View file

@ -5,7 +5,7 @@ func (p Pointer) GetStorageOffset() (x, y int) {
} }
func (p *Pointer) CalculateNewStorageOffset() { func (p *Pointer) CalculateNewStorageOffset() {
p.sox, p.soy = p.x+p.delta.x, p.y+p.delta.y p.sox, p.soy = p.x+p.dx, p.y+p.dy
} }
func (p *Pointer) SetStorageOffset(x, y int) { func (p *Pointer) SetStorageOffset(x, y int) {