Files

78 lines
1.7 KiB
Go

package field
import "slices"
type Notes struct {
numbers []int
}
func (n *Notes) Add(f *Field, cell *Cell, note int, trigger string, marks []Mark) error {
if n == nil || cell == nil || cell.notes != n {
return ErrInvalidCell
}
return f.AddChange(&ExternalChange{Cell: cell, Marks: marks, Action: ActionSetNote, Value: note, TriggerdBy: trigger})
}
func (n *Notes) Remove(f *Field, cell *Cell, note int, trigger string, marks []Mark) error {
if n == nil || cell == nil || cell.notes != n {
return ErrInvalidCell
}
return f.AddChange(&ExternalChange{Cell: cell, Marks: marks, Action: ActionRemoveNote, From: note, TriggerdBy: trigger})
}
func (n *Notes) Get() []int {
if n == nil {
return nil
}
return slices.Clone(n.numbers)
}
func (n *Notes) Has(number int) bool {
return n != nil && slices.Contains(n.numbers, number)
}
type Cell struct {
number int
notes *Notes
pos *Position
}
func NewCell(number int, pos *Position) *Cell {
return &Cell{number: number, notes: &Notes{}, pos: pos}
}
func (c *Cell) SetNumber(f *Field, number int, trigger string, marks []Mark) error {
if c == nil {
return ErrInvalidCell
}
return f.AddChange(&ExternalChange{Cell: c, Marks: marks, Action: ActionSetNumber, Value: number, From: c.number, TriggerdBy: trigger})
}
func (c *Cell) RemoveNumber(f *Field, trigger string, marks []Mark) error {
if c == nil {
return ErrInvalidCell
}
return f.AddChange(&ExternalChange{Cell: c, Marks: marks, Action: ActionRemoveNumber, From: c.number, TriggerdBy: trigger})
}
func (c *Cell) GetNumber() int {
if c == nil {
return 0
}
return c.number
}
func (c *Cell) GetNotes() *Notes {
if c == nil {
return nil
}
return c.notes
}
func (c *Cell) GetPosition() *Position {
if c == nil {
return nil
}
return c.pos
}