package board // ────────────────────────────────────────────────────────────────────────────── // // NOTES STRUCTURE // // ────────────────────────────────────────────────────────────────────────────── // type Notes struct { numbers []int } func (n *Notes) Add(field *Field, cell *Cell, note int, trigger string, marks []Mark) { for _, existing := range n.numbers { if existing == note { return // Note already exists } } field.changes = append(field.changes, Change{ Cell: cell, marks: marks, action: ActionSetNote, value: note, from: 0, triggerdBy: trigger, }) n.numbers = append(n.numbers, note) } func (n *Notes) Remove(field *Field, cell *Cell, note int, trigger string, marks []Mark) { for i, existing := range n.numbers { if existing == note { field.changes = append(field.changes, Change{ Cell: cell, marks: marks, action: ActionRemoveNote, value: 0, from: note, triggerdBy: trigger, }) n.numbers = append(n.numbers[:i], n.numbers[i+1:]...) return } } } // ────────────────────────────────────────────────────────────────────────────── // // CELL STRUCTURE // // ────────────────────────────────────────────────────────────────────────────── // type Cell struct { number int Notes *Notes Pos *Position } func (c *Cell) SetNumber(field *Field, n int, trigger string, marks []Mark) { if c.number == n { return } if field == nil { return } if n <= 0 || n > field.rows || n > field.columns { return } field.changes = append(field.changes, Change{ Cell: c, marks: marks, action: ActionSetNumber, value: n, from: c.number, triggerdBy: trigger, }) c.number = n } func (c *Cell) RemoveNumber(field *Field, trigger string, marks []Mark) { if c.number == 0 { return } if field == nil { return } field.changes = append(field.changes, Change{ action: ActionSetNumber, Cell: c, value: 0, from: c.number, marks: marks, triggerdBy: trigger, }) c.number = 0 }