TrinityCore
Loading...
Searching...
No Matches
Field.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "Field.h"
19#include "Errors.h"
20#include "FieldValueConverter.h"
21#include <cstring>
22
23Field::Field() : _value(nullptr), _length(0), _meta(nullptr)
24{
25}
26
27Field::~Field() = default;
28
29uint8 Field::GetUInt8() const noexcept
30{
31 if (_value)
33 return 0;
34}
35
36int8 Field::GetInt8() const noexcept
37{
38 if (_value)
40 return 0;
41}
42
43uint16 Field::GetUInt16() const noexcept
44{
45 if (_value)
47 return 0;
48}
49
50int16 Field::GetInt16() const noexcept
51{
52 if (_value)
54 return 0;
55}
56
57uint32 Field::GetUInt32() const noexcept
58{
59 if (_value)
61 return 0;
62}
63
64int32 Field::GetInt32() const noexcept
65{
66 if (_value)
68 return 0;
69}
70
71uint64 Field::GetUInt64() const noexcept
72{
73 if (_value)
75 return 0;
76}
77
78int64 Field::GetInt64() const noexcept
79{
80 if (_value)
82 return 0;
83}
84
85float Field::GetFloat() const noexcept
86{
87 if (_value)
89 return 0.0f;
90}
91
92double Field::GetDouble() const noexcept
93{
94 if (_value)
96 return 0.0;
97}
98
100{
101 if (_value)
103 return SystemTimePoint::min();
104}
105
106char const* Field::GetCString() const noexcept
107{
108 if (_value)
110 return nullptr;
111}
112
113std::string Field::GetString() const noexcept
114{
115 return std::string(GetStringView());
116}
117
118std::string_view Field::GetStringView() const noexcept
119{
120 if (char const* string = GetCString())
121 return { string, _length };
122 return {};
123}
124
125std::vector<uint8> Field::GetBinary() const noexcept
126{
127 std::span<uint8 const> binary = GetBinaryView();
128 return { binary.begin(), binary.end() };
129}
130
131std::span<uint8 const> Field::GetBinaryView() const noexcept
132{
133 return { reinterpret_cast<uint8 const*>(_value), _length };
134}
135
137{
138 if (_value)
140 return {};
141}
142
144{
145 if (_value)
147 return {};
148}
149
151{
152 if (_value)
154 return {};
155}
156
158{
159 if (_value)
161 return {};
162}
163
165{
166 if (_value)
168 return {};
169}
170
172{
173 if (_value)
175 return {};
176}
177
179{
180 if (_value)
182 return {};
183}
184
186{
187 if (_value)
189 return {};
190}
191
193{
194 if (_value)
196 return {};
197}
198
200{
201 if (_value)
203 return {};
204}
205
207{
208 if (_value)
210 return {};
211}
212
214{
216 return Optional<std::string>(std::in_place, *string);
217 return {};
218}
219
221{
222 if (char const* string = GetCString())
223 return Optional<std::string_view>(std::in_place, string, _length);
224 return {};
225}
226
228{
229 if (Optional<std::span<uint8 const>> binary = GetBinaryViewOrNull())
230 return Optional<std::vector<uint8>>(std::in_place, binary->begin(), binary->end());
231 return {};
232}
233
235{
236 if (_value)
237 return Optional<std::span<uint8 const>>(std::in_place, reinterpret_cast<uint8 const*>(_value), _length);
238 return {};
239}
240
241void Field::GetBinarySizeChecked(uint8* buf, size_t length) const noexcept
242{
243 ASSERT(_value && (_length == length), "Expected %zu-byte binary blob, got %sdata (%u bytes) instead", length, _value ? "" : "no ", _length);
244 memcpy(buf, _value, length);
245}
246
247void Field::SetValue(char const* newValue, uint32 length)
248{
249 // This value stores raw bytes that have to be explicitly cast later
250 _value = newValue;
251 _length = length;
252}
253
255{
256 _meta = meta;
257}
uint8_t uint8
Definition Define.h:156
int64_t int64
Definition Define.h:149
int16_t int16
Definition Define.h:151
int8_t int8
Definition Define.h:152
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
std::chrono::system_clock::time_point SystemTimePoint
Definition Duration.h:41
#define ASSERT
Definition Errors.h:80
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
virtual uint64 GetUInt64(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual SystemTimePoint GetDate(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual float GetFloat(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual double GetDouble(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual uint8 GetUInt8(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual int64 GetInt64(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual uint16 GetUInt16(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual int32 GetInt32(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual uint32 GetUInt32(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual int8 GetInt8(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual int16 GetInt16(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
virtual char const * GetCString(char const *data, uint32 size, QueryResultFieldMetadata const *meta) const =0
char const * _value
Definition Field.h:161
Optional< SystemTimePoint > GetDateOrNull() const noexcept
Definition Field.cpp:206
double GetDouble() const noexcept
Definition Field.cpp:92
float GetFloat() const noexcept
Definition Field.cpp:85
Optional< std::vector< uint8 > > GetBinaryOrNull() const noexcept
Definition Field.cpp:227
Optional< uint16 > GetUInt16OrNull() const noexcept
Definition Field.cpp:150
std::span< uint8 const > GetBinaryView() const noexcept
Definition Field.cpp:131
char const * GetCString() const noexcept
Definition Field.cpp:106
std::vector< uint8 > GetBinary() const noexcept
Definition Field.cpp:125
QueryResultFieldMetadata const * _meta
Definition Field.h:166
Field()
Definition Field.cpp:23
Optional< uint64 > GetUInt64OrNull() const noexcept
Definition Field.cpp:178
Optional< double > GetDoubleOrNull() const noexcept
Definition Field.cpp:199
Optional< float > GetFloatOrNull() const noexcept
Definition Field.cpp:192
uint32 _length
Definition Field.h:162
void SetMetadata(QueryResultFieldMetadata const *meta)
Definition Field.cpp:254
uint64 GetUInt64() const noexcept
Definition Field.cpp:71
int16 GetInt16() const noexcept
Definition Field.cpp:50
void GetBinarySizeChecked(uint8 *buf, size_t size) const noexcept
Definition Field.cpp:241
Optional< int8 > GetInt8OrNull() const noexcept
Definition Field.cpp:143
uint32 GetUInt32() const noexcept
Definition Field.cpp:57
Optional< int32 > GetInt32OrNull() const noexcept
Definition Field.cpp:171
uint16 GetUInt16() const noexcept
Definition Field.cpp:43
Optional< std::span< uint8 const > > GetBinaryViewOrNull() const noexcept
Definition Field.cpp:234
Optional< int16 > GetInt16OrNull() const noexcept
Definition Field.cpp:157
Optional< int64 > GetInt64OrNull() const noexcept
Definition Field.cpp:185
std::string_view GetStringView() const noexcept
Definition Field.cpp:118
uint8 GetUInt8() const noexcept
Definition Field.cpp:29
SystemTimePoint GetDate() const noexcept
Definition Field.cpp:99
Optional< std::string > GetStringOrNull() const noexcept
Definition Field.cpp:213
int32 GetInt32() const noexcept
Definition Field.cpp:64
Optional< uint8 > GetUInt8OrNull() const noexcept
Definition Field.cpp:136
Optional< uint32 > GetUInt32OrNull() const noexcept
Definition Field.cpp:164
std::string GetString() const noexcept
Definition Field.cpp:113
Optional< std::string_view > GetStringViewOrNull() const noexcept
Definition Field.cpp:220
void SetValue(char const *newValue, uint32 length)
Definition Field.cpp:247
int8 GetInt8() const noexcept
Definition Field.cpp:36
int64 GetInt64() const noexcept
Definition Field.cpp:78
BaseDatabaseResultValueConverter const * Converter
Definition Field.h:60