Panda3D
|
A general bitmask class. More...
#include "bitMask.h"
Public Types | |
enum | { num_bits = nbits } |
typedef WType | WordType |
Public Member Functions | |
BitMask (WordType init_value) | |
BitMask (const BitMask< WType, nbits > ©) | |
void | clear () |
Sets all the bits in the BitMask off. | |
void | clear_bit (int index) |
Sets the nth bit off. | |
void | clear_range (int low_bit, int size) |
Sets the indicated range of bits off. | |
int | compare_to (const BitMask< WType, nbits > &other) const |
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. | |
WordType | extract (int low_bit, int size) const |
Returns a word that represents only the indicated range of bits within this BitMask, shifted to the least-significant position. | |
BitMask< WType, nbits > | flood_bits_down () const |
Returns a BitMask with the bits flooded down. | |
BitMask< WType, nbits > | flood_bits_up () const |
Returns a BitMask with the bits flooded upwards. | |
void | flood_down_in_place () |
Floods this bitmask's bits downwards. | |
void | flood_up_in_place () |
Floods this bitmask's bits upwards. | |
void | generate_hash (ChecksumHashGenerator &hashgen) const |
Adds the bitmask to the indicated hash generator. | |
bool | get_bit (int index) const |
Returns true if the nth bit is set, false if it is cleared. | |
int | get_highest_off_bit () const |
Returns the index of the highest 0 bit in the mask. | |
int | get_highest_on_bit () const |
Returns the index of the highest 1 bit in the mask. | |
int | get_key () const |
Returns a mostly unique integer key per unique bitmask, suitable for using in a hash table. | |
int | get_lowest_off_bit () const |
Returns the index of the lowest 0 bit in the mask. | |
int | get_lowest_on_bit () const |
Returns the index of the lowest 1 bit in the mask. | |
int | get_next_higher_different_bit (int low_bit) const |
Returns the index of the next bit in the mask, above low_bit, whose value is different that the value of low_bit. | |
int | get_num_off_bits () const |
Returns the number of bits that are set to 0 in the mask. | |
int | get_num_on_bits () const |
Returns the number of bits that are set to 1 in the mask. | |
WordType | get_word () const |
Returns the entire BitMask as a single word. | |
bool | has_all_of (int low_bit, int size) const |
Returns true if all bits in the indicated range are set, false otherwise. | |
bool | has_any_of (int low_bit, int size) const |
Returns true if any bit in the indicated range is set, false otherwise. | |
bool | has_bits_in_common (const BitMask< WType, nbits > &other) const |
Returns true if this BitMask has any "one" bits in common with the other one, false otherwise. | |
void | invert_in_place () |
Inverts all the bits in the BitMask. | |
bool | is_all_on () const |
Returns true if the entire bitmask is one, false otherwise. | |
bool | is_zero () const |
Returns true if the entire bitmask is zero, false otherwise. | |
BitMask< WType, nbits > | keep_next_highest_bit (const BitMask< WType, nbits > &other) const |
Returns a BitMask with only the next highest "on" bit above all "on" bits in the passed in bitmask, or all_off. | |
BitMask< WType, nbits > | keep_next_highest_bit () const |
Returns a BitMask with only the next highest bit above the indicated bit on, or all_off. | |
BitMask< WType, nbits > | keep_next_highest_bit (int index) const |
Returns a BitMask with only the next highest bit above the indicated bit on, or all. | |
BitMask< WType, nbits > | keep_next_lowest_bit (const BitMask< WType, nbits > &other) const |
Returns a BitMask with only the next lowest "on" bit below all "on" bits in the passed in bitmask, or all_off. | |
BitMask< WType, nbits > | keep_next_lowest_bit (int index) const |
Returns a BitMask with only the next lower bit below the indicated bit on, or all_off. | |
BitMask< WType, nbits > | keep_next_lowest_bit () const |
Returns a BitMask with only the next lower bit below the indicated bit on, or all_off. | |
bool | operator!= (const BitMask< WType, nbits > &other) const |
BitMask< WType, nbits > | operator& (const BitMask< WType, nbits > &other) const |
void | operator&= (const BitMask< WType, nbits > &other) |
bool | operator< (const BitMask< WType, nbits > &other) const |
The ordering operator is of limited usefulness with a BitMask, however, it has a definition which places all unique BitMasks into a unique ordering. | |
BitMask< WType, nbits > | operator<< (int shift) const |
void | operator<<= (int shift) |
BitMask< WType, nbits > & | operator= (const BitMask< WType, nbits > ©) |
bool | operator== (const BitMask< WType, nbits > &other) const |
BitMask< WType, nbits > | operator>> (int shift) const |
void | operator>>= (int shift) |
BitMask< WType, nbits > | operator^ (const BitMask< WType, nbits > &other) const |
void | operator^= (const BitMask< WType, nbits > &other) |
BitMask< WType, nbits > | operator| (const BitMask< WType, nbits > &other) const |
void | operator|= (const BitMask< WType, nbits > &other) |
BitMask< WType, nbits > | operator~ () const |
void | output (ostream &out) const |
Writes the BitMask out as a binary or a hex number, according to the number of bits. | |
void | output_binary (ostream &out, int spaces_every=4) const |
Writes the BitMask out as a binary number, with spaces every four bits. | |
void | output_hex (ostream &out, int spaces_every=4) const |
Writes the BitMask out as a hexadecimal number, with spaces every four digits. | |
void | set_bit (int index) |
Sets the nth bit on. | |
void | set_bit_to (int index, bool value) |
Sets the nth bit either on or off, according to the indicated bool value. | |
void | set_range (int low_bit, int size) |
Sets the indicated range of bits on. | |
void | set_range_to (bool value, int low_bit, int size) |
Sets the indicated range of bits to either on or off. | |
void | set_word (WordType value) |
Sets the entire BitMask to the value indicated by the given word. | |
void | store (WordType value, int low_bit, int size) |
Stores the indicated word into the indicated range of bits with this BitMask. | |
void | write (ostream &out, int indent_level=0) const |
Writes the BitMask out as a binary or a hex number, according to the number of bits. | |
Static Public Member Functions | |
static BitMask< WType, nbits > | all_off () |
Returns a BitMask whose bits are all off. | |
static BitMask< WType, nbits > | all_on () |
Returns a BitMask whose bits are all on. | |
static BitMask< WType, nbits > | bit (int index) |
Returns a BitMask with only the indicated bit on. | |
static TypeHandle | get_class_type () |
static int | get_max_num_bits () |
If get_max_num_bits() returned true, this method may be called to return the maximum number of bits that may be stored in this structure. | |
static int | get_num_bits () |
Returns the number of bits available to set in the bitmask. | |
static bool | has_max_num_bits () |
Returns true if there is a maximum number of bits that may be stored in this structure, false otherwise. | |
static void | init_type () |
static BitMask< WType, nbits > | lower_on (int on_bits) |
Returns a BitMask whose lower on_bits bits are on. | |
static BitMask< WType, nbits > | range (int low_bit, int size) |
Returns a BitMask whose size bits, beginning at low_bit, are on. |
A general bitmask class.
This stores an array of bits of some length that must fit within a given word of the indicated type. See also BitArray.
BitMask< WType, nbits > BitMask< WType, nbits >::all_off | ( | ) | [inline, static] |
Returns a BitMask whose bits are all off.
Definition at line 86 of file bitMask.I.
Referenced by NodePath::get_collide_mask(), PandaNode::get_legal_collide_mask(), BitMask< WType, nbits >::keep_next_highest_bit(), and BitMask< WType, nbits >::keep_next_lowest_bit().
BitMask< WType, nbits > BitMask< WType, nbits >::all_on | ( | ) | [inline, static] |
Returns a BitMask whose bits are all on.
Definition at line 73 of file bitMask.I.
Referenced by BulletClosestHitSweepResult::empty(), BulletClosestHitRayResult::empty(), BulletAllHitsRayResult::empty(), GeomNode::get_legal_collide_mask(), CollisionNode::get_legal_collide_mask(), BulletBodyNode::get_legal_collide_mask(), and BulletBaseCharacterControllerNode::get_legal_collide_mask().
BitMask< WType, nbits > BitMask< WType, nbits >::bit | ( | int | index | ) | [inline, static] |
Returns a BitMask with only the indicated bit on.
Definition at line 117 of file bitMask.I.
References BitMask< WType, nbits >::set_bit().
Referenced by BitMask< WType, nbits >::keep_next_highest_bit(), and BitMask< WType, nbits >::keep_next_lowest_bit().
void BitMask< WType, nbits >::clear | ( | ) | [inline] |
Sets all the bits in the BitMask off.
Definition at line 561 of file bitMask.I.
Referenced by GraphicsStateGuardian::begin_frame(), GraphicsStateGuardian::clear_state_and_transform(), GraphicsStateGuardian::end_scene(), DXGraphicsStateGuardian9::free_d3d_device(), DXGraphicsStateGuardian8::free_d3d_device(), and GraphicsStateGuardian::reset().
void BitMask< WType, nbits >::clear_bit | ( | int | index | ) | [inline] |
Sets the nth bit off.
index must be in the range [0, num_bits).
Definition at line 238 of file bitMask.I.
Referenced by RenderState::compare_to(), RenderState::cull_callback(), GraphicsStateGuardian::do_issue_color(), TinyGraphicsStateGuardian::reset(), DXGraphicsStateGuardian9::reset(), DXGraphicsStateGuardian9::set_state_and_transform(), and RenderState::write_datagram().
void BitMask< WType, nbits >::clear_range | ( | int | low_bit, |
int | size | ||
) | [inline] |
Sets the indicated range of bits off.
Definition at line 356 of file bitMask.I.
References BitMask< WType, nbits >::range().
int BitMask< WType, nbits >::compare_to | ( | const BitMask< WType, nbits > & | other | ) | const [inline] |
BitMask< WType, nbits >::WordType BitMask< WType, nbits >::extract | ( | int | low_bit, |
int | size | ||
) | const [inline] |
Returns a word that represents only the indicated range of bits within this BitMask, shifted to the least-significant position.
Definition at line 293 of file bitMask.I.
References BitMask< WType, nbits >::lower_on().
void BitMask< WType, nbits >::flood_down_in_place | ( | ) | [inline] |
Floods this bitmask's bits downwards.
Definition at line 878 of file bitMask.I.
Referenced by BitMask< WType, nbits >::keep_next_highest_bit(), and BitMask< WType, nbits >::keep_next_lowest_bit().
void BitMask< WType, nbits >::flood_up_in_place | ( | ) | [inline] |
Floods this bitmask's bits upwards.
Definition at line 867 of file bitMask.I.
Referenced by BitMask< WType, nbits >::keep_next_highest_bit(), and BitMask< WType, nbits >::keep_next_lowest_bit().
void BitMask< WType, nbits >::generate_hash | ( | ChecksumHashGenerator & | hashgen | ) | const [inline] |
Adds the bitmask to the indicated hash generator.
Definition at line 843 of file bitMask.I.
References ChecksumHashGenerator::add_int().
bool BitMask< WType, nbits >::get_bit | ( | int | index | ) | const [inline] |
Returns true if the nth bit is set, false if it is cleared.
index must be in the range [0, num_bits).
Definition at line 212 of file bitMask.I.
Referenced by RenderState::compare_sort(), GraphicsStateGuardian::get_supports_compressed_texture_format(), TinyGraphicsStateGuardian::set_state_and_transform(), DXGraphicsStateGuardian9::set_state_and_transform(), and DXGraphicsStateGuardian8::set_state_and_transform().
int BitMask< WType, nbits >::get_highest_off_bit | ( | ) | const [inline] |
int BitMask< WType, nbits >::get_highest_on_bit | ( | ) | const [inline] |
Returns the index of the highest 1 bit in the mask.
Returns -1 if there are no 1 bits.
Definition at line 455 of file bitMask.I.
Referenced by BitMask< WType, nbits >::keep_next_highest_bit().
int BitMask< WType, nbits >::get_key | ( | ) | const [inline] |
int BitMask< WType, nbits >::get_lowest_off_bit | ( | ) | const [inline] |
int BitMask< WType, nbits >::get_lowest_on_bit | ( | ) | const [inline] |
Returns the index of the lowest 1 bit in the mask.
Returns -1 if there are no 1 bits.
Definition at line 431 of file bitMask.I.
Referenced by RenderState::compare_to(), RenderState::cull_callback(), BitMask< WType, nbits >::keep_next_lowest_bit(), and RenderState::write_datagram().
int BitMask< WType, nbits >::get_max_num_bits | ( | ) | [inline, static] |
If get_max_num_bits() returned true, this method may be called to return the maximum number of bits that may be stored in this structure.
It is an error to call this if get_max_num_bits() return false.
It is never an error to call this method. This returns the same thing as get_num_bits(). This method is defined so generic programming algorithms can use BitMask or BitArray interchangeably.
int BitMask< WType, nbits >::get_next_higher_different_bit | ( | int | low_bit | ) | const [inline] |
Returns the index of the next bit in the mask, above low_bit, whose value is different that the value of low_bit.
Returns low_bit again if all bits higher than low_bit have the same value.
This can be used to quickly iterate through all of the bits in the mask.
int BitMask< WType, nbits >::get_num_bits | ( | ) | [inline, static] |
int BitMask< WType, nbits >::get_num_off_bits | ( | ) | const [inline] |
int BitMask< WType, nbits >::get_num_on_bits | ( | ) | const [inline] |
Returns the number of bits that are set to 1 in the mask.
Definition at line 407 of file bitMask.I.
Referenced by RenderState::write_datagram().
BitMask< WType, nbits >::WordType BitMask< WType, nbits >::get_word | ( | ) | const [inline] |
Returns the entire BitMask as a single word.
Definition at line 383 of file bitMask.I.
Referenced by Camera::write_datagram(), and CollisionNode::write_datagram().
bool BitMask< WType, nbits >::has_all_of | ( | int | low_bit, |
int | size | ||
) | const [inline] |
Returns true if all bits in the indicated range are set, false otherwise.
Definition at line 332 of file bitMask.I.
References BitMask< WType, nbits >::range().
bool BitMask< WType, nbits >::has_any_of | ( | int | low_bit, |
int | size | ||
) | const [inline] |
Returns true if any bit in the indicated range is set, false otherwise.
Definition at line 319 of file bitMask.I.
References BitMask< WType, nbits >::range().
bool BitMask< WType, nbits >::has_bits_in_common | ( | const BitMask< WType, nbits > & | other | ) | const [inline] |
bool BitMask< WType, nbits >::has_max_num_bits | ( | ) | [inline, static] |
Returns true if there is a maximum number of bits that may be stored in this structure, false otherwise.
If this returns true, the number may be queried in get_max_num_bits().
This method always returns true. This method is defined so generic programming algorithms can use BitMask or BitArray interchangeably.
void BitMask< WType, nbits >::invert_in_place | ( | ) | [inline] |
Inverts all the bits in the BitMask.
This is equivalent to mask = ~mask.
Definition at line 533 of file bitMask.I.
Referenced by BitMask< WType, nbits >::keep_next_highest_bit(), and BitMask< WType, nbits >::keep_next_lowest_bit().
bool BitMask< WType, nbits >::is_all_on | ( | ) | const [inline] |
bool BitMask< WType, nbits >::is_zero | ( | ) | const [inline] |
Returns true if the entire bitmask is zero, false otherwise.
Definition at line 268 of file bitMask.I.
Referenced by PandaNode::adjust_draw_mask(), and RenderState::is_empty().
BitMask< WType, nbits > BitMask< WType, nbits >::keep_next_highest_bit | ( | const BitMask< WType, nbits > & | other | ) | const [inline] |
Returns a BitMask with only the next highest "on" bit above all "on" bits in the passed in bitmask, or all_off.
If there are no "on" bits in the passed in bitmask, it will return keep_next_highest_bit().
Definition at line 1003 of file bitMask.I.
References BitMask< WType, nbits >::get_highest_on_bit().
BitMask< WType, nbits > BitMask< WType, nbits >::keep_next_highest_bit | ( | ) | const [inline] |
Returns a BitMask with only the next highest bit above the indicated bit on, or all_off.
Definition at line 915 of file bitMask.I.
References BitMask< WType, nbits >::all_off(), and BitMask< WType, nbits >::bit().
BitMask< WType, nbits > BitMask< WType, nbits >::keep_next_highest_bit | ( | int | index | ) | const [inline] |
Returns a BitMask with only the next highest bit above the indicated bit on, or all.
Definition at line 949 of file bitMask.I.
References BitMask< WType, nbits >::flood_down_in_place(), BitMask< WType, nbits >::flood_up_in_place(), BitMask< WType, nbits >::invert_in_place(), and BitMask< WType, nbits >::set_bit().
BitMask< WType, nbits > BitMask< WType, nbits >::keep_next_lowest_bit | ( | ) | const [inline] |
Returns a BitMask with only the next lower bit below the indicated bit on, or all_off.
Definition at line 932 of file bitMask.I.
References BitMask< WType, nbits >::all_off(), and BitMask< WType, nbits >::bit().
BitMask< WType, nbits > BitMask< WType, nbits >::keep_next_lowest_bit | ( | int | index | ) | const [inline] |
Returns a BitMask with only the next lower bit below the indicated bit on, or all_off.
Definition at line 975 of file bitMask.I.
References BitMask< WType, nbits >::flood_down_in_place(), BitMask< WType, nbits >::flood_up_in_place(), BitMask< WType, nbits >::invert_in_place(), and BitMask< WType, nbits >::set_bit().
BitMask< WType, nbits > BitMask< WType, nbits >::keep_next_lowest_bit | ( | const BitMask< WType, nbits > & | other | ) | const [inline] |
Returns a BitMask with only the next lowest "on" bit below all "on" bits in the passed in bitmask, or all_off.
If there are no "on" bits in the passed in bitmask, it will return keep_next_lowest_bit().
Definition at line 1022 of file bitMask.I.
References BitMask< WType, nbits >::get_lowest_on_bit().
BitMask< WType, nbits > BitMask< WType, nbits >::lower_on | ( | int | on_bits | ) | [inline, static] |
Returns a BitMask whose lower on_bits bits are on.
Definition at line 99 of file bitMask.I.
Referenced by BitMask< WType, nbits >::extract().
bool BitMask< WType, nbits >::operator< | ( | const BitMask< WType, nbits > & | other | ) | const [inline] |
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.
void BitMask< WType, nbits >::output | ( | ostream & | out | ) | const |
void BitMask< WType, nbits >::output_binary | ( | ostream & | out, |
int | spaces_every = 4 |
||
) | const |
void BitMask< WType, nbits >::output_hex | ( | ostream & | out, |
int | spaces_every = 4 |
||
) | const |
Writes the BitMask out as a hexadecimal number, with spaces every four digits.
Definition at line 606 of file bitMask.I.
Referenced by EggGroup::write_collide_flags().
BitMask< WType, nbits > BitMask< WType, nbits >::range | ( | int | low_bit, |
int | size | ||
) | [inline, static] |
Returns a BitMask whose size bits, beginning at low_bit, are on.
Definition at line 131 of file bitMask.I.
Referenced by BitMask< WType, nbits >::clear_range(), BitMask< WType, nbits >::has_all_of(), BitMask< WType, nbits >::has_any_of(), BitMask< WType, nbits >::set_range(), and BitMask< WType, nbits >::store().
void BitMask< WType, nbits >::set_bit | ( | int | index | ) | [inline] |
Sets the nth bit on.
index must be in the range [0, num_bits).
Definition at line 225 of file bitMask.I.
Referenced by BitMask< WType, nbits >::bit(), RenderState::complete_pointers(), BitMask< WType, nbits >::keep_next_highest_bit(), BitMask< WType, nbits >::keep_next_lowest_bit(), TinyGraphicsStateGuardian::set_state_and_transform(), DXGraphicsStateGuardian9::set_state_and_transform(), and DXGraphicsStateGuardian8::set_state_and_transform().
void BitMask< WType, nbits >::set_bit_to | ( | int | index, |
bool | value | ||
) | [inline] |
void BitMask< WType, nbits >::set_range | ( | int | low_bit, |
int | size | ||
) | [inline] |
Sets the indicated range of bits on.
Definition at line 344 of file bitMask.I.
References BitMask< WType, nbits >::range().
void BitMask< WType, nbits >::set_range_to | ( | bool | value, |
int | low_bit, | ||
int | size | ||
) | [inline] |
void BitMask< WType, nbits >::set_word | ( | WordType | value | ) | [inline] |
Sets the entire BitMask to the value indicated by the given word.
Definition at line 395 of file bitMask.I.
Referenced by Camera::fillin(), and CollisionNode::fillin().
void BitMask< WType, nbits >::store | ( | WordType | value, |
int | low_bit, | ||
int | size | ||
) | [inline] |
Stores the indicated word into the indicated range of bits with this BitMask.
Definition at line 306 of file bitMask.I.
References BitMask< WType, nbits >::range().
void BitMask< WType, nbits >::write | ( | ostream & | out, |
int | indent_level = 0 |
||
) | const |