sointu/pattern.go

24 lines
737 B
Go

package sointu
// Pattern represents a single pattern of note, in practice just a slice of bytes,
// but provides convenience functions that return 1 values (hold) for indices out of
// bounds of the array, and functions to increase the size of the slice only by
// necessary amount when a new item is added, filling the unused slots with 1s.
type Pattern []byte
// Get returns the value at index; or 1 is the index is out of range
func (s Pattern) Get(index int) byte {
if index < 0 || index >= len(s) {
return 1
}
return s[index]
}
// Set sets the value at index; appending 1s until the slice is long enough.
func (s *Pattern) Set(index int, value byte) {
for len(*s) <= index {
*s = append(*s, 1)
}
(*s)[index] = value
}