##// END OF EJS Templates
Updates declaration of logger to avoid multiple definitions
Alexandre Leroux -
r562:d3e47b0fbfb0
parent child
Show More
@@ -1,288 +1,293
1 #ifndef SCIQLOP_DATASERIES_H
1 #ifndef SCIQLOP_DATASERIES_H
2 #define SCIQLOP_DATASERIES_H
2 #define SCIQLOP_DATASERIES_H
3
3
4 #include "CoreGlobal.h"
5
4 #include <Common/SortUtils.h>
6 #include <Common/SortUtils.h>
5
7
6 #include <Data/ArrayData.h>
8 #include <Data/ArrayData.h>
7 #include <Data/IDataSeries.h>
9 #include <Data/IDataSeries.h>
8
10
9 #include <QLoggingCategory>
11 #include <QLoggingCategory>
10
11 #include <QReadLocker>
12 #include <QReadLocker>
12 #include <QReadWriteLock>
13 #include <QReadWriteLock>
13 #include <memory>
14 #include <memory>
14
15
15 Q_DECLARE_LOGGING_CATEGORY(LOG_DataSeries)
16 // We don't use the Qt macro since the log is used in the header file, which causes multiple log
16 Q_LOGGING_CATEGORY(LOG_DataSeries, "DataSeries")
17 // definitions with inheritance. Inline method is used instead
17
18 inline const QLoggingCategory &LOG_DataSeries()
19 {
20 static const QLoggingCategory category{"DataSeries"};
21 return category;
22 }
18
23
19 /**
24 /**
20 * @brief The DataSeries class is the base (abstract) implementation of IDataSeries.
25 * @brief The DataSeries class is the base (abstract) implementation of IDataSeries.
21 *
26 *
22 * It proposes to set a dimension for the values ​​data.
27 * It proposes to set a dimension for the values ​​data.
23 *
28 *
24 * A DataSeries is always sorted on its x-axis data.
29 * A DataSeries is always sorted on its x-axis data.
25 *
30 *
26 * @tparam Dim The dimension of the values data
31 * @tparam Dim The dimension of the values data
27 *
32 *
28 */
33 */
29 template <int Dim>
34 template <int Dim>
30 class DataSeries : public IDataSeries {
35 class SCIQLOP_CORE_EXPORT DataSeries : public IDataSeries {
31 public:
36 public:
32 class IteratorValue {
37 class IteratorValue {
33 public:
38 public:
34 explicit IteratorValue(const DataSeries &dataSeries, bool begin)
39 explicit IteratorValue(const DataSeries &dataSeries, bool begin)
35 : m_XIt(begin ? dataSeries.xAxisData()->cbegin() : dataSeries.xAxisData()->cend()),
40 : m_XIt(begin ? dataSeries.xAxisData()->cbegin() : dataSeries.xAxisData()->cend()),
36 m_ValuesIt(begin ? dataSeries.valuesData()->cbegin()
41 m_ValuesIt(begin ? dataSeries.valuesData()->cbegin()
37 : dataSeries.valuesData()->cend())
42 : dataSeries.valuesData()->cend())
38 {
43 {
39 }
44 }
40
45
41 double x() const { return m_XIt->at(0); }
46 double x() const { return m_XIt->at(0); }
42 double value() const { return m_ValuesIt->at(0); }
47 double value() const { return m_ValuesIt->at(0); }
43 double value(int componentIndex) const { return m_ValuesIt->at(componentIndex); }
48 double value(int componentIndex) const { return m_ValuesIt->at(componentIndex); }
44
49
45 void next()
50 void next()
46 {
51 {
47 ++m_XIt;
52 ++m_XIt;
48 ++m_ValuesIt;
53 ++m_ValuesIt;
49 }
54 }
50
55
51 bool operator==(const IteratorValue &other) const
56 bool operator==(const IteratorValue &other) const
52 {
57 {
53 return std::tie(m_XIt, m_ValuesIt) == std::tie(other.m_XIt, other.m_ValuesIt);
58 return std::tie(m_XIt, m_ValuesIt) == std::tie(other.m_XIt, other.m_ValuesIt);
54 }
59 }
55
60
56 private:
61 private:
57 ArrayData<1>::Iterator m_XIt;
62 ArrayData<1>::Iterator m_XIt;
58 typename ArrayData<Dim>::Iterator m_ValuesIt;
63 typename ArrayData<Dim>::Iterator m_ValuesIt;
59 };
64 };
60
65
61 class Iterator {
66 class Iterator {
62 public:
67 public:
63 using iterator_category = std::forward_iterator_tag;
68 using iterator_category = std::forward_iterator_tag;
64 using value_type = const IteratorValue;
69 using value_type = const IteratorValue;
65 using difference_type = std::ptrdiff_t;
70 using difference_type = std::ptrdiff_t;
66 using pointer = value_type *;
71 using pointer = value_type *;
67 using reference = value_type &;
72 using reference = value_type &;
68
73
69 Iterator(const DataSeries &dataSeries, bool begin) : m_CurrentValue{dataSeries, begin} {}
74 Iterator(const DataSeries &dataSeries, bool begin) : m_CurrentValue{dataSeries, begin} {}
70 virtual ~Iterator() noexcept = default;
75 virtual ~Iterator() noexcept = default;
71 Iterator(const Iterator &) = default;
76 Iterator(const Iterator &) = default;
72 Iterator(Iterator &&) = default;
77 Iterator(Iterator &&) = default;
73 Iterator &operator=(const Iterator &) = default;
78 Iterator &operator=(const Iterator &) = default;
74 Iterator &operator=(Iterator &&) = default;
79 Iterator &operator=(Iterator &&) = default;
75
80
76 Iterator &operator++()
81 Iterator &operator++()
77 {
82 {
78 m_CurrentValue.next();
83 m_CurrentValue.next();
79 return *this;
84 return *this;
80 }
85 }
81
86
82 pointer operator->() const { return &m_CurrentValue; }
87 pointer operator->() const { return &m_CurrentValue; }
83
88
84 reference operator*() const { return m_CurrentValue; }
89 reference operator*() const { return m_CurrentValue; }
85
90
86 bool operator==(const Iterator &other) const
91 bool operator==(const Iterator &other) const
87 {
92 {
88 return m_CurrentValue == other.m_CurrentValue;
93 return m_CurrentValue == other.m_CurrentValue;
89 }
94 }
90
95
91 bool operator!=(const Iterator &other) const { return !(*this == other); }
96 bool operator!=(const Iterator &other) const { return !(*this == other); }
92
97
93 private:
98 private:
94 IteratorValue m_CurrentValue;
99 IteratorValue m_CurrentValue;
95 };
100 };
96
101
97 /// @sa IDataSeries::xAxisData()
102 /// @sa IDataSeries::xAxisData()
98 std::shared_ptr<ArrayData<1> > xAxisData() override { return m_XAxisData; }
103 std::shared_ptr<ArrayData<1> > xAxisData() override { return m_XAxisData; }
99 const std::shared_ptr<ArrayData<1> > xAxisData() const { return m_XAxisData; }
104 const std::shared_ptr<ArrayData<1> > xAxisData() const { return m_XAxisData; }
100
105
101 /// @sa IDataSeries::xAxisUnit()
106 /// @sa IDataSeries::xAxisUnit()
102 Unit xAxisUnit() const override { return m_XAxisUnit; }
107 Unit xAxisUnit() const override { return m_XAxisUnit; }
103
108
104 /// @return the values dataset
109 /// @return the values dataset
105 std::shared_ptr<ArrayData<Dim> > valuesData() { return m_ValuesData; }
110 std::shared_ptr<ArrayData<Dim> > valuesData() { return m_ValuesData; }
106 const std::shared_ptr<ArrayData<Dim> > valuesData() const { return m_ValuesData; }
111 const std::shared_ptr<ArrayData<Dim> > valuesData() const { return m_ValuesData; }
107
112
108 /// @sa IDataSeries::valuesUnit()
113 /// @sa IDataSeries::valuesUnit()
109 Unit valuesUnit() const override { return m_ValuesUnit; }
114 Unit valuesUnit() const override { return m_ValuesUnit; }
110
115
111
116
112 SqpRange range() const override
117 SqpRange range() const override
113 {
118 {
114 if (!m_XAxisData->cdata().isEmpty()) {
119 if (!m_XAxisData->cdata().isEmpty()) {
115 return SqpRange{m_XAxisData->cdata().first(), m_XAxisData->cdata().last()};
120 return SqpRange{m_XAxisData->cdata().first(), m_XAxisData->cdata().last()};
116 }
121 }
117
122
118 return SqpRange{};
123 return SqpRange{};
119 }
124 }
120
125
121 void clear()
126 void clear()
122 {
127 {
123 m_XAxisData->clear();
128 m_XAxisData->clear();
124 m_ValuesData->clear();
129 m_ValuesData->clear();
125 }
130 }
126
131
127 /// Merges into the data series an other data series
132 /// Merges into the data series an other data series
128 /// @remarks the data series to merge with is cleared after the operation
133 /// @remarks the data series to merge with is cleared after the operation
129 void merge(IDataSeries *dataSeries) override
134 void merge(IDataSeries *dataSeries) override
130 {
135 {
131 dataSeries->lockWrite();
136 dataSeries->lockWrite();
132 lockWrite();
137 lockWrite();
133
138
134 if (auto other = dynamic_cast<DataSeries<Dim> *>(dataSeries)) {
139 if (auto other = dynamic_cast<DataSeries<Dim> *>(dataSeries)) {
135 const auto &otherXAxisData = other->xAxisData()->cdata();
140 const auto &otherXAxisData = other->xAxisData()->cdata();
136 const auto &xAxisData = m_XAxisData->cdata();
141 const auto &xAxisData = m_XAxisData->cdata();
137
142
138 // As data series are sorted, we can improve performances of merge, by call the sort
143 // As data series are sorted, we can improve performances of merge, by call the sort
139 // method only if the two data series overlap.
144 // method only if the two data series overlap.
140 if (!otherXAxisData.empty()) {
145 if (!otherXAxisData.empty()) {
141 auto firstValue = otherXAxisData.front();
146 auto firstValue = otherXAxisData.front();
142 auto lastValue = otherXAxisData.back();
147 auto lastValue = otherXAxisData.back();
143
148
144 auto xAxisDataBegin = xAxisData.cbegin();
149 auto xAxisDataBegin = xAxisData.cbegin();
145 auto xAxisDataEnd = xAxisData.cend();
150 auto xAxisDataEnd = xAxisData.cend();
146
151
147 bool prepend;
152 bool prepend;
148 bool sortNeeded;
153 bool sortNeeded;
149
154
150 if (std::lower_bound(xAxisDataBegin, xAxisDataEnd, firstValue) == xAxisDataEnd) {
155 if (std::lower_bound(xAxisDataBegin, xAxisDataEnd, firstValue) == xAxisDataEnd) {
151 // Other data series if after data series
156 // Other data series if after data series
152 prepend = false;
157 prepend = false;
153 sortNeeded = false;
158 sortNeeded = false;
154 }
159 }
155 else if (std::upper_bound(xAxisDataBegin, xAxisDataEnd, lastValue)
160 else if (std::upper_bound(xAxisDataBegin, xAxisDataEnd, lastValue)
156 == xAxisDataBegin) {
161 == xAxisDataBegin) {
157 // Other data series if before data series
162 // Other data series if before data series
158 prepend = true;
163 prepend = true;
159 sortNeeded = false;
164 sortNeeded = false;
160 }
165 }
161 else {
166 else {
162 // The two data series overlap
167 // The two data series overlap
163 prepend = false;
168 prepend = false;
164 sortNeeded = true;
169 sortNeeded = true;
165 }
170 }
166
171
167 // Makes the merge
172 // Makes the merge
168 m_XAxisData->add(*other->xAxisData(), prepend);
173 m_XAxisData->add(*other->xAxisData(), prepend);
169 m_ValuesData->add(*other->valuesData(), prepend);
174 m_ValuesData->add(*other->valuesData(), prepend);
170
175
171 if (sortNeeded) {
176 if (sortNeeded) {
172 sort();
177 sort();
173 }
178 }
174 }
179 }
175
180
176 // Clears the other data series
181 // Clears the other data series
177 other->clear();
182 other->clear();
178 }
183 }
179 else {
184 else {
180 qCWarning(LOG_DataSeries())
185 qCWarning(LOG_DataSeries())
181 << QObject::tr("Detection of a type of IDataSeries we cannot merge with !");
186 << QObject::tr("Detection of a type of IDataSeries we cannot merge with !");
182 }
187 }
183 unlock();
188 unlock();
184 dataSeries->unlock();
189 dataSeries->unlock();
185 }
190 }
186
191
187 // ///////// //
192 // ///////// //
188 // Iterators //
193 // Iterators //
189 // ///////// //
194 // ///////// //
190
195
191 Iterator cbegin() const { return Iterator{*this, true}; }
196 Iterator cbegin() const { return Iterator{*this, true}; }
192
197
193 Iterator cend() const { return Iterator{*this, false}; }
198 Iterator cend() const { return Iterator{*this, false}; }
194
199
195 std::pair<Iterator, Iterator> subData(double min, double max) const
200 std::pair<Iterator, Iterator> subData(double min, double max) const
196 {
201 {
197 if (min > max) {
202 if (min > max) {
198 std::swap(min, max);
203 std::swap(min, max);
199 }
204 }
200
205
201 auto begin = cbegin();
206 auto begin = cbegin();
202 auto end = cend();
207 auto end = cend();
203
208
204 auto lowerIt
209 auto lowerIt
205 = std::lower_bound(begin, end, min, [](const auto &itValue, const auto &value) {
210 = std::lower_bound(begin, end, min, [](const auto &itValue, const auto &value) {
206 return itValue.x() == value;
211 return itValue.x() == value;
207 });
212 });
208 auto upperIt
213 auto upperIt
209 = std::upper_bound(begin, end, max, [](const auto &value, const auto &itValue) {
214 = std::upper_bound(begin, end, max, [](const auto &value, const auto &itValue) {
210 return itValue.x() == value;
215 return itValue.x() == value;
211 });
216 });
212
217
213 return std::make_pair(lowerIt, upperIt);
218 return std::make_pair(lowerIt, upperIt);
214 }
219 }
215
220
216 // /////// //
221 // /////// //
217 // Mutexes //
222 // Mutexes //
218 // /////// //
223 // /////// //
219
224
220 virtual void lockRead() { m_Lock.lockForRead(); }
225 virtual void lockRead() { m_Lock.lockForRead(); }
221 virtual void lockWrite() { m_Lock.lockForWrite(); }
226 virtual void lockWrite() { m_Lock.lockForWrite(); }
222 virtual void unlock() { m_Lock.unlock(); }
227 virtual void unlock() { m_Lock.unlock(); }
223
228
224 protected:
229 protected:
225 /// Protected ctor (DataSeries is abstract). The vectors must have the same size, otherwise a
230 /// Protected ctor (DataSeries is abstract). The vectors must have the same size, otherwise a
226 /// DataSeries with no values will be created.
231 /// DataSeries with no values will be created.
227 /// @remarks data series is automatically sorted on its x-axis data
232 /// @remarks data series is automatically sorted on its x-axis data
228 explicit DataSeries(std::shared_ptr<ArrayData<1> > xAxisData, const Unit &xAxisUnit,
233 explicit DataSeries(std::shared_ptr<ArrayData<1> > xAxisData, const Unit &xAxisUnit,
229 std::shared_ptr<ArrayData<Dim> > valuesData, const Unit &valuesUnit)
234 std::shared_ptr<ArrayData<Dim> > valuesData, const Unit &valuesUnit)
230 : m_XAxisData{xAxisData},
235 : m_XAxisData{xAxisData},
231 m_XAxisUnit{xAxisUnit},
236 m_XAxisUnit{xAxisUnit},
232 m_ValuesData{valuesData},
237 m_ValuesData{valuesData},
233 m_ValuesUnit{valuesUnit}
238 m_ValuesUnit{valuesUnit}
234 {
239 {
235 if (m_XAxisData->size() != m_ValuesData->size()) {
240 if (m_XAxisData->size() != m_ValuesData->size()) {
236 clear();
241 clear();
237 }
242 }
238
243
239 // Sorts data if it's not the case
244 // Sorts data if it's not the case
240 const auto &xAxisCData = m_XAxisData->cdata();
245 const auto &xAxisCData = m_XAxisData->cdata();
241 if (!std::is_sorted(xAxisCData.cbegin(), xAxisCData.cend())) {
246 if (!std::is_sorted(xAxisCData.cbegin(), xAxisCData.cend())) {
242 sort();
247 sort();
243 }
248 }
244 }
249 }
245
250
246 /// Copy ctor
251 /// Copy ctor
247 explicit DataSeries(const DataSeries<Dim> &other)
252 explicit DataSeries(const DataSeries<Dim> &other)
248 : m_XAxisData{std::make_shared<ArrayData<1> >(*other.m_XAxisData)},
253 : m_XAxisData{std::make_shared<ArrayData<1> >(*other.m_XAxisData)},
249 m_XAxisUnit{other.m_XAxisUnit},
254 m_XAxisUnit{other.m_XAxisUnit},
250 m_ValuesData{std::make_shared<ArrayData<Dim> >(*other.m_ValuesData)},
255 m_ValuesData{std::make_shared<ArrayData<Dim> >(*other.m_ValuesData)},
251 m_ValuesUnit{other.m_ValuesUnit}
256 m_ValuesUnit{other.m_ValuesUnit}
252 {
257 {
253 // Since a series is ordered from its construction and is always ordered, it is not
258 // Since a series is ordered from its construction and is always ordered, it is not
254 // necessary to call the sort method here ('other' is sorted)
259 // necessary to call the sort method here ('other' is sorted)
255 }
260 }
256
261
257 /// Assignment operator
262 /// Assignment operator
258 template <int D>
263 template <int D>
259 DataSeries &operator=(DataSeries<D> other)
264 DataSeries &operator=(DataSeries<D> other)
260 {
265 {
261 std::swap(m_XAxisData, other.m_XAxisData);
266 std::swap(m_XAxisData, other.m_XAxisData);
262 std::swap(m_XAxisUnit, other.m_XAxisUnit);
267 std::swap(m_XAxisUnit, other.m_XAxisUnit);
263 std::swap(m_ValuesData, other.m_ValuesData);
268 std::swap(m_ValuesData, other.m_ValuesData);
264 std::swap(m_ValuesUnit, other.m_ValuesUnit);
269 std::swap(m_ValuesUnit, other.m_ValuesUnit);
265
270
266 return *this;
271 return *this;
267 }
272 }
268
273
269 private:
274 private:
270 /**
275 /**
271 * Sorts data series on its x-axis data
276 * Sorts data series on its x-axis data
272 */
277 */
273 void sort() noexcept
278 void sort() noexcept
274 {
279 {
275 auto permutation = SortUtils::sortPermutation(*m_XAxisData, std::less<double>());
280 auto permutation = SortUtils::sortPermutation(*m_XAxisData, std::less<double>());
276 m_XAxisData = m_XAxisData->sort(permutation);
281 m_XAxisData = m_XAxisData->sort(permutation);
277 m_ValuesData = m_ValuesData->sort(permutation);
282 m_ValuesData = m_ValuesData->sort(permutation);
278 }
283 }
279
284
280 std::shared_ptr<ArrayData<1> > m_XAxisData;
285 std::shared_ptr<ArrayData<1> > m_XAxisData;
281 Unit m_XAxisUnit;
286 Unit m_XAxisUnit;
282 std::shared_ptr<ArrayData<Dim> > m_ValuesData;
287 std::shared_ptr<ArrayData<Dim> > m_ValuesData;
283 Unit m_ValuesUnit;
288 Unit m_ValuesUnit;
284
289
285 QReadWriteLock m_Lock;
290 QReadWriteLock m_Lock;
286 };
291 };
287
292
288 #endif // SCIQLOP_DATASERIES_H
293 #endif // SCIQLOP_DATASERIES_H
@@ -1,44 +1,45
1 # On ignore toutes les règles vera++ pour le fichier spimpl
1 # On ignore toutes les règles vera++ pour le fichier spimpl
2 Common/spimpl\.h:\d+:.*
2 Common/spimpl\.h:\d+:.*
3
3
4 # Ignore false positive relative to two class definitions in a same file
4 # Ignore false positive relative to two class definitions in a same file
5 DataSourceItem\.h:\d+:.*IPSIS_S01.*
5 DataSourceItem\.h:\d+:.*IPSIS_S01.*
6
6
7 # Ignore false positive relative to a template class
7 # Ignore false positive relative to a template class
8 ArrayData\.h:\d+:.*IPSIS_S04_VARIABLE.*found: (D)
8 ArrayData\.h:\d+:.*IPSIS_S04_VARIABLE.*found: (D)
9 ArrayData\.h:\d+:.*IPSIS_S04_NAMESPACE.*found: (arraydata_detail)
9 ArrayData\.h:\d+:.*IPSIS_S04_NAMESPACE.*found: (arraydata_detail)
10 ArrayData\.h:\d+:.*IPSIS_S06.*found: (D)
10 ArrayData\.h:\d+:.*IPSIS_S06.*found: (D)
11 ArrayData\.h:\d+:.*IPSIS_S06.*found: (Dim)
11 ArrayData\.h:\d+:.*IPSIS_S06.*found: (Dim)
12 DataSeries\.h:\d+:.*IPSIS_S04_METHOD.*found: LOG_DataSeries
12 DataSeries\.h:\d+:.*IPSIS_S04_VARIABLE.*
13 DataSeries\.h:\d+:.*IPSIS_S04_VARIABLE.*
13
14
14 # Ignore false positive relative to iterators
15 # Ignore false positive relative to iterators
15 ArrayData\.h:\d+:.*IPSIS_S04_VARIABLE.*found: (forward_iterator_tag)
16 ArrayData\.h:\d+:.*IPSIS_S04_VARIABLE.*found: (forward_iterator_tag)
16 ArrayData\.h:\d+:.*IPSIS_S04_VARIABLE.*found: (IteratorValue)
17 ArrayData\.h:\d+:.*IPSIS_S04_VARIABLE.*found: (IteratorValue)
17 ArrayData\.h:\d+:.*IPSIS_S04_VARIABLE.*found: (ptrdiff_t)
18 ArrayData\.h:\d+:.*IPSIS_S04_VARIABLE.*found: (ptrdiff_t)
18 ArrayData\.h:\d+:.*IPSIS_S04_VARIABLE.*found: (value_type)
19 ArrayData\.h:\d+:.*IPSIS_S04_VARIABLE.*found: (value_type)
19 ArrayData\.h:\d+:.*IPSIS_S05.*
20 ArrayData\.h:\d+:.*IPSIS_S05.*
20 ArrayData\.h:\d+:.*IPSIS_S06.*found: (iterator_category)
21 ArrayData\.h:\d+:.*IPSIS_S06.*found: (iterator_category)
21 ArrayData\.h:\d+:.*IPSIS_S06.*found: (forward_iterator_tag)
22 ArrayData\.h:\d+:.*IPSIS_S06.*found: (forward_iterator_tag)
22 ArrayData\.h:\d+:.*IPSIS_S06.*found: (value_type)
23 ArrayData\.h:\d+:.*IPSIS_S06.*found: (value_type)
23 ArrayData\.h:\d+:.*IPSIS_S06.*found: (IteratorValue)
24 ArrayData\.h:\d+:.*IPSIS_S06.*found: (IteratorValue)
24 ArrayData\.h:\d+:.*IPSIS_S06.*found: (difference_type)
25 ArrayData\.h:\d+:.*IPSIS_S06.*found: (difference_type)
25 ArrayData\.h:\d+:.*IPSIS_S06.*found: (ptrdiff_t)
26 ArrayData\.h:\d+:.*IPSIS_S06.*found: (ptrdiff_t)
26 ArrayData\.h:\d+:.*IPSIS_S06.*found: (pointer)
27 ArrayData\.h:\d+:.*IPSIS_S06.*found: (pointer)
27 ArrayData\.h:\d+:.*IPSIS_S06.*found: (reference)
28 ArrayData\.h:\d+:.*IPSIS_S06.*found: (reference)
28 ArrayData\.h:\d+:.*IPSIS_S06.*found: (value_type)
29 ArrayData\.h:\d+:.*IPSIS_S06.*found: (value_type)
29 DataSeries\.h:\d+:.*IPSIS_S05.*
30 DataSeries\.h:\d+:.*IPSIS_S05.*
30 DataSeries\.h:\d+:.*IPSIS_S06.*found: (iterator_category)
31 DataSeries\.h:\d+:.*IPSIS_S06.*found: (iterator_category)
31 DataSeries\.h:\d+:.*IPSIS_S06.*found: (forward_iterator_tag)
32 DataSeries\.h:\d+:.*IPSIS_S06.*found: (forward_iterator_tag)
32 DataSeries\.h:\d+:.*IPSIS_S06.*found: (value_type)
33 DataSeries\.h:\d+:.*IPSIS_S06.*found: (value_type)
33 DataSeries\.h:\d+:.*IPSIS_S06.*found: (IteratorValue)
34 DataSeries\.h:\d+:.*IPSIS_S06.*found: (IteratorValue)
34 DataSeries\.h:\d+:.*IPSIS_S06.*found: (difference_type)
35 DataSeries\.h:\d+:.*IPSIS_S06.*found: (difference_type)
35 DataSeries\.h:\d+:.*IPSIS_S06.*found: (ptrdiff_t)
36 DataSeries\.h:\d+:.*IPSIS_S06.*found: (ptrdiff_t)
36 DataSeries\.h:\d+:.*IPSIS_S06.*found: (pointer)
37 DataSeries\.h:\d+:.*IPSIS_S06.*found: (pointer)
37 DataSeries\.h:\d+:.*IPSIS_S06.*found: (reference)
38 DataSeries\.h:\d+:.*IPSIS_S06.*found: (reference)
38 DataSeries\.h:\d+:.*IPSIS_S06.*found: (value_type)
39 DataSeries\.h:\d+:.*IPSIS_S06.*found: (value_type)
39
40
40 # Ignore false positive relative to an alias
41 # Ignore false positive relative to an alias
41 DataSourceItemAction\.h:\d+:.*IPSIS_S06.*found: (ExecuteFunction)
42 DataSourceItemAction\.h:\d+:.*IPSIS_S06.*found: (ExecuteFunction)
42
43
43 # Ignore false positive relative to unnamed namespace
44 # Ignore false positive relative to unnamed namespace
44 VariableController\.cpp:\d+:.*IPSIS_F13.*
45 VariableController\.cpp:\d+:.*IPSIS_F13.*
General Comments 0
You need to be logged in to leave comments. Login now