2
0
Эх сурвалжийг харах

allow comparison between BitMask and integer

rdb 13 жил өмнө
parent
commit
d9ef0f11ae

+ 59 - 0
panda/src/putil/bitMask.I

@@ -690,6 +690,65 @@ compare_to(const BitMask<WType, nbits> &other) const {
   }
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: BitMask::operator ==
+//       Access: Published
+//  Description:
+////////////////////////////////////////////////////////////////////
+template<class WType, int nbits>
+INLINE bool BitMask<WType, nbits>::
+operator == (WordType other) const {
+  return _word == other;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: BitMask::operator !=
+//       Access: Published
+//  Description:
+////////////////////////////////////////////////////////////////////
+template<class WType, int nbits>
+INLINE bool BitMask<WType, nbits>::
+operator != (WordType other) const {
+  return _word != other;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: BitMask::operator <
+//       Access: Published
+//  Description: The ordering operator is of limited usefulness with a
+//               BitMask, however, it has a definition which places
+//               all unique BitMasks into a unique ordering.  It may
+//               be useful when defining ordered STL containers of
+//               BitMasks, for instance; and it's required in order to
+//               export any STL container (ordered or unordered) of
+//               BitMask under Windows.
+////////////////////////////////////////////////////////////////////
+template<class WType, int nbits>
+INLINE bool BitMask<WType, nbits>::
+operator < (WordType other) const {
+  return _word < other;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: BitMask::compare_to
+//       Access: Published
+//  Description: Returns a number less than zero if this BitMask sorts
+//               before the indicated other BitMask, greater than zero
+//               if it sorts after, or 0 if they are equivalent.  This
+//               is based on the same ordering defined by operator <.
+////////////////////////////////////////////////////////////////////
+template<class WType, int nbits>
+INLINE int BitMask<WType, nbits>::
+compare_to(WordType other) const {
+  if ((*this) < other) {
+    return -1;
+  } else if (other < (*this)) {
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
 ////////////////////////////////////////////////////////////////////
 //     Function: BitMask::operator &
 //       Access: Published

+ 5 - 0
panda/src/putil/bitMask.h

@@ -94,6 +94,11 @@ PUBLISHED:
   INLINE bool operator < (const BitMask<WType, nbits> &other) const;
   INLINE int compare_to(const BitMask<WType, nbits> &other) const;
 
+  INLINE bool operator == (WordType other) const;
+  INLINE bool operator != (WordType other) const;
+  INLINE bool operator < (WordType other) const;
+  INLINE int compare_to(WordType other) const;
+
   INLINE BitMask<WType, nbits>
   operator & (const BitMask<WType, nbits> &other) const;