SYMBOL INDEX (191 symbols across 10 files) FILE: grid.go type Grid (line 12) | type Grid struct function NewGrid (line 22) | func NewGrid(width, height int16) *Grid[string] { function NewGridOf (line 28) | func NewGridOf[T comparable](width, height int16) *Grid[T] { method Each (line 57) | func (m *Grid[T]) Each(fn func(Point, Tile[T])) { method Within (line 66) | func (m *Grid[T]) Within(nw, se Point, fn func(Point, Tile[T])) { method pagesWithin (line 78) | func (m *Grid[T]) pagesWithin(nw, se Point, fn func(*page[T])) { method At (line 91) | func (m *Grid[T]) At(x, y int16) (Tile[T], bool) { method WriteAt (line 100) | func (m *Grid[T]) WriteAt(x, y int16, tile Value) { method MaskAt (line 108) | func (m *Grid[T]) MaskAt(x, y int16, tile, mask Value) { method MergeAt (line 115) | func (m *Grid[T]) MergeAt(x, y int16, merge func(Value) Value) { method Neighbors (line 122) | func (m *Grid[T]) Neighbors(x, y int16, fn func(Point, Tile[T])) { method pageAt (line 154) | func (m *Grid[T]) pageAt(x, y int16) *page[T] { type page (line 174) | type page struct method tileAt (line 183) | func (p *page[T]) tileAt(idx uint8) Value { method IsObserved (line 188) | func (p *page[T]) IsObserved() bool { method Bounds (line 193) | func (p *page[T]) Bounds() Rect { method At (line 198) | func (p *page[T]) At(grid *Grid[T], x, y int16) Tile[T] { method Each (line 203) | func (p *page[T]) Each(grid *Grid[T], fn func(Point, Tile[T])) { method SetObserved (line 217) | func (p *page[T]) SetObserved(observed bool) { method Lock (line 236) | func (p *page[T]) Lock() { method Unlock (line 242) | func (p *page[T]) Unlock() { method writeTile (line 249) | func (p *page[T]) writeTile(grid *Grid[T], idx uint8, after Value) { method mergeTile (line 272) | func (p *page[T]) mergeTile(grid *Grid[T], idx uint8, fn func(Value) Val... method addObject (line 302) | func (p *page[T]) addObject(idx uint8, object T) (value uint32) { method delObject (line 318) | func (p *page[T]) delObject(idx uint8, object T) (value uint32) { type Tile (line 331) | type Tile struct method Count (line 338) | func (t Tile[T]) Count() (count int) { method Point (line 350) | func (t Tile[T]) Point() Point { method Value (line 355) | func (t Tile[T]) Value() Value { method Range (line 360) | func (t Tile[T]) Range(fn func(T) error) error { method IsObserved (line 374) | func (t Tile[T]) IsObserved() bool { method Observers (line 379) | func (t Tile[T]) Observers(fn func(view Observer[T])) { method Add (line 392) | func (t Tile[T]) Add(v T) { method Del (line 413) | func (t Tile[T]) Del(v T) { method Move (line 434) | func (t Tile[T]) Move(v T, dst Point) bool { method Write (line 476) | func (t Tile[T]) Write(tile Value) { method Merge (line 481) | func (t Tile[T]) Merge(merge func(Value) Value) Value { method Mask (line 487) | func (t Tile[T]) Mask(tile, mask Value) Value { function pointOf (line 494) | func pointOf(page Point, idx uint8) Point { FILE: grid_test.go function BenchmarkGrid (line 26) | func BenchmarkGrid(b *testing.B) { function BenchmarkState (line 108) | func BenchmarkState(b *testing.B) { function TestPageSize (line 146) | func TestPageSize(t *testing.T) { function TestWithin (line 152) | func TestWithin(t *testing.T) { function TestWithinCorner (line 168) | func TestWithinCorner(t *testing.T) { function TestWithinXY (line 182) | func TestWithinXY(t *testing.T) { function TestWithinOneSide (line 186) | func TestWithinOneSide(t *testing.T) { function TestWithinInvalid (line 201) | func TestWithinInvalid(t *testing.T) { function TestEach (line 210) | func TestEach(t *testing.T) { function TestNeighbors (line 231) | func TestNeighbors(t *testing.T) { function TestAt (line 260) | func TestAt(t *testing.T) { function TestUpdate (line 283) | func TestUpdate(t *testing.T) { function TestState (line 309) | func TestState(t *testing.T) { function TestStateRangeErr (line 328) | func TestStateRangeErr(t *testing.T) { function TestPointOf (line 341) | func TestPointOf(t *testing.T) { function TestConcurrentMerge (line 375) | func TestConcurrentMerge(t *testing.T) { FILE: path.go type edge (line 17) | type edge struct method Around (line 23) | func (m *Grid[T]) Around(from Point, distance uint32, costOf costFn, fn ... method Path (line 69) | func (m *Grid[T]) Path(from, to Point, costOf costFn) ([]Point, int, boo... function encode (line 141) | func encode(cost uint32, dir Direction) uint32 { function decode (line 146) | func decode(value uint32) (cost uint32, dir Direction) { type pathfinder (line 154) | type pathfinder struct function acquire (line 169) | func acquire(capacity int) *pathfinder { function release (line 179) | func release(v *pathfinder) { type frontier (line 189) | type frontier struct method Reset (line 203) | func (q *frontier) Reset() { method IsEmpty (line 226) | func (q *frontier) IsEmpty() bool { method Push (line 230) | func (q *frontier) Push(value, priority uint32) { method Pop (line 239) | func (q *frontier) Pop() uint32 { function newFrontier (line 195) | func newFrontier() *frontier { FILE: path_test.go function TestPath (line 18) | func TestPath(t *testing.T) { function TestPathTiny (line 37) | func TestPathTiny(t *testing.T) { function TestDraw (line 51) | func TestDraw(t *testing.T) { function BenchmarkPath (line 66) | func BenchmarkPath(b *testing.B) { function BenchmarkAround (line 137) | func BenchmarkAround(b *testing.B) { function TestAround (line 164) | func TestAround(t *testing.T) { function TestAroundMiss (line 180) | func TestAroundMiss(t *testing.T) { function BenchmarkHeap (line 191) | func BenchmarkHeap(b *testing.B) { function rand (line 205) | func rand(i int) uint32 { function costOf (line 215) | func costOf(tile Value) uint16 { function mapFrom (line 223) | func mapFrom(name string) *Grid[string] { function plotPath (line 253) | func plotPath(m *Grid[string], path []Point) string { function pointInPath (line 280) | func pointInPath(point Point, path []Point) bool { function drawGrid (line 290) | func drawGrid(m *Grid[string], rect Rect) image.Image { FILE: point.go type Point (line 14) | type Point struct method String (line 29) | func (p Point) String() string { method Integer (line 34) | func (p Point) Integer() uint32 { method Equal (line 39) | func (p Point) Equal(other Point) bool { method Add (line 44) | func (p Point) Add(p2 Point) Point { method Subtract (line 49) | func (p Point) Subtract(p2 Point) Point { method Multiply (line 54) | func (p Point) Multiply(p2 Point) Point { method Divide (line 59) | func (p Point) Divide(p2 Point) Point { method MultiplyScalar (line 64) | func (p Point) MultiplyScalar(s int16) Point { method DivideScalar (line 69) | func (p Point) DivideScalar(s int16) Point { method Within (line 74) | func (p Point) Within(nw, se Point) bool { method WithinRect (line 79) | func (p Point) WithinRect(box Rect) bool { method WithinSize (line 85) | func (p Point) WithinSize(size Point) bool { method Move (line 90) | func (p Point) Move(direction Direction) Point { method MoveBy (line 95) | func (p Point) MoveBy(direction Direction, n int16) Point { method DistanceTo (line 119) | func (p Point) DistanceTo(other Point) uint32 { method Angle (line 124) | func (p Point) Angle(other Point) Direction { function unpackPoint (line 19) | func unpackPoint(v uint32) Point { function At (line 24) | func At(x, y int16) Point { function abs (line 139) | func abs(n int32) uint32 { type Rect (line 149) | type Rect struct method Contains (line 161) | func (a Rect) Contains(p Point) bool { method Intersects (line 166) | func (a Rect) Intersects(b Rect) bool { method Size (line 171) | func (a *Rect) Size() Point { method IsZero (line 179) | func (a Rect) IsZero() bool { method Difference (line 185) | func (a Rect) Difference(b Rect) (result [4]Rect) { method pack (line 230) | func (a Rect) pack() uint64 { function NewRect (line 156) | func NewRect(left, top, right, bottom int16) Rect { function unpackRect (line 235) | func unpackRect(v uint64) Rect { type Direction (line 245) | type Direction method String (line 260) | func (v Direction) String() string { method Vector (line 284) | func (v Direction) Vector(scale int16) Point { constant North (line 249) | North Direction = iota constant NorthEast (line 250) | NorthEast constant East (line 251) | East constant SouthEast (line 252) | SouthEast constant South (line 253) | South constant SouthWest (line 254) | SouthWest constant West (line 255) | West constant NorthWest (line 256) | NorthWest function angleOf (line 289) | func angleOf(from, to Point) Direction { function oppositeDirection (line 316) | func oppositeDirection(dir Direction) Direction { FILE: point_test.go function BenchmarkPoint (line 17) | func BenchmarkPoint(b *testing.B) { function TestPoint (line 36) | func TestPoint(t *testing.T) { function TestIntersects (line 58) | func TestIntersects(t *testing.T) { function TestDirection (line 64) | func TestDirection(t *testing.T) { function TestDirection_Empty (line 71) | func TestDirection_Empty(t *testing.T) { function TestPointAngle (line 76) | func TestPointAngle(t *testing.T) { function TestMove (line 137) | func TestMove(t *testing.T) { function TestContains (line 158) | func TestContains(t *testing.T) { function TestDiff_Right (line 176) | func TestDiff_Right(t *testing.T) { function TestDiff_Left (line 185) | func TestDiff_Left(t *testing.T) { function TestDiff_Up (line 194) | func TestDiff_Up(t *testing.T) { function TestDiff_Down (line 203) | func TestDiff_Down(t *testing.T) { FILE: store.go constant tileDataSize (line 16) | tileDataSize = int(unsafe.Sizeof([9]Value{})) method WriteTo (line 21) | func (m *Grid[T]) WriteTo(dst io.Writer) (n int64, err error) { function ReadFrom (line 47) | func ReadFrom[T comparable](src io.Reader) (grid *Grid[T], err error) { method WriteFile (line 77) | func (m *Grid[T]) WriteFile(filename string) error { function ReadFile (line 97) | func ReadFile[T comparable](filename string) (grid *Grid[T], err error) { FILE: store_test.go function BenchmarkStore (line 20) | func BenchmarkStore(b *testing.B) { function TestSaveLoad (line 47) | func TestSaveLoad(t *testing.T) { function TestSaveLoadFlate (line 62) | func TestSaveLoadFlate(t *testing.T) { function TestSaveLoadFile (line 83) | func TestSaveLoadFile(t *testing.T) { FILE: view.go type Observer (line 12) | type Observer interface type ValueAt (line 19) | type ValueAt struct type Update (line 25) | type Update struct type View (line 36) | type View struct function NewView (line 45) | func NewView[S any, T comparable](m *Grid[T], state S) *View[S, T] { method Viewport (line 56) | func (v *View[S, T]) Viewport() Rect { method Resize (line 61) | func (v *View[S, T]) Resize(view Rect, fn func(Point, Tile[T])) { method MoveTo (line 100) | func (v *View[S, T]) MoveTo(angle Direction, distance int16, fn func(Poi... method MoveBy (line 110) | func (v *View[S, T]) MoveBy(x, y int16, fn func(Point, Tile[T])) { method MoveAt (line 119) | func (v *View[S, T]) MoveAt(nw Point, fn func(Point, Tile[T])) { method Each (line 129) | func (v *View[S, T]) Each(fn func(Point, Tile[T])) { method At (line 135) | func (v *View[S, T]) At(x, y int16) (Tile[T], bool) { method WriteAt (line 140) | func (v *View[S, T]) WriteAt(x, y int16, tile Value) { method MergeAt (line 146) | func (v *View[S, T]) MergeAt(x, y int16, tile, mask Value) { method Close (line 151) | func (v *View[S, T]) Close() error { method onUpdate (line 162) | func (v *View[S, T]) onUpdate(ev *Update[T]) { type pubsub (line 169) | type pubsub struct method Subscribe (line 175) | func (p *pubsub[T]) Subscribe(page Point, sub Observer[T]) bool { method Unsubscribe (line 186) | func (p *pubsub[T]) Unsubscribe(page Point, sub Observer[T]) bool { method Notify1 (line 194) | func (p *pubsub[T]) Notify1(ev *Update[T], page Point) { method Notify2 (line 204) | func (p *pubsub[T]) Notify2(ev *Update[T], pages [2]Point) { method Each1 (line 214) | func (p *pubsub[T]) Each1(fn func(sub Observer[T]), page Point) { method Each2 (line 223) | func (p *pubsub[T]) Each2(fn func(sub Observer[T]), pages [2]Point) { type observers (line 247) | type observers struct function newObservers (line 253) | func newObservers[T comparable]() *observers[T] { method Each (line 260) | func (s *observers[T]) Each(fn func(sub Observer[T])) { method Subscribe (line 273) | func (s *observers[T]) Subscribe(sub Observer[T]) bool { method Unsubscribe (line 281) | func (s *observers[T]) Unsubscribe(sub Observer[T]) bool { FILE: view_test.go function BenchmarkView (line 18) | func BenchmarkView(b *testing.B) { function TestView (line 50) | func TestView(t *testing.T) { function TestUpdates_Simple (line 102) | func TestUpdates_Simple(t *testing.T) { function TestMove_Within (line 181) | func TestMove_Within(t *testing.T) { function TestMove_Incoming (line 203) | func TestMove_Incoming(t *testing.T) { function TestMove_Outgoing (line 224) | func TestMove_Outgoing(t *testing.T) { function TestView_MoveTo (line 245) | func TestView_MoveTo(t *testing.T) { function TestView_Updates (line 288) | func TestView_Updates(t *testing.T) { function TestSizeUpdate (line 324) | func TestSizeUpdate(t *testing.T) { function countObserversAt (line 330) | func countObserversAt(m *Grid[string], x, y int16) (count int) { function countObservers (line 338) | func countObservers(m *Grid[string]) int { type fakeView (line 348) | type fakeView method Viewport (line 350) | func (f fakeView[T]) Viewport() Rect { method Resize (line 354) | func (f fakeView[T]) Resize(r Rect, fn func(Point, Tile[T])) { method onUpdate (line 358) | func (f fakeView[T]) onUpdate(e *Update[T]) { type counter (line 362) | type counter method count (line 364) | func (c *counter) count(p Point, tile Tile[string]) {