pieceMask.h
Go to the documentation of this file.
1 #ifndef _PIECE_MASK_H
2 #define _PIECE_MASK_H
3 #include "osl/config.h"
4 #include "osl/bits/ptypeTraits.h"
5 static_assert(OSL_WORDSIZE == 64, "word size");
6 #include "osl/bits/pieceMask64.h"
7 
8 #include <iosfwd>
9 
10 namespace osl
11 {
13 
20  class PieceMask : public PieceMaskBase
21  {
22  public:
23  PieceMask() {}
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:
PieceMask(const PieceMaskBase &base)
Definition: pieceMask.h:24
mask_t & mutableMaskNum(int num)
Definition: pieceMask.h:32
GeneralMask< mask_int_t > mask_t
Definition: mask.h:351
const misc::Mask64 & getMask(int) const
Definition: pieceMask64.h:23
const mask_t getMaskNum(int num) const
Definition: pieceMask.h:35
PieceMask64 PieceMaskBase
Definition: pieceMask.h:12
void setMask(int index, mask_t val)
Definition: pieceMask.h:28
std::ostream & operator<<(std::ostream &os, Player player)
Definition: basic_type.cc:14
void clearBit()
unpromote(PTYPE) の駒のbit を消す
Definition: pieceMask.h:74
bool test(int num) const
Definition: pieceMask.h:45
#define OSL_WORDSIZE
Definition: config.h:6
misc::Mask64 & mutableMask(int)
Definition: pieceMask64.h:21
void setBit()
unpromote(PTYPE) の駒のbit を立てる
Definition: pieceMask.h:81
駒番号のビットセット.
Definition: pieceMask.h:20
static int numToOffset(int num)
Definition: pieceMask64.h:17
void orMask(int index, mask_t val)
Definition: pieceMask.h:42
static const mask_t numToMask(int num)
Definition: pieceMask.h:25
const PieceMask operator|(const PieceMask &m1, const PieceMask &m2)
Definition: pieceMask.h:91
static int numToIndex(int)
Definition: pieceMask64.h:16
const mask_t getMask() const
unpromote(PTYPE) の駒のbit を*含む*mask_tを取り出す
Definition: pieceMask.h:62
void reset(int num)
Definition: pieceMask.h:54
const mask_t getMask(int num) const
Definition: pieceMask.h:59
bool any() const
Definition: pieceMask.h:57
bool operator==(Square l, Square r)
Definition: basic_type.h:758
const PieceMask operator~(const PieceMask &m1)
Definition: pieceMask.h:94
void xorMask(int index, mask_t val)
Definition: pieceMask.h:39
const mask_t selectBit() const
unpromote(PTYPE) の駒のbit だけ取り出す
Definition: pieceMask.h:66
bool operator!=(Offset l, Offset r)
Definition: basic_type.h:516
void flip(int num)
Definition: pieceMask.h:51
const PieceMask operator &(const PieceMask &m1, const PieceMask &m2)
Definition: pieceMask.h:88