typeMoveList *MyPositionalGain(typePos *Position, typeMoveList *List, int av) { uint64 empty = ~Position->OccupiedBW, U, T; int to, sq; typeMoveList *sm, *p, *q; int move; sm = List; for (U = ForwardShift(BitboardMyP & SecondSixthRanks) & empty; U; BitClear(sq, U)) { to = BSF(U); if (OnThirdRank(to) && Position->sq[Forward(to)] == 0) AddGain(List, (Backward(to) << 6) | Forward(to), EnumMyP, Forward(to)); AddGain(List, (Backward(to) << 6) | to, EnumMyP, to); } for (U = BitboardMyN; U; BitClear(sq, U)) { sq = BSF(U); T = AttN[sq] & empty; AddGainTo(T, EnumMyN); } for (U = BitboardMyBL; U; BitClear(sq, U)) { sq = BSF(U); T = AttB(sq) & empty; AddGainTo(T, EnumMyBL); } for (U = BitboardMyBD; U; BitClear(sq, U)) { sq = BSF(U); T = AttB(sq) & empty; AddGainTo(T, EnumMyBD); } for (U = BitboardMyR; U; BitClear(sq, U)) { sq = BSF(U); T = AttR(sq) & empty; AddGainTo(T, EnumMyR); } for (U = BitboardMyQ; U; BitClear(sq, U)) { sq = BSF(U); T = AttQ(sq) & empty; AddGainTo(T, EnumMyQ); } sq = MyKingSq; T = AttK[sq] & empty &(~OppAttacked); AddGainTo(T, EnumMyK); List->move = 0; Sort; return List; }
/* remap the supplied data into out, which must be pre-allocated */ void CPCMRemap::Remap(void *data, void *out, unsigned int samples, float gain /*= 1.0f*/) { CheckBufferSize(samples * m_outChannels * sizeof(float)); //set output buffer to 0 memset(out, 0, samples * m_outChannels * m_inSampleSize); //set intermediate buffer to 0 memset(m_buf, 0, m_bufsize); ProcessInput(data, out, samples, gain); AddGain(m_buf, samples * m_outChannels, gain); ProcessLimiter(samples, gain); ProcessOutput(out, samples, gain); }