PGE API 0.4
PR00F's Game Engine full documentation
Loading...
Searching...
No Matches
blRawIterators.hpp
Go to the documentation of this file.
1#ifndef BL_RAWITERATORS_HPP
2#define BL_RAWITERATORS_HPP
3
4
5//-------------------------------------------------------------------
6// Raw iterator with random access
7//-------------------------------------------------------------------
8template<typename blDataType>
9class blRawIterator : public std::iterator<std::random_access_iterator_tag,
10 blDataType,
11 ptrdiff_t,
12 blDataType*,
13 blDataType&>
14{
15public:
16
17 blRawIterator(blDataType* ptr = nullptr){m_ptr = ptr;}
18 blRawIterator(const blRawIterator<blDataType>& rawIterator) = default;
19
21
23 blRawIterator<blDataType>& operator=(blDataType* ptr){m_ptr = ptr;return (*this);}
24
25 operator bool()const
26 {
27 if(m_ptr)
28 return true;
29 else
30 return false;
31 }
32
33 bool operator==(const blRawIterator<blDataType>& rawIterator)const{return (m_ptr == rawIterator.getConstPtr());}
34 bool operator!=(const blRawIterator<blDataType>& rawIterator)const{return (m_ptr != rawIterator.getConstPtr());}
35
36 blRawIterator<blDataType>& operator+=(const ptrdiff_t& movement){m_ptr += movement;return (*this);}
37 blRawIterator<blDataType>& operator-=(const ptrdiff_t& movement){m_ptr -= movement;return (*this);}
40 blRawIterator<blDataType> operator++(int){auto temp(*this);++m_ptr;return temp;}
41 blRawIterator<blDataType> operator--(int){auto temp(*this);--m_ptr;return temp;}
42 blRawIterator<blDataType> operator+(const ptrdiff_t& movement){auto oldPtr = m_ptr;m_ptr+=movement;auto temp(*this);m_ptr = oldPtr;return temp;}
43 blRawIterator<blDataType> operator-(const ptrdiff_t& movement){auto oldPtr = m_ptr;m_ptr-=movement;auto temp(*this);m_ptr = oldPtr;return temp;}
44
45 ptrdiff_t operator-(const blRawIterator<blDataType>& rawIterator){return std::distance(rawIterator.getPtr(),this->getPtr());}
46
47 blDataType& operator*(){return *m_ptr;}
48 const blDataType& operator*()const{return *m_ptr;}
49 blDataType* operator->(){return m_ptr;}
50
51 blDataType* getPtr()const{return m_ptr;}
52 const blDataType* getConstPtr()const{return m_ptr;}
53
54protected:
55
56 blDataType* m_ptr;
57};
58//-------------------------------------------------------------------
59
60
61//-------------------------------------------------------------------
62// Raw reverse iterator with random access
63//-------------------------------------------------------------------
64template<typename blDataType>
65class blRawReverseIterator : public blRawIterator<blDataType>
66{
67public:
68
69 blRawReverseIterator(blDataType* ptr = nullptr):blRawIterator<blDataType>(ptr){}
70 blRawReverseIterator(const blRawIterator<blDataType>& rawIterator){this->m_ptr = rawIterator.getPtr();}
71 blRawReverseIterator(const blRawReverseIterator<blDataType>& rawReverseIterator) = default;
73
75 blRawReverseIterator<blDataType>& operator=(const blRawIterator<blDataType>& rawIterator){this->m_ptr = rawIterator.getPtr();return (*this);}
76 blRawReverseIterator<blDataType>& operator=(blDataType* ptr){this->setPtr(ptr);return (*this);}
77
78 blRawReverseIterator<blDataType>& operator+=(const ptrdiff_t& movement){this->m_ptr -= movement;return (*this);}
79 blRawReverseIterator<blDataType>& operator-=(const ptrdiff_t& movement){this->m_ptr += movement;return (*this);}
82 blRawReverseIterator<blDataType> operator++(int){auto temp(*this);--this->m_ptr;return temp;}
83 blRawReverseIterator<blDataType> operator--(int){auto temp(*this);++this->m_ptr;return temp;}
84 blRawReverseIterator<blDataType> operator+(const int& movement){auto oldPtr = this->m_ptr;this->m_ptr-=movement;auto temp(*this);this->m_ptr = oldPtr;return temp;}
85 blRawReverseIterator<blDataType> operator-(const int& movement){auto oldPtr = this->m_ptr;this->m_ptr+=movement;auto temp(*this);this->m_ptr = oldPtr;return temp;}
86
87 ptrdiff_t operator-(const blRawReverseIterator<blDataType>& rawReverseIterator){return std::distance(this->getPtr(),rawReverseIterator.getPtr());}
88
89 blRawIterator<blDataType> base(){blRawIterator<blDataType> forwardIterator(this->m_ptr); ++forwardIterator; return forwardIterator;}
90};
91//-------------------------------------------------------------------
92
93
94#endif // BL_RAWITERATORS_HPP
blRawIterator< blDataType > & operator--()
const blDataType * getConstPtr() const
blRawIterator(blDataType *ptr=nullptr)
const blDataType & operator*() const
blRawIterator< blDataType > & operator++()
blDataType * m_ptr
blDataType * getPtr() const
blRawIterator< blDataType > operator+(const ptrdiff_t &movement)
blRawIterator< blDataType > & operator=(const blRawIterator< blDataType > &rawIterator)=default
blRawIterator< blDataType > operator--(int)
bool operator!=(const blRawIterator< blDataType > &rawIterator) const
blRawIterator< blDataType > operator-(const ptrdiff_t &movement)
blRawIterator< blDataType > & operator=(blDataType *ptr)
blRawIterator< blDataType > & operator+=(const ptrdiff_t &movement)
blRawIterator(const blRawIterator< blDataType > &rawIterator)=default
ptrdiff_t operator-(const blRawIterator< blDataType > &rawIterator)
blDataType & operator*()
blRawIterator< blDataType > operator++(int)
blRawIterator< blDataType > & operator-=(const ptrdiff_t &movement)
bool operator==(const blRawIterator< blDataType > &rawIterator) const
blDataType * operator->()
blRawReverseIterator< blDataType > & operator+=(const ptrdiff_t &movement)
blRawReverseIterator< blDataType > operator-(const int &movement)
blRawIterator< blDataType > base()
blRawReverseIterator< blDataType > operator+(const int &movement)
blRawReverseIterator< blDataType > & operator--()
blRawReverseIterator< blDataType > & operator-=(const ptrdiff_t &movement)
blRawReverseIterator< blDataType > & operator=(const blRawReverseIterator< blDataType > &rawReverseIterator)=default
blRawReverseIterator< blDataType > operator++(int)
blRawReverseIterator(const blRawIterator< blDataType > &rawIterator)
blRawReverseIterator< blDataType > & operator=(const blRawIterator< blDataType > &rawIterator)
ptrdiff_t operator-(const blRawReverseIterator< blDataType > &rawReverseIterator)
blRawReverseIterator< blDataType > & operator++()
blRawReverseIterator< blDataType > & operator=(blDataType *ptr)
blRawReverseIterator(const blRawReverseIterator< blDataType > &rawReverseIterator)=default
blRawReverseIterator< blDataType > operator--(int)
blRawReverseIterator(blDataType *ptr=nullptr)