diff --git a/common/ptr/scalar.go b/common/ptr/scalar.go index b444764..4171dcd 100644 --- a/common/ptr/scalar.go +++ b/common/ptr/scalar.go @@ -1,67 +1,5 @@ package ptr -// scb: scalar base / common stuff - -type scb[V any] struct { - started bool -} - -func (p *scb[V]) Size() int { - return 1 -} - -func (p *scb[V]) Started() bool { - return p.started -} - -func (p *scb[V]) Append(v V) Ptr[V] { - p.started = true - return p.Set(v) -} - -func (p *scb[V]) Insert(v V, pos int) Ptr[V] { - return p.Append(v) -} - -func (p *scb[V]) Next() Ptr[V] { - if p.started { - return nil - } - p.started = true - return p -} - -func (p *scb[V]) Value() V { - var v V - return v -} - -func (p *scb[V]) Set(v V) Ptr[V] { - return p -} - -func (p *scb[V]) Seek(i int) Ptr[V] { - p.started = true - return p -} - -func (p *scb[V]) Reset() Ptr[V] { - p.started = false - return p -} - -func (p *scb[V]) Clone() Ptr[V] { - return &scb[V]{p.started} -} - -func (p *scb[V]) New() Ptr[V] { - return New[V](p) -} - -func (p *scb[V]) Copy() Ptr[V] { - return Copy[V](p, &scb[V]{false}) -} - // scalar implementation using a value pointer func NewScalar[V any]() Ptr[V] { @@ -82,16 +20,16 @@ func NewVP[V any](vp *V) Ptr[V] { // scalar implementation using accessor functions type acc[V any] struct { - *scb[V] - getter func() V - setter func(v V) + started bool + getter func() V + setter func(v V) } func NewAcc[V any](g func() V, s func(v V)) *acc[V] { return &acc[V]{ - getter: g, - setter: s, - scb: &scb[V]{false}, + started: false, + getter: g, + setter: s, } } @@ -104,6 +42,14 @@ func (p *acc[V]) Insert(v V, pos int) Ptr[V] { return p.Append(v) } +func (p *acc[V]) Next() Ptr[V] { + if p.started { + return nil + } + p.started = true + return p +} + func (p *acc[V]) Value() V { return p.getter() } @@ -113,11 +59,29 @@ func (p *acc[V]) Set(v V) Ptr[V] { return p } +func (p *acc[V]) Size() int { + return 1 +} + +func (p *acc[V]) Started() bool { + return p.started +} + +func (p *acc[V]) Seek(i int) Ptr[V] { + p.started = true + return p +} + +func (p *acc[V]) Reset() Ptr[V] { + p.started = false + return p +} + func (p *acc[V]) Clone() Ptr[V] { return &acc[V]{ - getter: p.getter, - setter: p.setter, - scb: &scb[V]{p.started}, + started: p.started, + getter: p.getter, + setter: p.setter, } } diff --git a/tests/common_test.go b/tests/common_test.go index f0182a2..4eb531c 100644 --- a/tests/common_test.go +++ b/tests/common_test.go @@ -63,6 +63,9 @@ func PtrValuePointerTest(t *testing.T) { sp3.Set(46) t.AssertEqual(sp3.Value(), 46) t.AssertEqual(sp1.Value(), 46) + sp4 := sp1.Reset() + sp4.Append(33) + t.AssertEqual(sp4.Value(), 33) } func PtrScalarTest(t *testing.T) {