1#ifndef QELOQUENT_LISTPROXY_H
2#define QELOQUENT_LISTPROXY_H
4#include <QEloquent/global.h>
11class AbstractListProxy
14 virtual ~AbstractListProxy() =
default;
17 using iterator = QList<T>::iterator;
18 using const_iterator = QList<T>::const_iterator;
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(); }
34 int count()
const {
return constList()->count(); }
36 int size()
const {
return count(); }
38 bool isEmpty()
const {
return count() == 0; }
41 const T &at(
int i)
const {
return constList()->at(i); }
43 const T &operator[](
int i)
const {
return at(i); }
46 T first()
const {
return count() > 0 ? at(0) : T(); }
48 T last()
const {
return count() > 0 ? at(count() - 1) : T(); }
51 virtual const QList<T> *constList()
const = 0;
52 virtual QList<T> *mutableList() = 0;
56class ListProxy :
public AbstractListProxy<T>
59 const QList<T> *constList()
const override {
return &m_proxy; }
60 QList<T> *mutableList()
override {
return &m_proxy; }