Branch data Line data Source code
1 : : /*
2 : : * history.h - history class definitions
3 : : *
4 : : * Copyright (C) 2006, 2007 Stefan Jahn <stefan@lkcc.org>
5 : : *
6 : : * This is free software; you can redistribute it and/or modify
7 : : * it under the terms of the GNU General Public License as published by
8 : : * the Free Software Foundation; either version 2, or (at your option)
9 : : * any later version.
10 : : *
11 : : * This software is distributed in the hope that it will be useful,
12 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : : * GNU General Public License for more details.
15 : : *
16 : : * You should have received a copy of the GNU General Public License
17 : : * along with this package; see the file COPYING. If not, write to
18 : : * the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
19 : : * Boston, MA 02110-1301, USA.
20 : : *
21 : : * $Id$
22 : : *
23 : : */
24 : :
25 : : #ifndef __HISTORY_H__
26 : : #define __HISTORY_H__
27 : :
28 : : #include <memory>
29 : : #include <vector>
30 : : #include <tvector.h>
31 : :
32 : : namespace qucs {
33 : :
34 : 65 : class history
35 : : {
36 : : public:
37 : : /*! default constructor */
38 : 65 : history ():
39 : : sign(false),
40 : : age(0),
41 : : values(std::make_shared<std::vector<nr_double_t>>()),
42 [ + - ]: 65 : t(std::make_shared<std::vector<nr_double_t>>())
43 : 65 : {};
44 : :
45 : : /*! The copy constructor creates a new instance based on the given
46 : : history object. */
47 : 0 : history (const history &h)
48 : 0 : {
49 : 0 : this->age = h.age;
50 [ # # ]: 0 : this->t = std::make_shared<std::vector<nr_double_t>>(*(h.t));
51 [ # # ]: 0 : this->values = std::make_shared<std::vector<nr_double_t>>(*(h.values));
52 : 0 : }
53 : :
54 : : /*! The function appends the given value to the history. */
55 : 192469 : void append (const nr_double_t val) {
56 : 192469 : this->values->push_back(val);
57 [ + + ]: 192469 : if (this->values != this->t)
58 : 65 : this->drop ();
59 : 192469 : }
60 : :
61 : : /* This function drops the most recent n values in the history. */
62 : 0 : void truncate (const int n)
63 : : {
64 : 0 : this->t->resize (n);
65 : 0 : this->values->resize (n);
66 : 0 : }
67 : :
68 : 0 : int getSize (void) const
69 : : {
70 [ # # ]: 0 : return this->t == NULL ? 0.0 : t->size ();
71 : : }
72 : :
73 : 65 : void setAge (const nr_double_t a) { this->age = a; }
74 : 0 : nr_double_t getAge (void) const { return this->age; }
75 : :
76 : : // apply history
77 : 0 : void apply (const history & h) {
78 : 0 : this->t = h.t;
79 : 0 : }
80 : :
81 : : //! Returns the last (youngest) time value in the history
82 : 406824 : nr_double_t last (void) const {
83 [ + + ]: 406824 : return this->t->empty() ? 0.0 : this->t->back();
84 : : }
85 : :
86 : : //! Returns the first (oldest) time value in the history.
87 : 192469 : nr_double_t first (void) const {
88 [ + + ]: 192469 : return this->t->empty() ? 0.0 : (*this->t)[leftidx ()];
89 : : }
90 : :
91 : : // Returns left-most valid index into the time value vector.
92 : 192404 : unsigned int leftidx (void) const {
93 : 192404 : int ts = this->t->size ();
94 : 192404 : int vs = this->values->size ();
95 : 192404 : return ts - vs > 0 ? ts - vs : 0;
96 : : }
97 : :
98 : : /*! Returns number of unused values (time value vector shorter than
99 : : value vector). */
100 : 0 : int unused (void) {
101 : 0 : int ts = t->size ();
102 : 0 : int vs = values->size ();
103 : 0 : return vs - ts > 0 ? vs - ts : 0;
104 : : }
105 : :
106 : : //! Returns the duration of the history.
107 : : nr_double_t duration(void) const {
108 : : return last () - first ();
109 : : }
110 : :
111 : : void truncate (const nr_double_t);
112 : :
113 : : void drop (void);
114 : 65 : void self (void) { this->t = this->values; }
115 : :
116 : : nr_double_t interpol (nr_double_t, int, bool);
117 : : nr_double_t nearest (nr_double_t, bool interpolate = true);
118 : : int seek (nr_double_t, int, int, nr_double_t&, int);
119 : :
120 : 0 : nr_double_t getTfromidx (const int idx) {
121 [ # # ]: 0 : return this->t == NULL ? 0.0 : (*this->t)[idx];
122 : : }
123 : 0 : nr_double_t getValfromidx (const int idx) {
124 [ # # ]: 0 : return this->values == NULL ? 0.0 : (*this->values)[idx];
125 : : }
126 : :
127 : : private:
128 : : bool sign;
129 : : nr_double_t age;
130 : : std::shared_ptr<std::vector<nr_double_t>> values;
131 : : std::shared_ptr<std::vector<nr_double_t>> t;
132 : : };
133 : :
134 : : } // namespace qucs
135 : :
136 : : #endif /* __HISTORY_H__ */
|