18#ifndef TRINITYCORE_UPDATE_FIELD_IMPL_H
19#define TRINITYCORE_UPDATE_FIELD_IMPL_H
34 for (std::size_t block = 0; block <
size / 32; ++block)
37 for (std::size_t block = 0; block <
size / 32; ++block)
38 data <<
uint32(updateMask[block]);
56 for (std::size_t block = 0; block <
size / 32; ++block)
59 for (std::size_t block = 0; block <
size / 32; ++block)
60 data <<
uint32(0xFFFFFFFFu);
72template <
typename K,
typename V,
typename T>
76 for (
auto const& [k, v] : map)
78 if constexpr (std::is_base_of_v<IsUpdateFieldStructureTag, K>)
79 k.WriteCreate(data, receiver, owner);
83 if constexpr (std::is_base_of_v<IsUpdateFieldStructureTag, V>)
84 v.value.WriteCreate(data, receiver, owner);
90template <
typename K,
typename V,
typename T>
93 data <<
uint8(ignoreChangesMask ? 1 : 0);
94 if (ignoreChangesMask)
99 size_t changesCountPos = data.
wpos();
100 data <<
uint16(changesCount);
102 for (
auto const& [k, v] : map)
109 if constexpr (std::is_base_of_v<IsUpdateFieldStructureTag, K>)
110 k.WriteUpdate(
false, data, receiver, owner);
114 data <<
uint8(v.state);
118 if constexpr (std::is_base_of_v<IsUpdateFieldStructureTag, V>)
119 v.value.WriteUpdate(
false, data, receiver, owner);
124 data.
put<
uint16>(changesCountPos, changesCount);
128template <
typename T,
typename O>
132 for (
auto const& [k, _] : set)
134 if constexpr (std::is_base_of_v<IsUpdateFieldStructureTag, T>)
135 k.WriteCreate(data, receiver, owner);
141template <
typename T,
typename O>
144 data <<
uint8(ignoreChangesMask ? 1 : 0);
145 if (ignoreChangesMask)
150 size_t changesCountPos = data.
wpos();
151 data <<
uint16(changesCount);
153 for (
auto const& [k, state] : set)
160 if constexpr (std::is_base_of_v<IsUpdateFieldStructureTag, T>)
161 k.WriteUpdate(
false, data, receiver, owner);
165 data <<
uint8(state);
168 data.
put<
uint16>(changesCountPos, changesCount);
void put(std::size_t pos, T value)
bool HasUnfinishedBitPack() const
void WriteBits(uint64 value, int32 bits)
constexpr std::size_t size()
void WriteMapFieldCreate(MapUpdateFieldBase< K, V > const &map, ByteBuffer &data, Player const *receiver, T const *owner)
void WriteSetFieldUpdate(SetUpdateFieldBase< T > const &set, bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, O const *owner)
void WriteCompleteDynamicFieldUpdateMask(std::size_t size, ByteBuffer &data, int32 bitsForSize=32)
void WriteDynamicFieldUpdateMask(std::size_t size, std::vector< uint32 > const &updateMask, ByteBuffer &data, int32 bitsForSize=32)
void WriteMapFieldUpdate(MapUpdateFieldBase< K, V > const &map, bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, T const *owner)
void WriteSetFieldCreate(SetUpdateFieldBase< T > const &set, ByteBuffer &data, Player const *receiver, O const *owner)