AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
UpdateMask Class Reference

#include "UpdateMask.h"

Public Types

enum  UpdateMaskCount { CLIENT_UPDATE_MASK_BITS = sizeof(ClientUpdateMaskType) * 8 }
 
typedef uint32 ClientUpdateMaskType
 Type representing how client reads update mask.
 

Public Member Functions

 UpdateMask ()=default
 
 UpdateMask (UpdateMask const &right)
 
 ~UpdateMask ()
 
void SetBit (uint32 index)
 
void UnsetBit (uint32 index)
 
bool GetBit (uint32 index) const
 
void AppendToPacket (ByteBuffer *data)
 
uint32 GetBlockCount () const
 
uint32 GetCount () const
 
void SetCount (uint32 valuesCount)
 
void Clear ()
 
UpdateMaskoperator= (UpdateMask const &right)
 
UpdateMaskoperator&= (UpdateMask const &right)
 
UpdateMaskoperator|= (UpdateMask const &right)
 
UpdateMask operator| (UpdateMask const &right)
 

Private Attributes

uint32 _fieldCount {0}
 
uint32 _blockCount {0}
 
uint8_bits {nullptr}
 

Detailed Description

Member Typedef Documentation

◆ ClientUpdateMaskType

Type representing how client reads update mask.

Member Enumeration Documentation

◆ UpdateMaskCount

Enumerator
CLIENT_UPDATE_MASK_BITS 
32 {
34 };
@ CLIENT_UPDATE_MASK_BITS
Definition: UpdateMask.h:33
uint32 ClientUpdateMaskType
Type representing how client reads update mask.
Definition: UpdateMask.h:29

Constructor & Destructor Documentation

◆ UpdateMask() [1/2]

UpdateMask::UpdateMask ( )
default

◆ UpdateMask() [2/2]

UpdateMask::UpdateMask ( UpdateMask const &  right)
inline
39 {
40 SetCount(right.GetCount());
41 memcpy(_bits, right._bits, sizeof(uint8) * _blockCount * 32);
42 }
std::uint8_t uint8
Definition: Define.h:110
uint8 * _bits
Definition: UpdateMask.h:121
uint32 _blockCount
Definition: UpdateMask.h:120
void SetCount(uint32 valuesCount)
Definition: UpdateMask.h:66

References _bits, _blockCount, GetCount(), and SetCount().

◆ ~UpdateMask()

UpdateMask::~UpdateMask ( )
inline
44{ delete[] _bits; }

References _bits.

Member Function Documentation

◆ AppendToPacket()

void UpdateMask::AppendToPacket ( ByteBuffer data)
inline
51 {
52 for (uint32 i = 0; i < GetBlockCount(); ++i)
53 {
54 ClientUpdateMaskType maskPart = 0;
55 for (uint32 j = 0; j < CLIENT_UPDATE_MASK_BITS; ++j)
56 if (_bits[CLIENT_UPDATE_MASK_BITS * i + j])
57 maskPart |= 1 << j;
58
59 *data << maskPart;
60 }
61 }
std::uint32_t uint32
Definition: Define.h:108
uint32 GetBlockCount() const
Definition: UpdateMask.h:63

References _bits, CLIENT_UPDATE_MASK_BITS, and GetBlockCount().

Referenced by Object::BuildValuesUpdate(), Corpse::BuildValuesUpdate(), GameObject::BuildValuesUpdate(), and Unit::BuildValuesUpdate().

◆ Clear()

void UpdateMask::Clear ( )
inline
78 {
79 if (_bits)
80 memset(_bits, 0, sizeof(uint8) * _blockCount * CLIENT_UPDATE_MASK_BITS);
81 }

References _bits, _blockCount, and CLIENT_UPDATE_MASK_BITS.

Referenced by Object::ClearUpdateMask().

◆ GetBit()

bool UpdateMask::GetBit ( uint32  index) const
inline

◆ GetBlockCount()

◆ GetCount()

uint32 UpdateMask::GetCount ( ) const
inline
64{ return _fieldCount; }
uint32 _fieldCount
Definition: UpdateMask.h:119

References _fieldCount.

Referenced by operator&=(), operator=(), operator|=(), and UpdateMask().

◆ operator&=()

UpdateMask & UpdateMask::operator&= ( UpdateMask const &  right)
inline
94 {
95 ASSERT(right.GetCount() <= GetCount());
96 for (uint32 i = 0; i < _fieldCount; ++i)
97 _bits[i] &= right._bits[i];
98
99 return *this;
100 }
#define ASSERT
Definition: Errors.h:68
uint32 GetCount() const
Definition: UpdateMask.h:64

References _bits, _fieldCount, ASSERT, and GetCount().

◆ operator=()

UpdateMask & UpdateMask::operator= ( UpdateMask const &  right)
inline
84 {
85 if (this == &right)
86 return *this;
87
88 SetCount(right.GetCount());
89 memcpy(_bits, right._bits, sizeof(uint8) * _blockCount * CLIENT_UPDATE_MASK_BITS);
90 return *this;
91 }

References _bits, _blockCount, CLIENT_UPDATE_MASK_BITS, GetCount(), and SetCount().

◆ operator|()

UpdateMask UpdateMask::operator| ( UpdateMask const &  right)
inline
112 {
113 UpdateMask ret(*this);
114 ret |= right;
115 return ret;
116 }
Definition: UpdateMask.h:26

◆ operator|=()

UpdateMask & UpdateMask::operator|= ( UpdateMask const &  right)
inline
103 {
104 ASSERT(right.GetCount() <= GetCount());
105 for (uint32 i = 0; i < _fieldCount; ++i)
106 _bits[i] |= right._bits[i];
107
108 return *this;
109 }

References _bits, _fieldCount, ASSERT, and GetCount().

◆ SetBit()

◆ SetCount()

◆ UnsetBit()

void UpdateMask::UnsetBit ( uint32  index)
inline
47{ _bits[index] = 0; }

References _bits.

Referenced by Unit::SetLevel().

Member Data Documentation

◆ _bits

◆ _blockCount

uint32 UpdateMask::_blockCount {0}
private

◆ _fieldCount

uint32 UpdateMask::_fieldCount {0}
private