30 using self = AListModel<StoredType>;
33 using iterator =
typename decltype(mVector)::iterator;
34 using const_iterator =
typename decltype(mVector)::const_iterator;
35 using size_type =
typename decltype(mVector)::size_type;
36 using value_type =
typename decltype(mVector)::value_type;
38 AListModel() =
default;
39 AListModel(
const self& s): mVector(s.mVector) {}
40 AListModel(self&& s)
noexcept: mVector(std::move(s.mVector)) {}
45 mVector = std::move(rhs);
51 void setItem(
const AListModelIndex& item,
const StoredType& value)
override {
52 mVector[item.getRow()] = value;
56 bool empty()
const noexcept {
57 return mVector.empty();
59 void reserve(
size_t s)
noexcept {
62 void resize(
size_t s)
noexcept {
66 iterator erase(iterator begin)
noexcept {
67 return this->erase(begin, begin + 1);
69 iterator erase(iterator begin, iterator end)
noexcept {
71 return mVector.erase(begin, end);
74 auto range = this->range(
AListModelIndex{size_t(begin - mVector.begin())},
76 auto it = mVector.erase(begin, end);
82 void push_back(
const StoredType& data) {
83 insert(end(), std::move(data));
86 void push_back(StoredType&& data) {
87 insert(end(), std::forward<StoredType>(data));
90 auto insert(const_iterator
at, StoredType data) ->
decltype(mVector.insert(
at, std::move(data))) {
91 auto result = mVector.insert(
at, std::move(data));
100 template<
typename Iterator>
101 auto insert(const_iterator
at, Iterator begin, Iterator end) ->
decltype(mVector.insert(
at, begin, end)) {
102 auto result = mVector.insert(
at, begin, end);
111 void pop_back()
noexcept {
120 AListModel& operator<<(
const StoredType& data) {
124 AListModel& operator<<(StoredType&& data) {
125 push_back(std::forward<StoredType>(data));
129 size_t listSize()
override {
130 return mVector.size();
134 return mVector.at(index.getRow());
137 void invalidate(
size_t index) {
144 void invalidate(iterator index) {
145 invalidate(std::distance(begin(), index));
148 void clear()
noexcept {
149 erase(mVector.begin(), mVector.end());
153 erase(mVector.begin() + items.begin().getIndex().getRow(), mVector.end() + items.begin().getIndex().getRow());
157 erase(mVector.begin() + item.getRow());
161 size_t size()
const noexcept {
162 return mVector.size();
176 const StoredType&
at(
size_t index)
const {
177 if (index >= size())
throw AException(
"index of bounds: {} (size {})"_format(index, size()));
178 return *(mVector.begin() + index);
199 StoredType&
at(
size_t index) {
200 if (index >= size())
throw AException(
"index of bounds: {} (size {})"_format(index, size()));
201 return *(mVector.begin() + index);
212 AUI_ASSERTX(size() > index,
"index out of bounds");
213 return *(mVector.begin() + index);
229 const_iterator begin()
const {
230 return mVector.begin();
232 const_iterator end()
const {
233 return mVector.end();
237 return mVector.begin();
240 return mVector.end();
250 template<
typename V = StoredType>
252 auto list = _new<AListModel<StoredType>>();
253 list->reserve(t.size());
254 for (
auto& item : t) {
255 list->push_back(item);
267 template<
typename V = StoredType>
269 auto list = _new<AListModel<StoredType>>();
270 list->mVector = std::move(t);
283 auto list = _new<AListModel<StoredType>>();
288 template<
typename UnaryOperation>
289 auto map(UnaryOperation&& transformer) {
290 return mVector.map(std::forward<UnaryOperation>(transformer));
294 const AVector<StoredType>& toVector() noexcept {
299 bool operator==(
const AListModel& rhs)
const noexcept {
300 return mVector == rhs.mVector;
304 bool operator!=(
const AListModel& rhs)
const noexcept {
305 return mVector != rhs.mVector;
void remove_at(Container &c, size_t index) noexcept
Removes element at the specified index.
Definition containers.h:98
#define AUI_ASSERTX(condition, what)
Asserts that the passed condition evaluates to true. Adds extra message string.
Definition Assert.h:74