ClockWork DB CoreAPI 1.0.48
Abstract Time Series and Storage/Management Library
Loading...
Searching...
No Matches
blob.hpp
1/*
2 * blob.hpp
3 *
4 * Created on: Sep 23, 2020
5 * Author: tmccubbin
6 */
7
8#ifndef SRC_TOM_UTIL_BLOB_HPP_
9#define SRC_TOM_UTIL_BLOB_HPP_
10
11#include <vector>
12#include <tom-util/observation.hpp>
13#include <tom-util/scalar.hpp>
14
15
16namespace tom {
17
18 using cvec = std::vector<std::uint8_t>;
19
20 class Blob : public tom::scalar< tom::cvec_adapter >,
21 public boost::arithmetic< Blob,
22 boost::arithmetic< Blob, std::vector<std::uint8_t>,
23 boost::incrementable< Blob,
24 boost::decrementable< Blob > > >
25 >
26 {
27 public:
29 typedef typename tom::Blob::value_type::const_iterator const_iterator;
30 typedef typename tom::Blob::value_type::iterator iterator;
31
35
36
37 Blob();
38 Blob( const tom::Blob & );
39 Blob( tom::Blob & );
40 Blob( std::vector<std::uint8_t> );
41 Blob( const observation & );
42
43 template< typename T >
44 Blob( const T begin, const T end ) : m_value( begin, end ){ }
45
46 virtual ~Blob();
47
48 Blob &
49 operator=( const std::vector<std::uint8_t> & );
50 Blob &
51 operator=( const Blob & );
52
53 virtual
54 Blob &
55 operator=( const observation & );
56
57 virtual
58 Blob &
60
61 iterator begin() { return m_value.begin(); }
62 const_iterator begin() const { return m_value.begin(); }
63 iterator end() { return m_value.end(); }
64 const_iterator end() const { return m_value.end(); }
65
66 template <typename T>
67 void
68 assign( const T begin, const T end ){
69 m_value.assign(begin,end);
70 }
71
72 virtual
74 flag() const;
75
76 virtual
77 bool
78 is_normal() const;
79
80 // need to make a copy, call me :)
81 // needed by algos, etc, that want to generically
82 // use observation refs, w/out knowing what type
83 // actually implements the function
84 //virtual observation &clone() const;
85
86 virtual observation &operator+=( const observation & );
87 virtual observation &operator-=( const observation & );
88 virtual observation &operator*=( const observation & );
89 virtual observation &operator/=( const observation & );
90
91 virtual bool operator<( const observation & ) const;
92 virtual bool operator<=( const observation & ) const;
93 virtual bool operator>( const observation & ) const;
94 virtual bool operator>=( const observation & ) const;
95
96 virtual bool operator==( const observation & ) const;
97 virtual bool operator!=( const observation & ) const;
98
99 virtual std::ostream &print( std::ostream & ) const;
100
101 virtual operator unsigned char() const;
102 virtual operator tom::value_types::string() const;
103 virtual operator short int() const;
104 virtual operator int() const;
105 virtual operator long int() const;
106 virtual operator unsigned short int() const;
107 virtual operator unsigned int() const;
108 virtual operator unsigned long int() const;
109 virtual operator float() const;
110 virtual operator double() const;
111
112 // special case, as there is no real bool!
113 // just an unsigned char to hold bool + flags
114 virtual operator bool() const;
115
116 std::uint8_t
117 operator[](size_t i){ return m_value.at(i); }
118
120 value() const { return m_value; }
121
122 size_t
123 size() const { return m_value.size(); }
124
125 public:
126 value_type m_value;
127 };
128
129} // end tom namespace
130
131#endif /* SRC_TOM_UTIL_BLOB_HPP_ */
Definition blob.hpp:26
Definition value_types.hpp:23
Definition observation.hpp:13
Definition scalar.hpp:19
Definition value_types.hpp:96
Definition value_types.hpp:144
Definition value_types.hpp:324
Definition value_types.hpp:319
Definition value_types.hpp:329