Author: Daniel Clausen
Date: 11:56:11 12/25/03
Go up one level in this thread
On December 25, 2003 at 02:33:00, Russell Reagan wrote:
>This is a question mainly directed at chess programmers. Why do some of you
>store a chess move as a structure, and others of you store it as a packed int?
>Crafty stores them as a packed int, while many others use a struct.
>
>An example of the packed int approach is:
>
>typedef int Move;
>Move m = from_square | (to_square << 6) | (move_flags << 12);
>
>Pros: Handling of a move as a whole entity is fast (i.e. copying, sorting, etc.)
>Cons: Accessing fields of a move and packing the move requires some overhead
>
>An example of the struct approach is:
>
>struct Move
>{
> int from;
> int to;
> unsigned flags;
>};
>
>Move m;
>m.from = from_square;
>m.to = to_square;
>m.flags = move_flags;
>
>Pros: Accessing fields and initializing the move requires less overhead
>Cons: Moving these things around will be less efficient (copying, etc.)
>
>Are there any endianess issues with using the packed int approach?
There shouldn't be any endianess problems as long as you don't do some tricks
with unions.
I capsulate the accessing of move data in a way so I can switch between an
int-based and struct-based representation whenever I want. (same with the
movelist, which can either be a C-array or an STL list-container. I like having
this flexibility.
Sargon
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.