/*========== general utility functions ==========*/
+static UnkMap unkfeatbit(int featix) { return (UnkMap)1 << featix; }
+static UnkMap unkallfeatbits(int nfeats) { return ~(~(UnkMap)0 << nfeats); }
+
const char *movpos_pname(const Segment *move, MovPosComb poscomb) {
return !SOMEP(poscomb) ? "?" : move->i->poscombs[poscomb].pname;
}
ouposn_feat(indep->move, mo->i, mo->posn, m);
indep->actualpos=
movposcomb_update_feature(indep->actualpos, mo->i, mo->posn);
- indep->actualunk &= (~(UnkMap)1 << featix);
+ indep->actualunk &= ~unkfeatbit(featix);
ouposn_moving(indep);
}
MovPosComb target) {
int r;
- r= (startpointunk & ((UnkMap)1 << featix)) ||
+ r= (startpointunk & unkfeatbit(featix)) ||
(target / feati->weight) % feati->posns -
(startpointpos / feati->weight) % feati->posns;
startpointunk= 0;
} else {
startpointpos= 0;
- startpointunk= ((UnkMap)1 << move->i->n_movfeats) - 1;
+ startpointunk= unkallfeatbits(move->i->n_movfeats);
}
DPRINTF2(" actual <-%s&%"PRunkx, movpos_pname(move,startpointpos),
startpointunk);
set args -Dmovpos+eval+intern+fsq -R -s/dev/ttyUSB0 -S+realtime.log shinkansen.speeds.record santafe.speeds.record bavarian.speeds.record homes.record
+break method_update_feature if indep->move == &segments[4]
+
#break point_move if mfi->boob[posn]==3
#break movpos_reportall