14 #ifndef TSA_SERIES_TEMPLATE2__INCLUDED 15 #define TSA_SERIES_TEMPLATE2__INCLUDED 19 #include <initializer_list> 21 #include "TSATypeDef.h" 22 #include "TSAVariant.h" 23 #include "TSAString.h" 25 #include "TSASimBaseSeries.h" 26 #include "TSASeriesProxy.h" 27 #include "TSASeriesImp.h" 28 #include "TSAStrategyPtr.h" 38 class in_stream_adaptor;
55 class functor_parent_base;
58 template<
typename TYPE>
class series_cref;
69 functor::functor_parent_base* m_functor_ptr =
nullptr;
70 size_t m_functor_output_pos = 0;
71 strategy* m_strategy_ptr;
73 managed_series* m_managed_series_ptr;
75 date_time m_timestamp_of_current_value;
77 void verify_init()
const;
81 void copy_members(
const series_core&);
82 void push_front(
const variant&,
const date_time&);
83 const date_time& most_recent_timestamp(
void)
const;
86 series_core(
size_t capacity,
type_t _dt);
87 explicit series_core(
type_t);
89 series_core(
const series_core&);
90 series_core(
const series_core*);
91 bool is_init(
void)
const;
93 virtual ~series_core(
void);
95 void verify_size(
size_t)
const;
96 bool size_ok(
size_t)
const;
97 size_t get_required_size(
void)
const;
99 size_t Size(
void)
const;
100 const variant& at(
size_t idx)
const;
101 const variant& at__noexcept(
size_t idx)
const;
103 void* data(
void)
const;
104 const variant& operator()(
void)
const;
106 const variant& operator[](
size_t idx)
const;
108 functor::functor_parent_base* functor_ptr(
void)
const;
109 size_t functor_output_pos(
void)
const;
120 virtual ~series_template_base(
void) { ; }
121 virtual variant at(
size_t)
const = 0;
122 virtual bool size_ok(
size_t)
const = 0;
130 template<
typename T>
class series_cref;
186 m_h_lines.push_back({ c, y_value, weight });
201 const std::vector<tsa::h_line>&
pane_h_lines(
void)
const {
return m_h_lines; }
208 m_h_lines = other.m_h_lines;
209 m_pane_y_max = other.m_pane_y_max;
210 m_pane_y_min = other.m_pane_y_min;
211 m_show_grid = other.m_show_grid;
212 m_dotted_grid = other.m_dotted_grid;
213 m_grid_color = other.m_grid_color;
214 m_auto_pane = other.m_auto_pane;
217 mutable std::vector<tsa::h_line> m_h_lines;
237 template<
typename T =
double>
238 class dll_export series
239 :
public series_template_base,
241 tsa_declare_testable;
244 static size_t m_default_capacity;
252 m_default_capacity = new_capacity;
253 if (m_default_capacity == 0) { m_default_capacity = 1; }
258 series_imp<T>* m_series_imp_ptr =
nullptr;
260 bool m_is_owner =
false;
261 bool m_is_nonexistant_auto_series =
false;
262 bool m_was_assigned_in_DSP =
false;
263 functor::functor_parent_base* m_functor_ptr =
nullptr;
304 std::vector<tsa::variant> adj_periods = periods;
305 adj_periods.resize(4,
variant());
306 tsa_assert(adj_periods.size() == 4);
308 pi.
period(adj_periods[0], adj_periods[1], adj_periods[2], adj_periods[3]);
316 const std::string& name(
void)
const {
return m_auto_series_name; }
318 void set_owning_functor_ptr(functor::functor_parent_base* ptr) { m_functor_ptr = ptr; }
319 functor::functor_parent_base* owning_functor_ptr(
void)
const {
return m_functor_ptr; }
322 series(
const series& other,
size_t shift_);
329 series(
const series_core&);
330 void init_as_auto_series(
const series_core&,
const std::string& field_name);
338 m_auto_series_name = auto_series_name;
339 m_is_nonexistant_auto_series =
true;
343 series(
const std::initializer_list<T>& init_list) : series(
nullptr,
false){
344 for (
auto i = std::rbegin(init_list); i != std::rend(init_list); i++){
352 series(
void) : series(nullptr, false) { ; }
354 series(functor::functor_parent_base* ftor_ptr,
bool called_by_series_ref_constr =
false);
366 explicit series(
size_t capacity);
371 virtual ~series(
void);
373 type_t type(
void)
const {
return m_core.type(); }
385 void reserve(
size_t capacity);
392 size_t capacity(
void)
const;
398 bool is_managed(
void)
const;
411 T get_at(
size_t position)
const;
412 virtual variant at(
size_t pos)
const {
return variant(get_at(pos)); }
413 T get_at_no_exc(
size_t position)
const;
420 T operator[](
size_t position)
const;
439 void _internal_push(T);
446 const T* data(
void)
const;
447 T* data_non_const(
void);
453 size_t size(
void)
const;
464 const series<T> shift(
size_t _shift_by)
const;
474 void set_size(
size_t new_size);
481 bool is_equal(
const series<T>& other)
const;
488 void verify_size(
size_t reqired_size)
const;
495 virtual bool size_ok(
size_t _required_size)
const;
501 bool empty(
void)
const {
return size() == 0; }
512 void fill_to_capacity(T value);
521 void copy(
const series& other,
size_t max_num_values = ~(
size_t)0);
556 type_t value_type(
void)
const;
557 void raise_type_mismatch(
void);
560 void CopyTo(std::vector<T>&,
size_t);
569 void print(std::ostream& stream,
size_t max = 1000);
578 void print_v(std::ostream& s,
size_t max = 1000);
580 class const_iterator;
582 class iterator :
public std::iterator
583 < std::random_access_iterator_tag, T > {
586 friend class const_iterator;
588 iterator() : m_ptr(NULL) {}
589 iterator(T* p) : m_ptr(p) {}
590 iterator(
const iterator& other) : m_ptr(other.m_ptr) {}
591 const iterator& operator= (
const iterator& other) { m_ptr = other.m_ptr;
return other; }
593 iterator& operator++() { m_ptr++;
return *
this; }
594 iterator operator++ (
int) { iterator tmp(*
this); ++(*this);
return tmp; }
595 iterator& operator--() { m_ptr--;
return *
this; }
596 iterator operator-- (
int) { iterator tmp(*
this); --(*this);
return tmp; }
598 void operator+= (
const std::size_t& n) { m_ptr += n; }
599 void operator+= (
const iterator& other) { m_ptr += other.m_ptr; }
600 iterator
operator+ (
const std::size_t& n) { iterator tmp(*
this); tmp += n;
return tmp; }
601 iterator
operator+ (
const iterator& other) { iterator tmp(*
this); tmp += other;
return tmp; }
603 void operator-= (
const std::size_t& n) { m_ptr -= n; }
604 void operator-= (
const iterator& other) { m_ptr -= other.m_ptr; }
605 iterator
operator- (
const std::size_t& n) { iterator tmp(*
this); tmp -= n;
return tmp; }
606 std::size_t
operator- (
const iterator& other) {
return m_ptr - other.m_ptr; }
608 bool operator< (
const iterator& other) {
return (m_ptr - other.m_ptr) < 0; }
609 bool operator<= (
const iterator& other) {
return (m_ptr - other.m_ptr) <= 0; }
610 bool operator> (
const iterator& other) {
return (m_ptr - other.m_ptr) > 0; }
611 bool operator>= (
const iterator& other) {
return (m_ptr - other.m_ptr) >= 0; }
612 bool operator== (
const iterator& other) {
return m_ptr == other.m_ptr; }
613 bool operator!= (
const iterator& other) {
return m_ptr != other.m_ptr; }
615 T& operator[](
const int& n) {
return *(m_ptr + n); }
617 T* operator->() {
return m_ptr; }
621 class const_iterator :
public std::iterator
622 < std::random_access_iterator_tag, T > {
626 const_iterator() : m_ptr(NULL) {}
627 const_iterator(
const T* p) : m_ptr(p) {}
628 const_iterator(
const iterator& other) : m_ptr
630 const_iterator(
const const_iterator& other) : m_ptr
632 const const_iterator& operator= (
const const_iterator&
634 m_ptr = other.m_ptr;
return other;
636 const const_iterator& operator= (
const iterator& other) { m_ptr = other.p_;
return other; }
638 const_iterator& operator++() { m_ptr++;
return *
this; }
639 const_iterator operator++ (
int) { const_iterator tmp(*
this); ++(*this);
return tmp; }
640 const_iterator& operator--() { m_ptr--;
return *
this; }
641 const_iterator operator-- (
int) { const_iterator tmp(*
this); --(*this);
return tmp; }
643 void operator+= (
const std::size_t& n) { m_ptr += n; }
644 void operator+= (
const const_iterator& other) { m_ptr += other.m_ptr; }
645 const_iterator
operator+ (
const std::size_t& n)
647 const_iterator tmp(*
this); tmp += n;
return tmp;
649 const_iterator
operator+ (
const const_iterator& other)
651 const_iterator tmp(*
this); tmp += other;
return tmp;
654 void operator-= (
const std::size_t& n) { m_ptr -= n; }
655 void operator-= (
const const_iterator& other) { m_ptr -= other.m_ptr; }
656 const_iterator
operator- (
const std::size_t& n)
658 const_iterator tmp(*
this); tmp -= n;
return tmp;
660 std::size_t
operator- (
const const_iterator& other)
662 return m_ptr - other.m_ptr;
665 bool operator< (
const const_iterator& other)
const {
return (m_ptr - other.m_ptr) < 0; }
666 bool operator<= (
const const_iterator& other)
const {
return (m_ptr - other.m_ptr) <= 0; }
667 bool operator> (
const const_iterator& other)
const {
return (m_ptr - other.m_ptr) > 0; }
668 bool operator>= (
const const_iterator& other)
const {
return (m_ptr - other.m_ptr) >= 0; }
669 bool operator== (
const const_iterator& other)
const {
return m_ptr == other.m_ptr; }
670 bool operator!= (
const const_iterator& other)
const {
return m_ptr != other.m_ptr; }
672 const T& operator[](
const int& n)
const {
return *(m_ptr + n); }
673 const T&
operator*()
const {
return *m_ptr; }
674 const T* operator->()
const {
return m_ptr; }
678 iterator begin() {
return iterator(data_non_const()); }
679 iterator end() {
return iterator(data_non_const() + size()); }
680 const_iterator cbegin()
const {
return const_iterator(data()); }
681 const_iterator cend()
const {
return const_iterator(data() + size()); }
692 m_auto_series_name = name;
702 template<
typename T> std::ostream& operator<<(std::ostream& s, series<T>& ser) {
722 series<T>::series(functor::functor_parent_base* ftor_ptr,
bool called_by_series_ref_constr)
723 : m_core(value_type()), m_shift(0),
724 m_is_owner(
true), m_series_imp_ptr(
nullptr) {
725 set_owning_functor_ptr(ftor_ptr);
736 m_series_imp_ptr =
new series_imp<T>();
737 m_series_imp_ptr->init_with_capacity(
739 tsa_assert(m_series_imp_ptr);
740 tsa_assert(!is_managed());
746 m_core(other.m_core),
747 m_series_imp_ptr(nullptr),
750 tsa_assert(m_core.is_init());
752 throw exception(
class_name(),
"Series<T> assignment operator can only be used as part of strategy::on_prepare().",
SLOC);
758 "Do not use series copy constructor for 'unmanaged' series. " 759 "Use copy member function instead for deep copy.",
SLOC);
761 m_series_imp_ptr = other.m_series_imp_ptr;
768 auto strat_state = strategy_context::state();
771 " of strategy::on_prepare()",
SLOC);
773 if (m_was_assigned_in_DSP){
775 "Cannot assign a value to same series<T> object twice in the definition of strategy::on_prepare() (DSL)",
SLOC);
777 m_was_assigned_in_DSP =
true;
781 m_core.copy_members(other.m_core);
785 tsa_assert(!m_core.is_init());
786 tsa_assert(m_series_imp_ptr);
789 delete m_series_imp_ptr;
791 m_series_imp_ptr = other.m_series_imp_ptr;
792 tsa_assert(m_series_imp_ptr);
793 m_functor_ptr = other.m_functor_ptr;
794 tsa_assert(m_series_imp_ptr !=
nullptr);
795 tsa_assert(!m_is_owner);
798 tsa_assert(!m_is_owner);
799 m_series_imp_ptr = other.m_series_imp_ptr;
800 tsa_assert(m_series_imp_ptr);
801 m_functor_ptr = other.m_functor_ptr;
802 tsa_assert(m_series_imp_ptr !=
nullptr);
803 tsa_assert(!m_is_owner);
805 m_auto_series_name = other.m_auto_series_name;
817 m_series_imp_ptr =
new series_imp<T>();
818 m_series_imp_ptr->reserve(capacity);
820 tsa_assert(m_series_imp_ptr);
826 m_core(_ser.m_core), m_series_imp_ptr(
nullptr),
829 if (_ser.m_shift != 0)
834 m_series_imp_ptr = _ser.m_series_imp_ptr;
837 m_shift = _shift + _ser.m_shift;
842 if (m_core.is_init()) {
845 if (!m_series_imp_ptr) {
849 tsa_assert(m_series_imp_ptr);
853 m_series_imp_ptr->reserve(_capacity);
854 tsa_assert(m_series_imp_ptr->capacity() >= _capacity);
859 if (m_core.is_init())
863 if (!m_series_imp_ptr)
871 return m_series_imp_ptr->capacity();
876 size_t sz = _other.
size();
877 m_series_imp_ptr->copy(*_other.m_series_imp_ptr, _max_num_values);
878 tsa_assert(
size() == _other.
size());
884 if (sz != _other.
size())
888 const T* data_a = _other.
data();
889 const T* data_b =
data();
890 return std::equal(data_a, data_a + sz, data_b);
899 " of strategy::on_prepare()",
SLOC);
902 m_core.copy_members(other.
series_ptr()->m_core);
906 tsa_assert(!m_core.is_init());
907 tsa_assert(m_series_imp_ptr);
910 delete m_series_imp_ptr;
912 m_series_imp_ptr = other.
series_ptr()->m_series_imp_ptr;
913 tsa_assert(m_series_imp_ptr);
914 m_functor_ptr = other.
series_ptr()->m_functor_ptr;
915 tsa_assert(m_series_imp_ptr !=
nullptr);
916 tsa_assert(!m_is_owner);
919 tsa_assert(!m_is_owner);
920 m_series_imp_ptr = other.
series_ptr()->m_series_imp_ptr;
921 tsa_assert(m_series_imp_ptr);
922 m_functor_ptr = other.
series_ptr()->m_functor_ptr;
923 tsa_assert(m_series_imp_ptr !=
nullptr);
924 tsa_assert(!m_is_owner);
932 "series type mismatch - check series-type matches parameter type",
SLOC);
938 m_series_imp_ptr(nullptr),
947 raise_type_mismatch();
955 if (m_series_imp_ptr){
956 delete m_series_imp_ptr;
957 m_series_imp_ptr =
nullptr;
959 if (!is_numeric(core.type()))
964 if (!core.is_init()) {
966 ((series_core&)core).Init();
967 ((series_core&)core).SetSource(field_name);
969 tsa_assert(core.is_init());
970 if (core.name() != field_name) {
972 "field name mismatch: " + core.name() +
" vs " + field_name,
SLOC);
974 m_is_nonexistant_auto_series =
false;
975 m_core.copy_members(core);
980 raise_type_mismatch();
987 if (m_series_imp_ptr) {
989 delete m_series_imp_ptr;
996 return !m_series_imp_ptr;
1001 if (!m_series_imp_ptr)
1005 m_series_imp_ptr->clear();
1006 tsa_assert(m_series_imp_ptr->size() == 0);
1009 template<
typename T>
1011 if (!m_series_imp_ptr) {
1019 m_series_imp_ptr->fill(_value);
1023 template<
typename T>
1025 if (!m_series_imp_ptr) {
1034 m_series_imp_ptr->reset_size(_new_size);
1038 template<
typename T>
1044 if (m_series_imp_ptr && m_is_owner) {
1045 m_series_imp_ptr->push(_v);
1052 template<
typename T>
1058 if (m_series_imp_ptr) {
1062 m_core.push_front(_v);
1066 template<
typename T>
1068 if (m_series_imp_ptr) {
1069 m_series_imp_ptr->push(_v);
1076 template<
typename T>
1078 if (m_series_imp_ptr) {
1079 tsa_assert(m_shift == 0);
1080 return m_series_imp_ptr->at(_idx);
1083 return m_core.at(_idx + m_shift).get<T>();
1087 template<
typename T>
1089 if (m_series_imp_ptr) {
1093 return (T)m_core.at__noexcept(_idx + m_shift);
1097 template<
typename T>
1099 if (m_series_imp_ptr) {
1100 tsa_assert(m_series_imp_ptr->size() >= m_shift);
1101 return ((T*)m_series_imp_ptr->data__as_void_ptr()) + m_shift;
1104 return (T*)m_core.data() + m_shift;
1108 template<
typename T>
1110 if (m_series_imp_ptr) {
1115 return (T*)m_series_imp_ptr->data__as_void_ptr();
1118 return (T*)m_core.data() + m_shift;
1122 template<
typename T>
1124 if (m_series_imp_ptr) {
1125 if (m_is_nonexistant_auto_series) {
1126 throw exception(
class_name(),
"Series not intitialized. Check if data-source has this field: " 1127 + m_auto_series_name,
SLOC);
1129 return m_series_imp_ptr->at(_idx + m_shift);
1132 const variant& v = m_core.at(_idx + m_shift);
1137 template<
typename T>
1139 if (m_series_imp_ptr) {
1140 tsa_assert(m_series_imp_ptr->size() >= m_shift);
1141 return m_series_imp_ptr->size() - m_shift;
1144 size_t core_sz = m_core.Size();
1145 if (core_sz < m_shift)
1149 else {
return core_sz - m_shift; }
1153 template<
typename T>
1156 tsa_assert(
size() >= _shift_by);
1160 template<
typename T>
1162 if (_required_size == 0)
1164 if (m_series_imp_ptr) {
1165 if (m_series_imp_ptr->size() < _required_size) {
1168 ((
series<T>*)
this)->reserve(_required_size);
1169 tsa_assert(
capacity() == _required_size);
1175 m_core.verify_size(_required_size + m_shift);
1179 template<
typename T>
1181 if (m_series_imp_ptr) {
1182 if (m_series_imp_ptr->size() < _required_size) {
1185 ((
series<T>*)
this)->reserve(_required_size);
1186 tsa_assert(
capacity() == _required_size);
1193 return m_core.size_ok(_required_size + m_shift);
1197 template<
typename T>
1203 for (
size_t c = 0; c < _size; c++) {
1206 tsa_assert(_vec.size() == _size);
1209 template<
typename T>
1211 if (
size() == 0) { _s <<
"[]";
return; }
1213 for (
size_t c = 0; c < _max; c++) {
1214 if (c <
size() && c < _max) {
1216 if (c != (
size() - 1) && c != (_max - 1))
1225 template<
typename T>
1227 if (
size() == 0) {
return; }
1228 for (
size_t c = 0; c < _max; c++) {
1229 if (c <
size() && c < _max) {
1230 _s <<
"[" << c <<
"]:" <<
get_at(c) << std::endl;
1235 template<
typename T>
1238 "data type not supported by template",
SLOC);
1241 template<
typename T>
1248 template<
typename T>
1255 template<
typename T>
1257 return get_at(0) > _threshold
1258 &&
get_at(1) <= _threshold;
1261 template<
typename T>
1263 return get_at(0) < _threshold
1264 &&
get_at(1) >= _threshold;
1277 template<
typename T =
double>
1280 const series<T>* m_series_ptr =
nullptr;
1286 m_series_ptr = &other;
1290 if (other.m_series_ptr ==
nullptr) {
1293 m_series_ptr = other.m_series_ptr;
1297 strategy* strat_ptr = strategy_context::strategy_ptr();
1300 " of strategy::on_prepare()",
SLOC);
1301 m_series_ptr = other.m_series_ptr;
1310 void push(T) =
delete;
1314 operator const series<T>& (void) { tsa_assert(m_series_ptr);
return *m_series_ptr; }
1317 tsa_assert(m_series_ptr !=
nullptr);
1318 return m_series_ptr->operator[](pos);
1322 return SHIFT(*
this, shift_by);
1326 tsa_assert(m_series_ptr !=
nullptr);
1327 return m_series_ptr->
data();
1331 tsa_assert(m_series_ptr !=
nullptr);
1336 tsa_assert(m_series_ptr !=
nullptr);
1337 return m_series_ptr->
size_ok(sz);
1341 tsa_assert(m_series_ptr !=
nullptr);
1342 return m_series_ptr->
size();
1352 m_series_ptr->m_h_lines.push_back(
tsa::h_line(c, y_value, weight));
1355 void pane_y_max(
double max) { m_series_ptr->m_pane_y_max = max; }
1357 void pane_y_min(
double min) { m_series_ptr->m_pane_y_min = min; }
1367 const std::vector<tsa::h_line>&
pane_h_lines(
void)
const {
return m_series_ptr->m_h_lines; }
1375 m_series_ptr->
name(name);
1402 std::vector<tsa::variant> adj_periods = periods;
1403 adj_periods.resize(4,
variant());
1404 tsa_assert(adj_periods.size() == 4);
1406 pi.
period(adj_periods[0], adj_periods[1], adj_periods[2], adj_periods[3]);
1415 template<
typename T>
1418 template<
typename T>
1431 template<
typename T =
double>
1433 std::vector<series_cref<T>> m_series_refs;
1439 m_series_refs = { ser };
1443 m_series_refs = { a, b };
1447 m_series_refs = { a, b, c };
1451 m_series_refs.push_back(ser);
1454 size_t size(
void)
const {
return m_series_refs.size(); }
1457 return *(m_series_refs[pos].series_ptr());
1466 size_t position=0;
bool found =
false;
1467 for(
const auto& ref : m_series_refs){
1468 if (ref.series_ptr()->name() == name){
1469 found =
true;
break;
1479 return m_series_refs[position];
1483 for (
size_t c(0); c < m_series_refs.size();c++){
1484 if (m_series_refs[c].series_ptr()->name() == name)
1486 return m_series_refs[c];
1510 const series_template_base* m_series_ptr =
nullptr;
1516 m_series_ptr = other.m_series_ptr;
1529 m_series_ptr = (
const series_template_base*)(&other);
1533 m_series_ptr = (
const series_template_base*)(&other);
1537 m_series_ptr = (
const series_template_base*)(&other);
1541 m_series_ptr = (
const series_template_base*)(&other);
1545 m_series_ptr = (
const series_template_base*)(&other);
1549 m_series_ptr = (
const series_template_base*)(&other);
1555 m_series_ptr = (
const series_template_base*)(other.
series_ptr());
1559 m_series_ptr = (
const series_template_base*)(other.
series_ptr());
1563 m_series_ptr = (
const series_template_base*)(other.
series_ptr());
1567 m_series_ptr = (
const series_template_base*)(other.
series_ptr());
1571 m_series_ptr = (
const series_template_base*)(other.
series_ptr());
1575 m_series_ptr = (
const series_template_base*)(other.
series_ptr());
1589 const series_template_base*
get(void)
const {
1590 return m_series_ptr;
1594 tsa_assert(m_series_ptr !=
nullptr);
1595 return m_series_ptr->size_ok(sz);
1609 const series_template_base* m_series_ptr =
nullptr;
1622 template<
typename T>
1624 m_series_ptr = (
const series_template_base*)(&other);
1627 template<
typename T>
1632 m_series_ptr = (
const series_template_base*)other.
series_ptr();
1642 const series_template_base*
get(void)
const {
return m_series_ptr; }
1645 return m_series_ptr->at(pos).to_bool();
1649 tsa_assert(m_series_ptr !=
nullptr);
1650 return m_series_ptr->size_ok(sz);
1664 const series_template_base* m_series_ptr =
nullptr;
1670 m_series_ptr = other.m_series_ptr;
1674 m_series_ptr = other.
get();
1678 m_series_ptr = (
const series_template_base*)(&other);
1681 const series_template_base*
get(void)
const {
return m_series_ptr; }
1684 return (
bool)m_series_ptr->at(pos);
1688 tsa_assert(m_series_ptr !=
nullptr);
1689 return m_series_ptr->size_ok(sz);
1703 const series_template_base* m_series_ptr =
nullptr;
1709 m_series_ptr = other.m_series_ptr;
1713 m_series_ptr = (
const series_template_base*)(&other);
1716 const series_template_base*
get(void)
const {
return m_series_ptr; }
1719 return m_series_ptr->at(pos).to_string();
1723 tsa_assert(m_series_ptr !=
nullptr);
1724 return m_series_ptr->size_ok(sz);
1738 const series_template_base* m_series_ptr =
nullptr;
1744 m_series_ptr = other.m_series_ptr;
1748 m_series_ptr = (
const series_template_base*)(&other);
1751 const series_template_base*
get(void)
const {
return m_series_ptr; }
1754 return m_series_ptr->at(pos).to_date();
1758 tsa_assert(m_series_ptr !=
nullptr);
1759 return m_series_ptr->size_ok(sz);
1773 const series_template_base* m_series_ptr =
nullptr;
1779 m_series_ptr = other.m_series_ptr;
1783 m_series_ptr = (
const series_template_base*)(&other);
1786 const series_template_base*
get(void)
const {
return m_series_ptr; }
1789 return m_series_ptr->at(pos).to_datetime();
1793 tsa_assert(m_series_ptr !=
nullptr);
1794 return m_series_ptr->size_ok(sz);
1808 const series_template_base* m_series_ptr =
nullptr;
1814 m_series_ptr = other.m_series_ptr;
1818 m_series_ptr = other_ptr;
1821 template<
typename T>
1823 m_series_ptr = (
const series_template_base*)(&other);
1831 const series_template_base*
get_ptr(
void)
const {
return m_series_ptr; }
1838 m_series_ptr = (
const series_template_base*)other.
series_ptr();
1842 return variant(m_series_ptr->at(pos));
1846 tsa_assert(m_series_ptr !=
nullptr);
1847 return m_series_ptr->size_ok(sz);
1866 std::vector<any_series_cref> m_series_refs;
1872 m_series_refs = other.m_series_refs;
1876 m_series_refs = { ser };
1880 m_series_refs = { a, b };
1884 m_series_refs = { a, b, c };
1888 m_series_refs = { a, b, c, d };
1895 for (
auto& r : m_series_refs) {
1896 sz_ok &= r.size_ok(sz);
1901 size_t size(
void)
const {
return m_series_refs.size(); }
1904 bool numeric =
true;
1905 for (
auto& s : m_series_refs) {
1906 numeric &= s.is_numeric();
1912 return m_series_refs[pos];
1916 m_series_refs.push_back(new_item);
1920 size_t sz = m_series_refs.size();
1921 if (arr.size() != sz) {
1924 for (
size_t c = 0; c < sz; c++) {
1925 arr[c] = m_series_refs[c][0];
size_t element_count(void) const
Definition: TSASeriesTemplate.h:1891
void push(T)
Adds a new value to the front of the series. The new item will be accessible at position 0...
Definition: TSASeriesTemplate.h:1039
auto_cast_bool_series_cref(const series< T > &other)
Definition: TSASeriesTemplate.h:1623
A datetime series cref.
Definition: TSASeriesTemplate.h:1772
void period(const tsa::variant &period0, const tsa::variant &period1=variant(), const tsa::variant &period2=variant(), const tsa::variant &period3=variant())
... (-1) for dynamic
Definition: TSASeriesTemplate.cpp:52
numeric_series_cref(const series< uint64_t > &other)
Definition: TSASeriesTemplate.h:1548
numeric_series_cref(const series_cref< int64_t > &other)
Definition: TSASeriesTemplate.h:1570
bool_series_cref(const bool_series_cref &other)
Definition: TSASeriesTemplate.h:1669
T operator[](size_t position) const
Returns the value at given position.
Definition: TSASeriesTemplate.h:1123
const series< T > shift_by(const series< T > &in_series, size_t shift_by)
Returns a series that is a 'shifted' version of the given in_series argument. The returned series wil...
Definition: TSAFunctions.h:99
void fill_to_capacity(T value)
Clears the series and then fills it to capacity with given value.
Definition: TSASeriesTemplate.h:1010
void fetch_variants(std::vector< variant > &arr)
Definition: TSASeriesTemplate.h:1919
tsa::date operator[](size_t pos) const
Definition: TSASeriesTemplate.h:1753
bool size_ok(size_t sz) const
Definition: TSASeriesTemplate.h:1687
any_series_cref(const any_series_cref &other)
Definition: TSASeriesTemplate.h:1813
class series is a template class representing a sequence of values.
Definition: TSASeriesProxy.h:24
void verify_size(size_t sz) const
Definition: TSASeriesTemplate.h:1330
Namespace for the 'Trading System API' library.
Definition: original1.TSA3Core.cpp:20
datetime_series_cref(const datetime_series_cref &other)
Definition: TSASeriesTemplate.h:1778
T get(void) const
Returns the objects data. The object's type must match the template typename. If not, an exception is thrown.
static const color auto_color
Definition: TSATypeDef.h:1099
sref< double > operator*(numeric_series_cref a, numeric_series_cref b)
Multiplies a by b.
Definition: TSADSLBase.cpp:42
bool size_ok(size_t sz) const
Definition: TSASeriesTemplate.h:1593
void verify_non_zero(size_t value)
Definition: TSASeriesTemplate.cpp:29
container(void)
Definition: TSASeriesTemplate.h:1869
void pane_y_min(double min)
Definition: TSASeriesTemplate.h:1357
void push(any_series_cref new_item)
Definition: TSASeriesTemplate.h:1915
bool size_ok(size_t sz) const
Definition: TSASeriesTemplate.h:1757
container(any_series_cref a, any_series_cref b)
Definition: TSASeriesTemplate.h:1879
const any_series_cref & operator[](size_t pos) const
Definition: TSASeriesTemplate.h:1911
numeric_series_cref(const series< int > &other)
Definition: TSASeriesTemplate.h:1536
series_tuple(const series_cref< T > &ser)
Definition: TSASeriesTemplate.h:1438
virtual bool size_ok(size_t _required_size) const
Size ok.
Definition: TSASeriesTemplate.h:1180
string_series_cref(const series< std::string > &other)
Definition: TSASeriesTemplate.h:1712
container(any_series_cref ser)
Definition: TSASeriesTemplate.h:1875
date_series_cref(const date_series_cref &other)
Definition: TSASeriesTemplate.h:1743
any_series_cref(const series_cref< T > &other)
Definition: TSASeriesTemplate.h:1834
void copy(const series &other, size_t max_num_values=~(size_t) 0)
Copies num_values from the other series, starting at position 0. If num_values is 0...
Definition: TSASeriesTemplate.h:875
const series_template_base * get(void) const
Definition: TSASeriesTemplate.h:1642
bool size_ok(size_t sz)
Definition: TSASeriesTemplate.h:1845
container(any_series_cref a, any_series_cref b, any_series_cref c, any_series_cref d)
Definition: TSASeriesTemplate.h:1887
void pane_y_max(double max)
Definition: TSASeriesTemplate.h:1355
numeric_series_cref(const series< unsigned > &other)
Definition: TSASeriesTemplate.h:1540
T operator[](size_t pos) const
Definition: TSASeriesTemplate.h:1316
series_cref< T > operator()(size_t shift_by) const
Definition: TSASeriesTemplate.h:1321
#define SLOC
Macro to be passed as argument to Exception constructors. Contains information about the source locat...
Definition: TSAError.h:92
const variant & pane_y_max(void) const
Definition: TSASeriesTemplate.h:1369
void pane_auto_pane(bool b)
Definition: TSASeriesTemplate.h:1365
numeric_series_cref(const numeric_series_cref &other)
Definition: TSASeriesTemplate.h:1515
strategy_state_type
Values that represent strategy state ts.
Definition: TSATypeDef.h:84
void pane_h_line(const tsa::color &c, double y_value, int weight=1)
Definition: TSASeriesTemplate.h:1351
const tsa::plot_info & plot_info(void) const
Definition: TSASeriesTemplate.h:271
datetime_series_cref(const series< tsa::date_time > &other)
Definition: TSASeriesTemplate.h:1782
plot_type
Values that represent plot types.
Definition: TSASeriesTemplate.h:149
void reserve(size_t capacity)
Sets the serie's capacity to at least as high as the given capacity argument. It is not possible to s...
Definition: TSASeriesTemplate.h:841
void verify_size(size_t reqired_size) const
Compares the series size to required_size. If the series size is shorter then a lookback_exception is...
Definition: TSASeriesTemplate.h:1161
bool is_owner(void) const
Query if this object is owner.
Definition: TSASeriesTemplate.h:404
type_t type(void) const
Definition: TSASeriesTemplate.h:1308
void print(std::ostream &stream, size_t max=1000)
Prints the series to given stream. At most max items will be printed. The leftmost value printed corr...
Definition: TSASeriesTemplate.h:1210
const variant & pane_y_min(void) const
Definition: TSASeriesTemplate.h:1371
bool operator[](size_t pos) const
Definition: TSASeriesTemplate.h:1644
The series tuple.
Definition: TSASeriesTemplate.h:131
const series_cref< T > & plot_as(const std::string &name, const std::vector< tsa::variant > &periods, plot_type type=plot_type::line, tsa::color clr=tsa::color::auto_color, unsigned weight=2) const
Definition: TSASeriesTemplate.h:1398
A numeric series cref.
Definition: TSASeriesTemplate.h:1509
numeric_series_cref(const series_cref< unsigned > &other)
Definition: TSASeriesTemplate.h:1566
bool_series_cref(const auto_cast_bool_series_cref &other)
Definition: TSASeriesTemplate.h:1673
sref< T > SHIFT(const series< T > &series, size_t shift_by)
Shifts the series by shift_by positions. This is the equivalent of using series<T>::operator().
Definition: TSADSLBase.h:1130
variant operator[](size_t pos)
Definition: TSASeriesTemplate.h:1841
size_t size(void) const
Definition: TSASeriesTemplate.h:1340
bool all_numeric(void)
Definition: TSASeriesTemplate.h:1903
sref< bool > operator>(numeric_series_cref a, numeric_series_cref b)
comparison.
Definition: TSADSLBase.cpp:104
std::string operator[](size_t pos) const
Definition: TSASeriesTemplate.h:1718
std::string name(void) const
Definition: TSASeriesTemplate.h:1379
const series< T > * series_ptr(void) const
Definition: TSASeriesTemplate.h:1346
void pane_grid_color(const tsa::color &c)
Definition: TSASeriesTemplate.h:1363
const T * data(void) const
Definition: TSASeriesTemplate.h:1325
_value_types_type type_t
Defines type_t as an alias of enum _value_types_type.
Definition: TSATypeDef.h:189
numeric_series_cref(const series< int64_t > &other)
Definition: TSASeriesTemplate.h:1544
static size_t default_capacity(void)
Definition: TSASeriesTemplate.h:256
variant objects can represent values of different types.
Definition: TSAVariant.h:140
series_cref(const series< T > &other)
Definition: TSASeriesTemplate.h:1285
numeric_series_cref(const series< float > &other)
Definition: TSASeriesTemplate.h:1532
const char * class_name(void) const
Returns the class name as returned by the 'Real Time Type Information' (RTTI) mechanism.
Definition: TSATypeDef.cpp:60
container(any_series_cref a, any_series_cref b, any_series_cref c)
Definition: TSASeriesTemplate.h:1883
_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
void plot_info(const plot_info &pi) const
Definition: TSASeriesTemplate.h:269
any_series_cref(const series< T > &other)
Definition: TSASeriesTemplate.h:1822
bool empty(void) const
Returns true if the series is empty.
Definition: TSASeriesTemplate.h:501
const T * data(void) const
Returns a pointer to the series data. The array length can be determined by calling size()...
Definition: TSASeriesTemplate.h:1098
bool is_numeric(void) const
Definition: TSASeriesTemplate.h:1850
Exception class thrown by series when insufficient data.
Definition: TSAError.h:103
sref< double > operator+(numeric_series_cref a, numeric_series_cref b)
Adds a and b.
Definition: TSADSLBase.cpp:32
const series< T > & operator[](size_t pos) const
Definition: TSASeriesTemplate.h:1456
bool crosses_below(const series< T > &other) const
Returns true if self crossed below other on the most recent value.
Definition: TSASeriesTemplate.h:1249
void operator=(series_cref< T > &)
Definition: TSASeriesTemplate.h:896
Parent class for many library classes.
Definition: TSATypeDef.h:462
bool crosses_above(const series< T > &other) const
Returns true if self crossed above other on the most recent value.
Definition: TSASeriesTemplate.h:1242
date_series_cref(const series< tsa::date > &other)
Definition: TSASeriesTemplate.h:1747
series_cref(const series_cref< T > &other)
Definition: TSASeriesTemplate.h:1289
sref< bool > operator<=(numeric_series_cref a, numeric_series_cref b)
comparison.
Definition: TSADSLBase.cpp:91
size_t size(void) const
Definition: TSASeriesTemplate.h:1901
A date of the Gregorian calendar.
Definition: TSATime.h:119
series_cref< T > operator()(size_t position)
Definition: TSASeriesTemplate.h:1478
virtual ~series(void)
Destructor.
Definition: TSASeriesTemplate.h:986
sref< bool > operator>=(numeric_series_cref a, numeric_series_cref b)
comparison.
Definition: TSADSLBase.cpp:117
sref< bool > operator==(numeric_series_cref a, numeric_series_cref b)
comparison.
Definition: TSADSLBase.cpp:130
const series< T > shift(size_t _shift_by) const
Returns a series that is a 'shifted' version of the given in_series argument. The returned series wil...
Definition: TSASeriesTemplate.h:1154
void clear(void)
Clears the series. WARNING: This only works for 'unmanaged' series. See is_managed().
Definition: TSASeriesTemplate.h:1000
series_tuple(const series_cref< T > &a, const series_cref< T > &b, const series_cref< T > &c)
Definition: TSASeriesTemplate.h:1446
static void reset_default_capacity(size_t new_capacity)
Sets the default capacity of new series to new_capacity.
Definition: TSASeriesTemplate.h:251
A container.
Definition: TSASeriesTemplate.h:1865
numeric_series_cref(const series_cref< int > &other)
Definition: TSASeriesTemplate.h:1562
series_cref< T > & plot_as(const plot_info &pi)
Definition: TSASeriesTemplate.h:1381
bool size_ok(size_t sz) const
Definition: TSASeriesTemplate.h:1792
series_cref< T > operator()(size_t shift_by) const
Definition: TSASeriesTemplate.h:423
An automatic cast bool series cref.
Definition: TSASeriesTemplate.h:1608
const series_template_base * get_ptr(void) const
Definition: TSASeriesTemplate.h:1831
void operator=(const series_cref< T > &other)
Definition: TSASeriesTemplate.h:1296
size_t size(void) const
Returns the number of values stored in the series.
Definition: TSASeriesTemplate.h:1138
any_series_cref(const series_template_base *other_ptr)
Definition: TSASeriesTemplate.h:1817
const series_cref< T > & plot_as(const std::string &name, const tsa::variant &period=0.0, plot_type type=plot_type::line, tsa::color clr=tsa::color::auto_color, unsigned weight=2) const
Definition: TSASeriesTemplate.h:1386
Information about the plot.
Definition: TSASeriesTemplate.h:161
size_t position(const std::string &name) const
Definition: TSASeriesTemplate.h:1465
const series_cref< T > & name(const std::string &name) const
Definition: TSASeriesTemplate.h:1374
A string series cref.
Definition: TSASeriesTemplate.h:1702
numeric_series_cref(const series< double > &other)
Definition: TSASeriesTemplate.h:1528
bool operator[](size_t pos) const
Definition: TSASeriesTemplate.h:1683
string_series_cref(const string_series_cref &other)
Definition: TSASeriesTemplate.h:1708
bool size_ok(size_t sz) const
Definition: TSASeriesTemplate.h:1648
The series cref.
Definition: TSASeriesProxy.h:25
bool is_managed(void) const
Query if this object is managed.
Definition: TSASeriesTemplate.h:995
bool is_equal(const series< T > &other) const
Returns true if self has same data as other.
Definition: TSASeriesTemplate.h:882
series(const std::string &auto_series_name)
Constructor.
Definition: TSASeriesTemplate.h:337
Represents a color for use in graphics operations.
Definition: TSATypeDef.h:1041
series(void)
Default constructor.
Definition: TSASeriesTemplate.h:352
A line.
Definition: TSASeriesTemplate.h:136
void print_v(std::ostream &s, size_t max=1000)
Prints the series to given stream, one data item per line. At most max items will be printed...
Definition: TSASeriesTemplate.h:1226
size_t size(void) const
Definition: TSASeriesTemplate.h:1454
void pane_dotted_grid(bool b)
Definition: TSASeriesTemplate.h:1361
series_cref(void)
Definition: TSASeriesTemplate.h:1283
series_tuple(const series_cref< T > &a, const series_cref< T > &b)
Definition: TSASeriesTemplate.h:1442
Class strategy represents a trading or investment strategy.
Definition: TSAStrategy.h:108
numeric_series_cref(const series_cref< uint64_t > &other)
Definition: TSASeriesTemplate.h:1574
series_cref< T > operator()(const std::string &name)
Definition: TSASeriesTemplate.h:1482
bool size_ok(size_t sz) const
Definition: TSASeriesTemplate.h:1335
void pane_show_grid(bool b)
Definition: TSASeriesTemplate.h:1359
const std::vector< tsa::h_line > & pane_h_lines(void) const
Definition: TSASeriesTemplate.h:1367
bool_series_cref(const series< bool > &other)
Definition: TSASeriesTemplate.h:1677
bool size_ok(size_t sz)
Definition: TSASeriesTemplate.h:1893
bool crosses_below(const series< double > &series_a, const series< double > &series_b)
Returns true when series_a crosses below series_b.
Definition: TSAFunctionsScalar.cpp:281
numeric_series_cref(const series_cref< float > &other)
Definition: TSASeriesTemplate.h:1558
Class representing a gregorian-date and time-of-day combination. The time component has microsecond r...
Definition: TSATime.h:428
int64_t identifier_t
type for ID's
Definition: TSATypeDef.h:117
void pane_h_line(const h_line &hl)
Definition: TSASeriesTemplate.h:1349
type_t value_type(void) const
Returns the data type of the values stored by the series.
Definition: TSASeriesTemplate.h:1236
size_t capacity(void) const
Returns the series capacity. Only available for 'unmanaged' series. Throws an exception if the series...
Definition: TSASeriesTemplate.h:858
T get_at(size_t position) const
Returns the value at given position.
Definition: TSASeriesTemplate.h:1077
numeric_series_cref(const series_cref< double > &other)
Definition: TSASeriesTemplate.h:1554
void plot_as(const std::string &name, const std::vector< tsa::variant > &periods, plot_type type=plot_type::line, tsa::color clr=tsa::color::auto_color, unsigned weight=2) const
Plot as.
Definition: TSASeriesTemplate.h:300
sref< double > operator-(numeric_series_cref a, numeric_series_cref b)
Subtracts b from a.
Definition: TSADSLBase.cpp:37
bool crosses_above(const series< double > &series_a, const series< double > &series_b)
Returns true when series_a crosses above series_b.
Definition: TSAFunctionsScalar.cpp:276
void set_size(size_t new_size)
Sets the size of self to new_size. This is a quick way to 'make space' without the overhead of callin...
Definition: TSASeriesTemplate.h:1024
void plot_as(const std::string &name, const tsa::variant &period=0.0, plot_type type=plot_type::line, tsa::color clr=tsa::color::auto_color, unsigned weight=2) const
Plot as.
Definition: TSASeriesTemplate.h:281
container(const container &other)
Definition: TSASeriesTemplate.h:1871
auto_cast_bool_series_cref(const series_cref< T > &other)
Definition: TSASeriesTemplate.h:1628
bool size_ok(size_t sz) const
Definition: TSASeriesTemplate.h:1722
any series cref.
Definition: TSASeriesTemplate.h:1807
sref< bool > operator<(numeric_series_cref a, numeric_series_cref b)
comparison.
Definition: TSADSLBase.cpp:78
virtual ~series_cref(void)
Definition: TSASeriesTemplate.h:1304
tsa::date_time operator[](size_t pos) const
Definition: TSASeriesTemplate.h:1788
const series< T > & name(const std::string &name) const
Names the given name.
Definition: TSASeriesTemplate.h:691
The series cref.
Definition: TSASeriesTemplate.h:1663
series_tuple(void)
Definition: TSASeriesTemplate.h:1436
A date series cref.
Definition: TSASeriesTemplate.h:1737