2 * Copyright (C) 2004, Leo Seib, Hannover
4 * Project: C++ Dynamic Library
5 * Module: FieldValue class realisation file
6 * Author: Leo Seib E-Mail: leoseib@web.de
9 * SPDX-License-Identifier: MIT
10 * See LICENSES/README.md for more information.
13 /**********************************************************************
14 * 2005-03-29 - Minor modifications to allow get_asBool to function on
15 * on string values that are 1 or 0
16 **********************************************************************/
25 #pragma warning(disable : 4800)
26 #pragma warning(disable : 4715)
33 field_value::field_value()
35 field_type
= ft_String
;
39 field_value::field_value(const char* s
) : str_value(s
)
41 field_type
= ft_String
;
45 field_value::field_value(const bool b
)
48 field_type
= ft_Boolean
;
52 field_value::field_value(const char c
)
59 field_value::field_value(const short s
)
62 field_type
= ft_Short
;
66 field_value::field_value(const unsigned short us
)
69 field_type
= ft_UShort
;
73 field_value::field_value(const int i
)
80 field_value::field_value(const unsigned int ui
)
87 field_value::field_value(const float f
)
90 field_type
= ft_Float
;
94 field_value::field_value(const double d
)
97 field_type
= ft_Double
;
101 field_value::field_value(const int64_t i
)
104 field_type
= ft_Int64
;
108 field_value::field_value(const char* s
, std::size_t len
)
109 : field_type(ft_String
), str_value(s
, len
), is_null(false)
113 field_value::field_value(const field_value
& fv
)
115 switch (fv
.get_fType())
119 set_asString(fv
.get_asString());
124 set_asBool(fv
.get_asBool());
129 set_asChar(fv
.get_asChar());
134 set_asShort(fv
.get_asShort());
139 set_asUShort(fv
.get_asUShort());
144 set_asInt(fv
.get_asInt());
149 set_asUInt(fv
.get_asUInt());
154 set_asFloat(fv
.get_asFloat());
159 set_asDouble(fv
.get_asDouble());
164 set_asInt64(fv
.get_asInt64());
170 is_null
= fv
.get_isNull();
173 field_value::field_value(field_value
&& fv
) noexcept
175 *this = std::move(fv
);
179 field_value::~field_value() = default;
181 //Conversations functions
182 std::string
field_value::get_asString() const&
204 snprintf(t
, sizeof(t
), "%i", short_value
);
210 snprintf(t
, sizeof(t
), "%i", ushort_value
);
216 snprintf(t
, sizeof(t
), "%d", int_value
);
222 snprintf(t
, sizeof(t
), "%u", uint_value
);
228 snprintf(t
, sizeof(t
), "%f", static_cast<double>(float_value
));
234 snprintf(t
, sizeof(t
), "%f", double_value
);
240 snprintf(t
, sizeof(t
), "%" PRId64
, int64_value
);
248 std::string
field_value::get_asString() &&
253 return std::move(str_value
);
255 return get_asString();
259 bool field_value::get_asBool() const
265 if (str_value
== "True" || str_value
== "true" || str_value
== "1")
276 if (char_value
== 'T' || char_value
== 't')
283 return (bool)short_value
;
287 return (bool)ushort_value
;
291 return (bool)int_value
;
295 return (bool)uint_value
;
299 return (bool)float_value
;
303 return (bool)double_value
;
307 return (bool)int64_value
;
314 char field_value::get_asChar() const
336 snprintf(t
, sizeof(t
), "%i", short_value
);
342 snprintf(t
, sizeof(t
), "%i", ushort_value
);
348 snprintf(t
, sizeof(t
), "%d", int_value
);
354 snprintf(t
, sizeof(t
), "%u", uint_value
);
360 snprintf(t
, sizeof(t
), "%f", static_cast<double>(float_value
));
366 snprintf(t
, sizeof(t
), "%f", double_value
);
372 snprintf(t
, sizeof(t
), "%" PRId64
, int64_value
);
380 short field_value::get_asShort() const
386 return (short)atoi(str_value
.c_str());
390 return (short)bool_value
;
394 return (short)char_value
;
402 return (short)ushort_value
;
406 return (short)int_value
;
410 return (short)uint_value
;
414 return (short)float_value
;
418 return (short)double_value
;
422 return (short)int64_value
;
429 unsigned short field_value::get_asUShort() const
435 return (unsigned short)atoi(str_value
.c_str());
439 return (unsigned short)bool_value
;
443 return (unsigned short)char_value
;
447 return (unsigned short)short_value
;
455 return (unsigned short)int_value
;
459 return (unsigned short)uint_value
;
463 return (unsigned short)float_value
;
467 return (unsigned short)double_value
;
471 return (unsigned short)int64_value
;
478 int field_value::get_asInt() const
484 return atoi(str_value
.c_str());
488 return (int)bool_value
;
492 return (int)char_value
;
496 return (int)short_value
;
500 return (int)ushort_value
;
508 return (int)uint_value
;
512 return (int)float_value
;
516 return (int)double_value
;
520 return (int)int64_value
;
527 unsigned int field_value::get_asUInt() const
533 return (unsigned int)atoi(str_value
.c_str());
537 return (unsigned int)bool_value
;
541 return (unsigned int)char_value
;
545 return (unsigned int)short_value
;
549 return (unsigned int)ushort_value
;
553 return (unsigned int)int_value
;
561 return (unsigned int)float_value
;
565 return (unsigned int)double_value
;
569 return (unsigned int)int64_value
;
576 float field_value::get_asFloat() const
582 return (float)atof(str_value
.c_str());
586 return (float)bool_value
;
590 return (float)char_value
;
594 return (float)short_value
;
598 return (float)ushort_value
;
602 return (float)int_value
;
606 return (float)uint_value
;
614 return (float)double_value
;
618 return (float)int64_value
;
625 double field_value::get_asDouble() const
631 return atof(str_value
.c_str());
635 return (double)bool_value
;
639 return (double)char_value
;
643 return (double)short_value
;
647 return (double)ushort_value
;
651 return (double)int_value
;
655 return (double)uint_value
;
659 return (double)float_value
;
663 return (double)double_value
;
667 return (double)int64_value
;
674 int64_t field_value::get_asInt64() const
680 return std::atoll(str_value
.c_str());
684 return (int64_t)bool_value
;
688 return (int64_t)char_value
;
692 return (int64_t)short_value
;
696 return (int64_t)ushort_value
;
700 return (int64_t)int_value
;
704 return (int64_t)uint_value
;
708 return (int64_t)float_value
;
712 return (int64_t)double_value
;
723 field_value
& field_value::operator=(const field_value
& fv
)
728 is_null
= fv
.get_isNull();
730 switch (fv
.get_fType())
734 set_asString(fv
.get_asString());
740 set_asBool(fv
.get_asBool());
746 set_asChar(fv
.get_asChar());
752 set_asShort(fv
.get_asShort());
758 set_asUShort(fv
.get_asUShort());
764 set_asInt(fv
.get_asInt());
770 set_asUInt(fv
.get_asUInt());
776 set_asFloat(fv
.get_asFloat());
782 set_asDouble(fv
.get_asDouble());
788 set_asInt64(fv
.get_asInt64());
797 field_value
& field_value::operator=(field_value
&& fv
) noexcept
802 is_null
= fv
.get_isNull();
804 switch (fv
.get_fType())
807 set_asString(std::move(fv
.str_value
));
815 void field_value::set_asString(const char* s
)
818 field_type
= ft_String
;
821 void field_value::set_asString(const char* s
, std::size_t len
)
823 str_value
= std::string_view(s
, len
);
824 field_type
= ft_String
;
827 void field_value::set_asString(const std::string
& s
)
830 field_type
= ft_String
;
833 void field_value::set_asString(std::string
&& s
)
835 str_value
= std::move(s
);
836 field_type
= ft_String
;
839 void field_value::set_asBool(const bool b
)
842 field_type
= ft_Boolean
;
845 void field_value::set_asChar(const char c
)
848 field_type
= ft_Char
;
851 void field_value::set_asShort(const short s
)
854 field_type
= ft_Short
;
857 void field_value::set_asUShort(const unsigned short us
)
860 field_type
= ft_UShort
;
863 void field_value::set_asInt(const int i
)
869 void field_value::set_asUInt(const unsigned int ui
)
872 field_type
= ft_UInt
;
875 void field_value::set_asFloat(const float f
)
878 field_type
= ft_Float
;
881 void field_value::set_asDouble(const double d
)
884 field_type
= ft_Double
;
887 void field_value::set_asInt64(const int64_t i
)
890 field_type
= ft_Int64
;
893 fType
field_value::get_field_type()
898 std::string
field_value::gft()
905 tmp
.assign("string");
935 tmp
.assign("double");
950 } // namespace dbiplus