github.com/gorgonia/agogo@v0.1.1/game/wq/naughty.go (about)

     1  package 围碁
     2  
     3  import (
     4  	"reflect"
     5  	"unsafe"
     6  
     7  	"github.com/gorgonia/agogo/game"
     8  )
     9  
    10  // makeBoard makes a board of NxN. Additionally, it also returna s 2D iterator
    11  func makeBoard(size int) (board []game.Colour, iterator [][]game.Colour) {
    12  	board = make([]game.Colour, size*size, size*size)
    13  	iterator = make([][]game.Colour, size)
    14  	for i := range iterator {
    15  		start := i * size
    16  		hdr := &reflect.SliceHeader{
    17  			Data: uintptr(unsafe.Pointer(&board[start])),
    18  			Len:  size,
    19  			Cap:  size,
    20  		}
    21  		iterator[i] = *(*[]game.Colour)(unsafe.Pointer(hdr))
    22  	}
    23  	return
    24  }
    25  
    26  func makeZobristTable(size int) (table []int32, iterator [][]int32) {
    27  	table = make([]int32, size*size*2, size*size*2)
    28  	iterator = make([][]int32, size*size, size*size)
    29  	rowStride := 2
    30  	for i := range iterator {
    31  		start := i * rowStride
    32  		hdr := &reflect.SliceHeader{
    33  			Data: uintptr(unsafe.Pointer(&table[start])),
    34  			Len:  rowStride,
    35  			Cap:  rowStride,
    36  		}
    37  		iterator[i] = *(*[]int32)(unsafe.Pointer(hdr))
    38  	}
    39  	return
    40  }