blob: 44101567717f0e3ce7683ae42244555f1f9de94f [file] [log] [blame]
Thomas Tsou20eb6d62013-11-09 14:30:41 -05001#include "signalVector.h"
2
Pau Espin Pedrolf7331762018-12-03 17:46:04 +01003signalVector::signalVector(size_t size, vector_alloc_func wAllocFunc, vector_free_func wFreeFunc)
4 : Vector<complex>(size, wAllocFunc, wFreeFunc),
Thomas Tsou20eb6d62013-11-09 14:30:41 -05005 real(false), aligned(false), symmetry(NONE)
6{
7}
8
Pau Espin Pedrolf7331762018-12-03 17:46:04 +01009signalVector::signalVector(size_t size, size_t start, vector_alloc_func wAllocFunc, vector_free_func wFreeFunc)
10 : Vector<complex>(size + start, wAllocFunc, wFreeFunc),
Thomas Tsou20eb6d62013-11-09 14:30:41 -050011 real(false), aligned(false), symmetry(NONE)
12{
13 mStart = mData + start;
14}
15
Pau Espin Pedrolf7331762018-12-03 17:46:04 +010016signalVector::signalVector(complex *data, size_t start, size_t span, vector_alloc_func wAllocFunc, vector_free_func wFreeFunc)
17 : Vector<complex>(data, data + start, data + start + span, wAllocFunc, wFreeFunc),
Thomas Tsou20eb6d62013-11-09 14:30:41 -050018 real(false), aligned(false), symmetry(NONE)
19{
20}
21
22signalVector::signalVector(const signalVector &vector)
23 : Vector<complex>(vector.size() + vector.getStart()), aligned(false)
24{
25 mStart = mData + vector.getStart();
26 vector.copyTo(*this);
27 symmetry = vector.getSymmetry();
28 real = vector.isReal();
29};
30
31signalVector::signalVector(const signalVector &vector,
32 size_t start, size_t tail)
33 : Vector<complex>(start + vector.size() + tail), aligned(false)
34{
35 mStart = mData + start;
36 vector.copyTo(*this);
37 symmetry = vector.getSymmetry();
38 real = vector.isReal();
39};
40
41void signalVector::operator=(const signalVector& vector)
42{
43 resize(vector.size() + vector.getStart());
Pau Espin Pedrole6255532018-08-30 20:55:08 +020044
45 unsigned int i;
46 complex *dst = mData;
47 complex *src = vector.mData;
48 for (i = 0; i < size(); i++, src++, dst++)
49 *dst = *src;
Pau Espin Pedrol93707d02020-02-25 17:02:53 +010050 /* TODO: optimize for non non-trivially copiable types: */
Pau Espin Pedrole6255532018-08-30 20:55:08 +020051 /*memcpy(mData, vector.mData, bytes()); */
Thomas Tsou20eb6d62013-11-09 14:30:41 -050052 mStart = mData + vector.getStart();
53}
54
Alexander Chemerise56bf3a2017-03-17 22:34:20 -070055signalVector signalVector::segment(size_t start, size_t span)
56{
57 return signalVector(mData, start, span);
58}
59
Thomas Tsou20eb6d62013-11-09 14:30:41 -050060size_t signalVector::getStart() const
61{
62 return mStart - mData;
63}
64
Tom Tsou28670fb2015-08-21 19:32:58 -070065size_t signalVector::updateHistory()
66{
67 size_t num = getStart();
Pau Espin Pedrole6255532018-08-30 20:55:08 +020068 unsigned int i;
69 complex *dst = mData;
70 complex *src = mStart + this->size() - num;
71 for (i = 0; i < num; i++, src++, dst++)
72 *dst = *src;
Pau Espin Pedrol93707d02020-02-25 17:02:53 +010073 /* TODO: optimize for non non-trivially copiable types: */
Pau Espin Pedrole6255532018-08-30 20:55:08 +020074 /*memmove(mData, mStart + this->size() - num, num * sizeof(complex)); */
Tom Tsou28670fb2015-08-21 19:32:58 -070075
76 return num;
77}
78
Thomas Tsou20eb6d62013-11-09 14:30:41 -050079Symmetry signalVector::getSymmetry() const
80{
81 return symmetry;
82}
83
84void signalVector::setSymmetry(Symmetry symmetry)
85{
86 this->symmetry = symmetry;
87}
88
89bool signalVector::isReal() const
90{
91 return real;
92}
93
94void signalVector::isReal(bool wOnly)
95{
96 real = wOnly;
97}
98
99bool signalVector::isAligned() const
100{
101 return aligned;
102}
103
104void signalVector::setAligned(bool aligned)
105{
106 this->aligned = aligned;
107}