##// END OF EJS Templates
Adds the ability to force an acquisition pending for an operation (1)...
Adds the ability to force an acquisition pending for an operation (1) Creates struct that contains operation properties: - its weight - the flag to force acquisition waiting

File last commit:

r763:fb27cebc64ba
r1249:b9a47ff1b9cc
Show More
SqpIterator.h
112 lines | 3.0 KiB | text/x-c | CLexer
Alexandre Leroux
Updates DataSeriesIterator to make an iterator general to SciQlop
r639 #ifndef SCIQLOP_SQPITERATOR_H
#define SCIQLOP_SQPITERATOR_H
#include "CoreGlobal.h"
/**
* @brief The SqpIterator class represents an iterator used in SciQlop. It defines all operators
* needed for a standard forward iterator
* @tparam T the type of object handled in iterator
* @sa http://www.cplusplus.com/reference/iterator/
*/
template <typename T>
class SCIQLOP_CORE_EXPORT SqpIterator {
public:
Alexandre Leroux
Makes random access iterators...
r689 using iterator_category = std::random_access_iterator_tag;
Alexandre Leroux
Updates DataSeriesIterator to make an iterator general to SciQlop
r639 using value_type = const T;
using difference_type = std::ptrdiff_t;
using pointer = value_type *;
using reference = value_type &;
explicit SqpIterator(T value) : m_CurrentValue{std::move(value)} {}
virtual ~SqpIterator() noexcept = default;
SqpIterator(const SqpIterator &) = default;
Few corrections
r763 SqpIterator &operator=(SqpIterator other)
{
swap(m_CurrentValue, other.m_CurrentValue);
return *this;
}
Alexandre Leroux
Updates DataSeriesIterator to make an iterator general to SciQlop
r639
SqpIterator &operator++()
{
m_CurrentValue.next();
return *this;
}
SqpIterator &operator--()
{
m_CurrentValue.prev();
return *this;
}
Alexandre Leroux
Makes random access iterators...
r689 SqpIterator operator++(int)const
{
auto result = *this;
this->operator++();
return result;
}
SqpIterator operator--(int)const
{
auto result = *this;
this->operator--();
return result;
}
SqpIterator &operator+=(int offset)
{
if (offset >= 0) {
Alexandre Leroux
Improves random access iterator performance
r697 m_CurrentValue.next(offset);
Alexandre Leroux
Makes random access iterators...
r689 }
else {
while (offset++) {
m_CurrentValue.prev();
}
}
return *this;
}
SqpIterator &operator-=(int offset) { return *this += -offset; }
SqpIterator operator+(int offset) const
{
auto result = *this;
result += offset;
return result;
}
SqpIterator operator-(int offset) const
{
auto result = *this;
result -= offset;
return result;
}
int operator-(const SqpIterator &other) const
{
return m_CurrentValue.distance(other.m_CurrentValue);
}
Alexandre Leroux
Adapts SqpIterator to make non-const iterators
r673 const T *operator->() const { return &m_CurrentValue; }
const T &operator*() const { return m_CurrentValue; }
T *operator->() { return &m_CurrentValue; }
T &operator*() { return m_CurrentValue; }
Alexandre Leroux
Makes random access iterators...
r689 T &operator[](int offset) const { return m_CurrentValue.advance(offset); }
Alexandre Leroux
Updates DataSeriesIterator to make an iterator general to SciQlop
r639
bool operator==(const SqpIterator &other) const
{
return m_CurrentValue.equals(other.m_CurrentValue);
}
bool operator!=(const SqpIterator &other) const { return !(*this == other); }
Alexandre Leroux
Makes random access iterators...
r689 bool operator>(const SqpIterator &other) const { return other.m_CurrentValue.lowerThan(*this); }
bool operator<(const SqpIterator &other) const
{
return m_CurrentValue.lowerThan(other.m_CurrentValue);
}
bool operator>=(const SqpIterator &other) const { return !(*this < other); }
bool operator<=(const SqpIterator &other) const { return !(*this > other); }
Alexandre Leroux
Updates DataSeriesIterator to make an iterator general to SciQlop
r639
private:
T m_CurrentValue;
};
#endif // SCIQLOP_SQPITERATOR_H