Author: Russell Reagan
Date: 09:29:11 11/24/03
Go up one level in this thread
On November 24, 2003 at 06:01:30, Reinhard Scharnagl wrote:
>Hello,
>
>I want to use the same source file (using different macros)
>twice to compile a move generator for the black and white
>side. How could this be done CPP _conform_?
>
>This attempt is for to avoid double (redundant) source code
>and its change management synchronizing.
>
>I hope that there are some experts with matching experiences
>on that.
>
>Regards, Reinhard.
I'm not sure if this is what you are trying to accomplish, but this is an
example that someone posted to another message board recently.
enum Color{White,Black};
template <Color c>
struct ColorTraits;
template <>
struct ColorTraits<White>{
    static const Color Enemy = Black;
    static u64 forward(u64 x){ return x<<8; }
    static u64 backwards(u64 x){ return x>>8; }
    static const Piece Pawn = WhitePawn;
    static const Piece Night = WhiteNight;
    //...
};
template <>
struct ColorTraits<Black>{
    static const Color Enemy = White;
    static u64 forward(u64 x){ return x>>8; }
    static u64 back(u64 x){ return x<<8; }
    static const Piece Pawn = BlackPawn;
    static const Piece Knight = BlackKnight;
    //...
};
template <Color c>
u64 passed_pawns(){
    u64 obstacles = bitboard[ColorTraits<ColorTraits<c>::Enemy>::Pawn];
    obstacles = ColorTraits<c>::back(obstacles);
    obstacles |= Left(obstacles) | Right(obstacles); // Left and Right have
obvious definitions
    obstacles |= ColorTraits<c>::back(obstacles);
    obstacles |= ColorTraits<c>::back( ColorTraits<c>::back(obstacles) );
    obstacles |= ColorTraits<c>::back( ColorTraits<c>::back(
ColorTraits<c>::back( ColorTraits<c>::back(obstacles) ) ) );
    return bitboard[ColorTraits<c>::Pawn] & ~obstacles;
}
Then you can call passed_pawns<Black>() or passed_pawns<White>() and you only
have to write one function.
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.