Documentation
¶
Index ¶
- func SortCells(cells []Cell)
- type Cell
- type ClearCellObserverEvent
- type ClearGridObserverEvent
- type GlobalObserver
- type Grid
- func (g *Grid) AddObserver(observer Observer)
- func (g *Grid) Bitmap(rect Rectangle) [][]bool
- func (g *Grid) Bounds() Rectangle
- func (g *Grid) Clear()
- func (g *Grid) ClearCell(x, y int)
- func (g *Grid) Clone() *Grid
- func (g1 *Grid) Compare(g2 *Grid) bool
- func (g *Grid) ComputeNextGrid() ([]Cell, []Cell)
- func (g *Grid) ComputeNextGridN(n int) ([]Cell, []Cell)
- func (g *Grid) Diff(other *Grid) ([]Cell, []Cell)
- func (g *Grid) Hash() uint64
- func (g *Grid) IsAlive(x, y int) bool
- func (g *Grid) Population() int
- func (g *Grid) RemoveObserver(observer Observer)
- func (g *Grid) SetCell(x, y int)
- func (g *Grid) Step(n int) ([]Cell, []Cell)
- func (g *Grid) Subgrid(rect Rectangle) *Grid
- func (g *Grid) SubgridNormalized(rect Rectangle) *Grid
- func (g *Grid) Tick() ([]Cell, []Cell)
- func (g *Grid) Translate(dx, dy int)
- type Observer
- type ObserverEvent
- type ObserverEventType
- type Rectangle
- func (r *Rectangle) Height() int
- func (r *Rectangle) Max() (int, int)
- func (r *Rectangle) Min() (int, int)
- func (r *Rectangle) Normalized() *Rectangle
- func (r *Rectangle) PointInside(x, y int) bool
- func (r *Rectangle) ToArray() [4]int
- func (r *Rectangle) ToNestedArray() [2][2]int
- func (r *Rectangle) Width() int
- type RegionObserver
- type SetCellObserverEvent
- type StepObserverEvent
- type TickObserverEvent
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Cell ¶
Cell is a coordinate of a cell in the infinite Game of Life plane.
func NewCellFromCords ¶
NewCellFromCords returns a cell with the given coordinates.
func (Cell) GetNeighbors ¶ added in v0.5.0
type ClearCellObserverEvent ¶ added in v0.3.0
type ClearCellObserverEvent struct {
// contains filtered or unexported fields
}
func (ClearCellObserverEvent) Data ¶ added in v0.3.0
func (e ClearCellObserverEvent) Data() Cell
func (ClearCellObserverEvent) Type ¶ added in v0.3.0
func (e ClearCellObserverEvent) Type() ObserverEventType
type ClearGridObserverEvent ¶ added in v0.3.0
type ClearGridObserverEvent struct{}
func (ClearGridObserverEvent) Type ¶ added in v0.3.0
func (e ClearGridObserverEvent) Type() ObserverEventType
type GlobalObserver ¶ added in v0.3.0
type GlobalObserver struct {
// contains filtered or unexported fields
}
func NewGlobalObserver ¶ added in v0.3.0
func NewGlobalObserver(updateFunc func(event ObserverEvent)) *GlobalObserver
func (*GlobalObserver) Update ¶ added in v0.3.0
func (o *GlobalObserver) Update(event ObserverEvent)
type Grid ¶
type Grid struct {
// contains filtered or unexported fields
}
Grid holds the set of live cells and provides concurrent-safe operations to evolve and query a Game of Life universe.
func NewGridFromBitmap ¶
NewGridFromBitmap creates a grid from a 2D boolean matrix positioned at rect.MinX, rect.MinY. bitmap[y][x] corresponds to the cell at (rect.MinX + x, rect.MinY + y).
func NewGridFromCells ¶
NewGridFromCells constructs a grid with the provided live cells. Usage: NewGridFromCells(Cell{X:1,Y:2}, Cell{X:3,Y:4})
func NewGridFromMap ¶
NewGridFromMap constructs a grid from a map[Cell]bool (true means alive).
func NewGridFromStrings ¶
NewGridFromStrings creates a grid from ASCII art lines at origin (0,0). Any of the characters in aliveChars will be treated as a live cell. If none are provided, defaults to one of: '*', '#', 'X', 'O', '1'.
func NewGridFromXY ¶
NewGridFromXY constructs a grid from coordinate pairs. Example: NewGridFromXY([][2]int{{1,2},{3,4}})
func (*Grid) AddObserver ¶ added in v0.3.0
func (*Grid) Bitmap ¶
Bitmap returns a dense boolean matrix covering rect where true marks a live cell. bitmap[y][x] corresponds to the cell at (rect.MinX + x, rect.MinY + y).
func (*Grid) Bounds ¶
Bounds returns the minimal inclusive rectangle that contains all live cells. If the grid is empty, it returns (0,0,0,0).
func (*Grid) ComputeNextGrid ¶
ComputeNextGrid computes the next generation and returns the cells that will be born and that will die, without mutating the current grid.
func (*Grid) ComputeNextGridN ¶
ComputeNextGridN computes the cells that would be born and die after n generations, without mutating the current grid.
func (*Grid) Diff ¶
Diff compares the current grid with another grid and returns the born and died cells.
func (*Grid) Hash ¶
Hash returns a stable 64-bit FNV-1a hash of the set of live cells. The hash is deterministic across runs and independent of map iteration order.
func (*Grid) Population ¶
Population returns the number of live cells in the grid.
func (*Grid) RemoveObserver ¶ added in v0.3.0
func (*Grid) Step ¶
Step advances the grid by n generations and returns the aggregate born and died cells.
func (*Grid) Subgrid ¶
Subgrid returns a new grid containing only the live cells within rect. Coordinates are preserved (absolute positions).
func (*Grid) SubgridNormalized ¶
SubgridNormalized returns a new grid containing only the live cells within rect, translated so that (rect.MinX, rect.MinY) becomes (0, 0).
type Observer ¶ added in v0.3.0
type Observer interface {
Update(event ObserverEvent)
}
type ObserverEvent ¶ added in v0.3.0
type ObserverEvent interface {
Type() ObserverEventType
}
type ObserverEventType ¶ added in v0.3.0
type ObserverEventType string
const ( SetCellEventType ObserverEventType = "set_cell" ClearCellEventType ObserverEventType = "clear_cell" TickEventType ObserverEventType = "tick" ClearGridEventType ObserverEventType = "clear_grid" StepEventType ObserverEventType = "step" )
type Rectangle ¶
Rectangle is an inclusive axis-aligned bounding box on the integer grid.
func NewRectangle ¶
NewRectangle constructs a rectangle (inclusive bounds).
func (*Rectangle) Normalized ¶ added in v0.9.0
func (*Rectangle) PointInside ¶ added in v0.7.0
account for inverted cords
func (*Rectangle) ToNestedArray ¶ added in v0.4.0
type RegionObserver ¶ added in v0.3.0
type RegionObserver struct {
// contains filtered or unexported fields
}
func NewRegionObserver ¶ added in v0.3.0
func NewRegionObserver(region Rectangle, updateFunc func(event ObserverEvent)) *RegionObserver
func (*RegionObserver) GetRegion ¶ added in v0.3.0
func (o *RegionObserver) GetRegion() Rectangle
func (*RegionObserver) SetRegion ¶ added in v0.3.0
func (o *RegionObserver) SetRegion(region Rectangle)
func (*RegionObserver) Update ¶ added in v0.3.0
func (o *RegionObserver) Update(event ObserverEvent)
type SetCellObserverEvent ¶ added in v0.3.0
type SetCellObserverEvent struct {
// contains filtered or unexported fields
}
func (SetCellObserverEvent) Data ¶ added in v0.3.0
func (e SetCellObserverEvent) Data() Cell
func (SetCellObserverEvent) Type ¶ added in v0.3.0
func (e SetCellObserverEvent) Type() ObserverEventType
type StepObserverEvent ¶ added in v0.3.0
type StepObserverEvent struct {
// contains filtered or unexported fields
}
func (StepObserverEvent) Data ¶ added in v0.3.0
func (e StepObserverEvent) Data() (int, []Cell, []Cell)
func (StepObserverEvent) Type ¶ added in v0.3.0
func (e StepObserverEvent) Type() ObserverEventType
type TickObserverEvent ¶ added in v0.3.0
type TickObserverEvent struct {
// contains filtered or unexported fields
}
func (TickObserverEvent) Data ¶ added in v0.3.0
func (e TickObserverEvent) Data() ([]Cell, []Cell)
func (TickObserverEvent) Type ¶ added in v0.3.0
func (e TickObserverEvent) Type() ObserverEventType