QEloquent 1.1.0
Qt most flexible ORM.
Loading...
Searching...
No Matches
listproxy.h
1#ifndef QELOQUENT_LISTPROXY_H
2#define QELOQUENT_LISTPROXY_H
3
4#include <QEloquent/global.h>
5
6#include <QList>
7
8namespace QEloquent {
9
10template<typename T>
11class AbstractListProxy
12{
13public:
14 virtual ~AbstractListProxy() = default;
15
16 using value_type = T; // For MOC
17 using iterator = QList<T>::iterator;
18 using const_iterator = QList<T>::const_iterator;
19
21 iterator begin() { return mutableList()->begin(); }
23 iterator end() { return mutableList()->end(); }
25 const_iterator begin() const { return constList()->begin(); }
27 const_iterator end() const { return constList()->end(); }
29 const_iterator cbegin() const { return constList()->cbegin(); }
31 const_iterator cend() const { return constList()->cend(); }
32
34 int count() const { return constList()->count(); }
36 int size() const { return count(); }
38 bool isEmpty() const { return count() == 0; }
39
41 const T &at(int i) const { return constList()->at(i); }
43 const T &operator[](int i) const { return at(i); }
44
46 T first() const { return count() > 0 ? at(0) : T(); }
48 T last() const { return count() > 0 ? at(count() - 1) : T(); }
49
50protected:
51 virtual const QList<T> *constList() const = 0;
52 virtual QList<T> *mutableList() = 0;
53};
54
55template<typename T>
56class ListProxy : public AbstractListProxy<T>
57{
58public:
59 const QList<T> *constList() const override { return &m_proxy; }
60 QList<T> *mutableList() override { return &m_proxy; }
61
62private:
63 QList<T> m_proxy;
64};
65
66} // namespace QEloquent
67
68#endif // QELOQUENT_LISTPROXY_H