Skip to content

Commit aa891b8

Browse files
initial constructor
1 parent 94daf7a commit aa891b8

1 file changed

Lines changed: 61 additions & 0 deletions

File tree

Inc/HALAL/Models/Packets/PacketValue.hpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,64 @@ class PacketValue<string> : public PacketValue<>{
119119
template<class Type> requires Container<Type>
120120
PacketValue(Type)->PacketValue<Type>;
121121
#endif
122+
123+
template<class Type,size_t N> requires std::is_pointer<Type>::value
124+
class PacketValue<Type(&)[N]>: public PacketValue<> {
125+
public:
126+
using value_type = Type;
127+
Type(*src )[N] = nullptr;
128+
PacketValue() = default;
129+
PacketValue(Type(*src)[N]): src(src) {}
130+
~PacketValue() = default;
131+
void* get_pointer() override {
132+
return src;
133+
}
134+
size_t get_size() override {
135+
return N*sizeof(Type);
136+
}
137+
void parse(void* data) override {
138+
memcpy(src, data, get_size());
139+
}
140+
void copy_to(void* data) override {
141+
memcpy(data, src, get_size());
142+
}
143+
};
144+
145+
#if __cpp_deduction_guides >= 201606
146+
template<class Type,size_t N>
147+
PacketValue(Type(*)[N])->PacketValue<Type(&)[N]>;
148+
#endif
149+
150+
151+
template<class Type,size_t N>
152+
class PacketValue<Type*(&)[N]>: public PacketValue<> {
153+
public:
154+
using value_type = Type*;
155+
Type*(*src )[N] = nullptr;
156+
PacketValue() = default;
157+
PacketValue(Type*(*src)[N]): src(src) {}
158+
~PacketValue() = default;
159+
void* get_pointer() override {
160+
return src;
161+
}
162+
size_t get_size() override {
163+
return N*sizeof(Type);
164+
}
165+
void parse(void* data) override {
166+
for(Type* i : *src) {
167+
*i = *(Type*)data;
168+
data += sizeof(Type);
169+
}
170+
}
171+
void copy_to(void* data) override {
172+
for(Type* i : *src) {
173+
*(Type*)data = *i;
174+
data += sizeof(Type);
175+
}
176+
}
177+
};
178+
179+
#if __cpp_deduction_guides >= 201606
180+
template<class Type,size_t N>
181+
PacketValue(Type*(*)[N])->PacketValue<Type*(&)[N]>;
182+
#endif

0 commit comments

Comments
 (0)