5 #ifndef USML_TYPES_SEQ_DATA_H
6 #define USML_TYPES_SEQ_DATA_H
8 #include <usml/types/seq_vector.h>
13 using boost::numeric::ublas::vector;
61 void init(
const double* data,
unsigned size ) {
83 if (_max_index == 0) {
87 if (value == _value) {
95 if (_index_data > value) {
100 for (
difference_type n = _index - 1; n >= 0 && _index_data > value; --n) {
101 _index_data = _data(--_index) * _sign;
106 }
else if (_index_data < value) {
112 for (
difference_type n = _index + 1; n <= N && _index_data < value; ++n) {
113 _index_data = _data(++_index) * _sign;
119 if (_index_data > value && _index > 0) {
120 _index_data = _data(--_index) * _sign;
156 if (_max_index > 0) {
164 _increment[0] = left;
168 for ( size_type n = 1; n < _max_index; ++n ) {
170 if (left * right <= 0) {
171 throw std::invalid_argument(
"series not monotonic");
175 _increment[n] = left;
180 _data[ _max_index ] = data[ _max_index ];
181 _increment[ _max_index ] = left;
183 _index_data = _data[_index] * _sign;
193 template<
class T,
class A>
seq_data(
const vector<T,A> &data )
199 if (_max_index > 0) {
208 _increment[0] = left;
212 for ( size_type n = 1; n < _max_index; ++n ) {
214 if (left * right <= 0) {
215 throw std::invalid_argument(
"series not monotonic");
219 _increment[n] = left;
224 _data[ _max_index ] = data[ _max_index ];
225 _increment[ _max_index ] = left;
227 _index_data = _data[_index] * _sign;
237 _index(copy._index), _value(copy._value),
238 _index_data(copy._index_data), _sign(copy._sign)
vector_reference< self_type > closure_type
Definition: seq_data.h:36
virtual ~seq_data()
Virtual destructor.
Definition: seq_data.h:132
size_type _index
index number from the last search
Definition: seq_data.h:41
seq_data(const seq_data ©)
Copies data from another seq_data object.
Definition: seq_data.h:235
value_type _value
Value from the last search.
Definition: seq_data.h:44
seq_data(const vector< T, A > &data)
Construct sequence from a uBLAS vector.
Definition: seq_data.h:193
seq_data(const double *data, unsigned size)
Construct sequence from a standard C array.
Definition: seq_data.h:151
value_type _index_data
axis value that corresponds to _index
Definition: seq_data.h:47
const vector_reference< const self_type > const_closure_type
Definition: seq_data.h:35
Sequence defined by an unevenly spaced vector of points.
Definition: seq_data.h:28
seq_data self_type
Definition: seq_data.h:33
virtual size_type find_index(value_type value)
Search for a value in this sequence.
Definition: seq_data.h:80
value_type _sign
Sign value is 1 if the sequence is increasing, -1 if decreasing.
Definition: seq_data.h:50
vector< value_type >::difference_type difference_type
Definition: seq_vector.h:45
virtual seq_vector * clone() const
Create a copy using a reference to the base class.
Definition: seq_data.h:243
A read-only, monotonic sequence of values.
Definition: seq_vector.h:36
void init(const double *data, unsigned size)
Definition: seq_data.h:61
double value_type
Definition: seq_vector.h:43
seq_data(size_type size)
Initialize sequence sub-class using number of elements.
Definition: seq_data.h:140