My Project
pieceMask.h
Go to the documentation of this file.
1#ifndef _PIECE_MASK_H
2#define _PIECE_MASK_H
3#include "osl/config.h"
5static_assert(OSL_WORDSIZE == 64, "word size");
7
8#include <iosfwd>
9
10namespace osl
11{
13
20 class PieceMask : public PieceMaskBase
21 {
22 public:
24 PieceMask(const PieceMaskBase& base) : PieceMaskBase(base) {}
25 static const mask_t numToMask(int num) {
26 return mask_t::makeDirect(1) << PieceMask::numToOffset(num);
27 }
28 void setMask(int index,mask_t val) {
29 mutableMask(index)=val;
30 }
31 private:
32 mask_t& mutableMaskNum(int num) {
33 return mutableMask(numToIndex(num));
34 }
35 const mask_t getMaskNum(int num) const {
36 return getMask(numToIndex(num));
37 }
38 public:
39 void xorMask(int index,mask_t val) {
40 mutableMask(index)^=val;
41 }
42 void orMask(int index,mask_t val) {
43 mutableMask(index)|=val;
44 }
45 bool test(int num) const {
46 return (getMaskNum(num)&numToMask(num)).any();
47 }
48 void set(int num) {
49 mutableMaskNum(num)|=numToMask(num);
50 }
51 void flip(int num) {
52 mutableMaskNum(num)^=numToMask(num);
53 }
54 void reset(int num) {
55 mutableMaskNum(num)&= ~numToMask(num);
56 }
57 bool any() const { return ! none(); }
58
59 const mask_t getMask(int num) const { return PieceMaskBase::getMask(num); }
61 template <Ptype PTYPE>
62 const mask_t getMask() const { return getMask(PtypeFuns<PTYPE>::indexNum); }
63
65 template <Ptype PTYPE>
66 const mask_t selectBit() const
67 {
68 mask_t mask = getMask<PTYPE>();
69 mask &= mask_t::makeDirect(PtypeFuns<PtypeFuns<PTYPE>::basicType>::indexMask);
70 return mask;
71 }
73 template <Ptype PTYPE>
74 void clearBit()
75 {
77 mask &= ~mask_t::makeDirect(PtypeFuns<PtypeFuns<PTYPE>::basicType>::indexMask);
78 }
80 template <Ptype PTYPE>
81 void setBit()
82 {
84 mask |= mask_t::makeDirect(PtypeFuns<PtypeFuns<PTYPE>::basicType>::indexMask);
85 }
86 };
87
88 inline const PieceMask operator&(const PieceMask &m1, const PieceMask &m2) {
89 return PieceMask64(m1.getMask(0)&m2.getMask(0));
90 }
91 inline const PieceMask operator|(const PieceMask &m1, const PieceMask &m2) {
92 return PieceMask64(m1.getMask(0)|m2.getMask(0));
93 }
94 inline const PieceMask operator~(const PieceMask &m1) {
95 return PieceMask64(~m1.getMask(0));
96 }
97
98 inline bool operator==(const PieceMask &m1, const PieceMask &m2){
99 return m1.getMask(0)==m2.getMask(0) && m1.getMask(1)==m2.getMask(1);
100 }
101 inline bool operator!=(const PieceMask &m1, const PieceMask &m2)
102 {
103 return ! (m1 == m2);
104 }
105 std::ostream& operator<<(std::ostream& os,PieceMask const& pieceMask);
106} // namespace osl
107
108
109#endif /* _PIECE_MASK_H */
110// ;;; Local Variables:
111// ;;; mode:c++
112// ;;; c-basic-offset:2
113// ;;; End:
駒番号のビットセット.
Definition pieceMask.h:21
const mask_t getMask() const
unpromote(PTYPE) の駒のbit を*含む*mask_tを取り出す
Definition pieceMask.h:62
void setMask(int index, mask_t val)
Definition pieceMask.h:28
const mask_t getMask(int num) const
Definition pieceMask.h:59
void set(int num)
Definition pieceMask.h:48
void clearBit()
unpromote(PTYPE) の駒のbit を消す
Definition pieceMask.h:74
const mask_t getMaskNum(int num) const
Definition pieceMask.h:35
bool test(int num) const
Definition pieceMask.h:45
void orMask(int index, mask_t val)
Definition pieceMask.h:42
void xorMask(int index, mask_t val)
Definition pieceMask.h:39
void flip(int num)
Definition pieceMask.h:51
void setBit()
unpromote(PTYPE) の駒のbit を立てる
Definition pieceMask.h:81
mask_t & mutableMaskNum(int num)
Definition pieceMask.h:32
bool any() const
Definition pieceMask.h:57
static const mask_t numToMask(int num)
Definition pieceMask.h:25
const mask_t selectBit() const
unpromote(PTYPE) の駒のbit だけ取り出す
Definition pieceMask.h:66
PieceMask(const PieceMaskBase &base)
Definition pieceMask.h:24
void reset(int num)
Definition pieceMask.h:54
static int numToIndex(int)
Definition pieceMask64.h:16
static int numToOffset(int num)
Definition pieceMask64.h:17
misc::Mask64 & mutableMask(int)
Definition pieceMask64.h:21
const misc::Mask64 & getMask(int) const
Definition pieceMask64.h:23
#define OSL_WORDSIZE
Definition config.h:6
const PieceMask operator&(const PieceMask &m1, const PieceMask &m2)
Definition pieceMask.h:88
const PieceMask operator~(const PieceMask &m1)
Definition pieceMask.h:94
bool operator!=(Offset l, Offset r)
Definition basic_type.h:516
const PieceMask operator|(const PieceMask &m1, const PieceMask &m2)
Definition pieceMask.h:91
PieceMask64 PieceMaskBase
Definition pieceMask.h:12
std::ostream & operator<<(std::ostream &os, Player player)
Definition basic_type.cc:14
bool operator==(Square l, Square r)
Definition basic_type.h:758