@@ -9,6 +9,42 | |||||
9 |
|
9 | |||
10 | #include <memory> |
|
10 | #include <memory> | |
11 |
|
11 | |||
|
12 | template <int Dim> | |||
|
13 | class ArrayData; | |||
|
14 | ||||
|
15 | using DataContainer = QVector<QVector<double> >; | |||
|
16 | ||||
|
17 | namespace arraydata_detail { | |||
|
18 | ||||
|
19 | /// Struct used to sort ArrayData | |||
|
20 | template <int Dim> | |||
|
21 | struct Sort { | |||
|
22 | static std::shared_ptr<ArrayData<Dim> > sort(const DataContainer &data, | |||
|
23 | const std::vector<int> &sortPermutation) | |||
|
24 | { | |||
|
25 | auto nbComponents = data.size(); | |||
|
26 | auto sortedData = DataContainer(nbComponents); | |||
|
27 | ||||
|
28 | for (auto i = 0; i < nbComponents; ++i) { | |||
|
29 | sortedData[i] = SortUtils::sort(data.at(i), sortPermutation); | |||
|
30 | } | |||
|
31 | ||||
|
32 | return std::make_shared<ArrayData<Dim> >(std::move(sortedData)); | |||
|
33 | } | |||
|
34 | }; | |||
|
35 | ||||
|
36 | /// Specialization for uni-dimensional ArrayData | |||
|
37 | template <> | |||
|
38 | struct Sort<1> { | |||
|
39 | static std::shared_ptr<ArrayData<1> > sort(const DataContainer &data, | |||
|
40 | const std::vector<int> &sortPermutation) | |||
|
41 | { | |||
|
42 | return std::make_shared<ArrayData<1> >(SortUtils::sort(data.at(0), sortPermutation)); | |||
|
43 | } | |||
|
44 | }; | |||
|
45 | ||||
|
46 | } // namespace arraydata_detail | |||
|
47 | ||||
12 | /** |
|
48 | /** | |
13 | * @brief The ArrayData class represents a dataset for a data series. |
|
49 | * @brief The ArrayData class represents a dataset for a data series. | |
14 | * |
|
50 | * | |
@@ -40,7 +76,7 public: | |||||
40 | * @remarks if the number of values is not the same for each component, no value is set |
|
76 | * @remarks if the number of values is not the same for each component, no value is set | |
41 | */ |
|
77 | */ | |
42 | template <int D = Dim, typename = std::enable_if_t<D == 2> > |
|
78 | template <int D = Dim, typename = std::enable_if_t<D == 2> > | |
43 |
explicit ArrayData( |
|
79 | explicit ArrayData(DataContainer data) | |
44 | { |
|
80 | { | |
45 | auto nbComponents = data.size(); |
|
81 | auto nbComponents = data.size(); | |
46 | if (nbComponents < 2) { |
|
82 | if (nbComponents < 2) { | |
@@ -57,7 +93,7 public: | |||||
57 | m_Data = std::move(data); |
|
93 | m_Data = std::move(data); | |
58 | } |
|
94 | } | |
59 | else { |
|
95 | else { | |
60 |
m_Data = |
|
96 | m_Data = DataContainer{nbComponents, QVector<double>{}}; | |
61 | } |
|
97 | } | |
62 | } |
|
98 | } | |
63 |
|
99 | |||
@@ -141,11 +177,10 public: | |||||
141 | return m_Data[0].size(); |
|
177 | return m_Data[0].size(); | |
142 | } |
|
178 | } | |
143 |
|
179 | |||
144 | template <int D = Dim, typename = std::enable_if_t<D == 1> > |
|
|||
145 | std::shared_ptr<ArrayData<Dim> > sort(const std::vector<int> &sortPermutation) |
|
180 | std::shared_ptr<ArrayData<Dim> > sort(const std::vector<int> &sortPermutation) | |
146 | { |
|
181 | { | |
147 | QReadLocker locker{&m_Lock}; |
|
182 | QReadLocker locker{&m_Lock}; | |
148 |
return |
|
183 | return arraydata_detail::Sort<Dim>::sort(m_Data, sortPermutation); | |
149 | } |
|
184 | } | |
150 |
|
185 | |||
151 | void clear() |
|
186 | void clear() | |
@@ -159,7 +194,7 public: | |||||
159 | } |
|
194 | } | |
160 |
|
195 | |||
161 | private: |
|
196 | private: | |
162 | QVector<QVector<double> > m_Data; |
|
197 | DataContainer m_Data; | |
163 | mutable QReadWriteLock m_Lock; |
|
198 | mutable QReadWriteLock m_Lock; | |
164 | }; |
|
199 | }; | |
165 |
|
200 |
General Comments 0
You need to be logged in to leave comments.
Login now