14 #ifndef TSA_VARIANT__INCLUDED 15 #define TSA_VARIANT__INCLUDED 17 #include "TSATypeDef.h" 25 class out_storage_stream;
26 class in_storage_stream;
141 tsa_declare_testable;
142 static const unsigned SIZE_OF_LARGEST_TYPE;
143 friend class variant_series;
146 static const char* class_name;
160 char m_time_zone_half_hour_offset;
161 unsigned char m_type;
239 void write_state(out_storage_stream&)
const;
240 void read_state(in_storage_stream&);
242 void write(std::ostream&)
const;
243 void read(std::istream&);
245 template<
class Archive>
246 void save(Archive & ar)
const 250 bool is_def = defined();
257 if (is_ptr_type(t)) {
259 ar(*(m_data.string_ptr));
261 else throw tsa::exception(
"cannot serialize variant with pointer sub-type; save(Archive&).");
265 tsa_assert(defined());
266 ar.saveBinary((
const char*)(
this),
sizeof(
variant));
269 template<
class Archive>
270 void load(Archive & ar)
279 tsa_assert(!defined());
290 ar.loadBinary((
char*)(
this),
sizeof(
variant));
291 tsa_assert(defined());
308 bool is_numeric(
void)
const;
315 bool defined(
void)
const;
329 bool is_equal(
const variant& other)
const;
333 bool not_defined(
void)
const;
335 void unset_null(
void);
337 void set_defined(
bool);
338 void reset_to_type(
type_t type);
339 void set_data_to_zero(
void);
349 bool is_owner(
void)
const;
359 const variant& operator= (
unsigned val);
368 const variant& operator= (
int val);
371 const variant& operator= (int64_t val);
374 const variant& operator= (uint64_t val);
377 const variant& operator= (
bool val);
380 const variant& operator= (
float val);
383 const variant& operator= (
double val);
386 const variant& operator= (
void* val);
389 const variant& operator= (
const char* val);
399 void assign__no_type_chg(
object* val);
402 void assign__no_type_chg(
float value);
405 void assign__no_type_chg(
double value);
408 void assign__no_type_chg(
unsigned value);
411 void assign__no_type_chg(
int value);
414 void assign__no_type_chg(int64_t value);
417 void assign__no_type_chg(
unsigned long int value);
420 void assign__no_type_chg(
bool value);
427 void assign__no_type_chg(
const variant& other);
430 void assign__no_type_chg(
void* value);
439 void assign__no_type_chg(
const char* val);
442 void assign__no_type_chg(
const date_time& val);
445 void assign__no_type_chg(
const date& val);
451 const variant& operator= (
object* val);
453 void raise_nil(
void)
const;
462 double to_double(
void)
const;
476 date to_date(
void)
const;
483 float to_float(
void)
const;
490 unsigned to_uint(
void)
const;
497 int to_int(
void)
const;
504 int64_t to_int64(
void)
const;
521 bool to_bool(
void)
const;
524 object* to_object_ptr(
void)
const;
531 void* to_void_ptr(
void)
const;
550 template<
typename T> T to(
void)
const;
573 template<
typename T> T
get(void)
const;
576 explicit operator float(
void)
const;
579 explicit operator unsigned(
void)
const;
582 explicit operator double(
void)
const;
585 explicit operator int(
void)
const;
588 explicit operator int64_t (
void)
const;
591 explicit operator uint64_t (
void)
const;
594 explicit operator bool(
void)
const;
597 explicit operator void* (void)
const;
602 explicit operator object* (void)
const;
607 static char to_type_char(
type_t);
608 static type_t type_char_to_type(
char);
610 void from_typed_storage_string(
const std::string& data);
613 static const std::string string_placeholder_for_undefined;
618 template<>
double variant::get<double>(void)
const;
619 template<>
float variant::get<float>(void)
const;
620 template<>
int variant::get<int>(void)
const;
621 template<> int64_t variant::get<int64_t>(void)
const;
622 template<> uint64_t variant::get<uint64_t>(void)
const;
623 template<>
unsigned variant::get<unsigned>(void)
const;
624 template<>
bool variant::get<bool>(void)
const;
625 template<>
date variant::get<date>(void)
const;
626 template<>
date_time variant::get<date_time>(void)
const;
627 template<>
tsa::string variant::get<string>(void)
const;
628 template<>
std::string variant::get<std::string>(void)
const;
629 template<>
tsa::object* variant::get<tsa::object*>(void)
const;
630 template<>
void* variant::get<void*>(void)
const;
633 template<>
double variant::to<double>(void)
const;
634 template<>
float variant::to<float>(void)
const;
635 template<>
int variant::to<int>(void)
const;
636 template<> int64_t variant::to<int64_t>(void)
const;
637 template<> uint64_t variant::to<uint64_t>(void)
const;
638 template<>
unsigned variant::to<unsigned>(void)
const;
639 template<>
bool variant::to<bool>(void)
const;
640 template<>
date variant::to<date>(void)
const;
641 template<>
date_time variant::to<date_time>(void)
const;
642 template<>
std::string variant::to<std::string>(void)
const;
643 template<>
tsa::object* variant::to<tsa::object*>(void)
const;
644 template<>
void* variant::to<void*>(void)
const;
647 std::ostream& operator<< (std::ostream& stream,
const variant& var);
701 operator float(
void)
const {
return to<float>(); }
704 operator unsigned(
void)
const {
return to<unsigned>(); }
707 operator double(
void)
const {
return to<double>(); }
710 operator int(
void)
const {
return to<int>(); }
713 operator int64_t (
void)
const {
return to<int64_t>(); }
716 operator uint64_t (
void)
const {
return to<uint64_t>(); }
719 operator bool(
void)
const {
return to<bool>(); }
722 operator date (
void)
const {
return to<date>(); }
725 operator date_time(
void)
const {
return to<date_time>(); }
735 class variant_vector :
public std::vector<variant>{
738 variant_vector(
void);
739 ~variant_vector(
void);
740 const variant& operator[](
size_t)
const;
744 bool is_equal(
const variant_vector&)
const;
auto_cast_variant(const date_time &val)
Constructor. Type member is initialized to type_t::datetime and value to val.
Definition: TSAVariant.h:662
auto_cast_variant(float val)
Constructor. Type member is initialized to type_t::float32 and value to val.
Definition: TSAVariant.h:686
Namespace for the 'Trading System API' library.
Definition: original1.TSA3Core.cpp:20
auto_cast_variant(const tsa::string &val)
Constructor. Type member is initialized to string and value to val.
Definition: TSAVariant.h:689
auto_cast_variant(const char *val)
Constructor. Type member is initialized to type_t::string and value to val.
Definition: TSAVariant.h:695
auto_cast_variant(const std::string &val)
Constructor. Type member is initialized to type_t::string and value to val.
Definition: TSAVariant.h:692
Definition: TSAVariant.h:656
auto_cast_variant(const date &val)
Constructor. Type member is initialized to type_t::date and value to val.
Definition: TSAVariant.h:665
auto_cast_variant(uint64_t val)
Constructor. Type member is initialized to type_t::int64 and value to val. (value will be signed) ...
Definition: TSAVariant.h:677
variant objects can represent values of different types.
Definition: TSAVariant.h:140
_value_types_type
Data type enumeration used throughout the library. Intended to be used via type_t.
Definition: TSATypeDef.h:166
Class tsa::exception used by most classes of the Trading System API library. The class inherits from ...
Definition: TSAError.h:37
auto_cast_variant(char val)
Constructor. Type member is initialized to type_t::string and value to val.
Definition: TSAVariant.h:698
Parent class for many library classes.
Definition: TSATypeDef.h:462
A date of the Gregorian calendar.
Definition: TSATime.h:119
auto_cast_variant(bool val)
Constructor. Type member is initialized to type_t::boolean and value to val.
Definition: TSAVariant.h:680
sref< bool > operator==(numeric_series_cref a, numeric_series_cref b)
comparison.
Definition: TSADSLBase.cpp:130
auto_cast_variant(int val)
Constructor. Type member is initialized to type_t::int32 and value to val.
Definition: TSAVariant.h:671
auto_cast_variant(double val)
Constructor. Type member is initialized to type_t::float64 and value to val.
Definition: TSAVariant.h:668
auto_cast_variant(int64_t val)
Constructor. Type member is initialized to type_t::int64 and value to val.
Definition: TSAVariant.h:674
Class representing a gregorian-date and time-of-day combination. The time component has microsecond r...
Definition: TSATime.h:428
auto_cast_variant(unsigned val)
Constructor. Type member is initialized to type_t::uint32 and value to val.
Definition: TSAVariant.h:683