Author: Gerd Isenberg
Date: 11:14:55 12/07/05
Go up one level in this thread
On December 07, 2005 at 00:49:53, Russell Reagan wrote: >On December 06, 2005 at 13:06:01, Zappa wrote: > >>Yes, but I have to write it twice :) That is my problem. > > >You don't have to write it twice if you use templates as generic function >generators. > > > >First establish a handful of color-specific operations. > >enum Color { white, black }; > >template <Color c> >unsigned shift_fwd (unsigned x, unsigned n) { > return x << n; >} > >template <> >unsigned shift_fwd<black> (unsigned x, unsigned n) { > return x >> n; >} > > > >Then write generic, color-blind code. > >// You write one, compiler generates two >template <Color c> >unsigned fwd_pawn_moves (unsigned x) { > return shift_fwd<c>(x, 8) & empty_squares; >} > > > >Now you have two functions, but you only wrote one. > >fwd_pawn_moves<white>(x); >fwd_pawn_moves<black>(x); > > > >You can propagate the template parameters from a higher level if you want. > >template <Color c> >int eval () { > // ... > > x = fwd_pawn_moves<c>(y); > > // ... >} > > > >For something this trivial, it may not be worth it. That's up to you, but >there's the idea he was going for. At some level you'd have to have an if-else, >switch statement, or whatever, but you'd do that anyway if you wrote two >functions, and you only have to do it once in your program and let the rest >propagate. > >if (side == white) > return eval<white>(); >else > return eval<black>(); > > > >Personally, I would just use some math and be done with it, as an extra shift >can't possibly be the bottleneck of your program. > >enum { white, black } > >unsigned shift_fwd (unsigned x) { > return (x << 8) >> (side * 16); >} Hi Russell, yep of course - we had that stuff already some time ago. Nice to remember from time to time. Yes, the shift is sufficent for pure pawn bitboards where the back ranks are cleared. shl ecx, 4 ; side * 16 shl rax, 8 shr rax, cl Cheers, Gerd
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.