@@ -35,9 +35,73 @@ class Row
3535 return mID ;
3636 }
3737
38+ /* *
39+ * @brief RandomAccessIterator for row columns.
40+ */
41+ class ColumnIterator
42+ {
43+ public:
44+ // TODO: using iterator_category = std::random_access_iterator_tag;
45+ using iterator_category = std::bidirectional_iterator_tag;
46+ using value_type = Column;
47+ using reference = const Column&;
48+ using pointer = const Column*;
49+ using difference_type = std::ptrdiff_t ;
50+
51+ ColumnIterator () = default ;
52+ ColumnIterator (TStatementPtr apStatement, uint16_t aID) :
53+ mpStatement (apStatement), mID (aID), mColumn (apStatement, aID) {}
54+
55+ reference operator *() const noexcept
56+ {
57+ return mColumn ;
58+ }
59+ pointer operator ->() const noexcept
60+ {
61+ return &mColumn ;
62+ }
63+
64+ ColumnIterator& operator ++() noexcept
65+ {
66+ mColumn = Column (mpStatement, ++mID );
67+ return *this ;
68+ }
69+ ColumnIterator operator ++(int ) noexcept
70+ {
71+ ColumnIterator copy{ *this };
72+ mColumn = Column (mpStatement, ++mID );
73+ return copy;
74+ }
75+ ColumnIterator& operator --() noexcept
76+ {
77+ mColumn = Column (mpStatement, --mID );
78+ return *this ;
79+ }
80+ ColumnIterator operator --(int ) noexcept
81+ {
82+ ColumnIterator copy{ *this };
83+ mColumn = Column (mpStatement, --mID );
84+ return copy;
85+ }
86+
87+ bool operator ==(const ColumnIterator& aIt) const noexcept ;
88+ bool operator !=(const ColumnIterator& aIt) const noexcept
89+ {
90+ return !(*this == aIt);
91+ }
92+
93+ private:
94+ TStatementPtr mpStatement{}; // !< Shared pointer to prepared Statement Object
95+ std::size_t mRowID {}; // !< Current row number
96+ uint16_t mID {}; // !< Current column number
97+
98+ // / Internal column object storage
99+ Column mColumn { mpStatement, mID };
100+ };
101+
38102private:
39103 TStatementWeakPtr mpStatement;
40- std::size_t mID ;
104+ std::size_t mID ;
41105};
42106
43107} // namespace SQLite
0 commit comments