Author: Bo Persson
Date: 02:55:42 02/14/99
Go up one level in this thread
On February 14, 1999 at 01:53:23, James Long wrote:
>
>The use the following class in one of my programs.
>I'm trying to find ways to trim it down to four
>bytes, so that I can do a UNION with an int for
>quick comparisons.
>
>A quick summation of the size of the private
>variables comes up to 9 bytes. However, the actual
>size of this class is 12 bytes.
>
>Could somebody explain where the extra 3 bytes
>comes from? (Is it the enumeration, or the constructor?
>Do the functions add to the size??)
>
>Even if I removed the score field and used the high
>order bits of the source, dest, captured, and mover
>fields to represent special moves, I would still be a 7
>or so bytes.
>
>Suggestions on reducing the size of this thing
>would be greatly appreciated. As you can see, the
>overloaded operators '==' and '!=' are very
>inefficient.
>
>--
>James
>
This is my way of packing the info in 4 bytes. It uses an MSVC extension that
allows unnamed unions, but you get the general idea:
struct BaseMove
{
union
{
struct
{
unsigned m_FromSquare : 8;
unsigned m_ToSquare : 8;
unsigned m_MovedPiece : 4;
unsigned m_PromotedPiece : 4;
unsigned m_Captured : 4;
unsigned m_IsChecking : 1;
unsigned m_IsMating : 1;
unsigned m_IsEnPassantCapture : 1;
unsigned m_IsCastling : 1;
};
unsigned __int32 All;
};
};
class Move : public BaseMove
{
// Construction
public:
explicit Move()
{ };
Move(const BaseMove CopyFrom)
{ All = CopyFrom.All; }
// Helpers
bool operator == (const BaseMove CompareTo) const
{ return All == CompareTo.All; }
bool operator != (const BaseMove CompareTo) const
{ return All != CompareTo.All; }
etc...
}
Bo Persson
bop@malmo.mail.telia.com
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.