7#include <xtd/argument_out_of_range_exception>
8#include <xtd/event_args>
9#include <xtd/event_handler>
12#include <xtd/size_object>
33 template<
typename type_t,
typename sorter_t = sorter_none>
43 template <
typename ...args_t>
44 value_type(args_t&& ...args) : type_t(args...) {}
46 if (value.owner) owner = value.owner;
47 if (owner !=
nullptr && !owner->inserting_ && !owner->erasing_) owner->
on_item_updated(pos,
static_cast<type_t&
>(
const_cast<value_type&
>(value)));
48 type_t::operator =(value);
52 if (value.owner) owner = value.owner;
53 if (owner !=
nullptr && !owner->inserting_ && !owner->erasing_) owner->
on_item_updated(pos,
static_cast<type_t&
>(value));
54 type_t::operator =(value);
57 operator type_t() {
return *
this;}
58 friend std::ostream& operator <<(std::ostream& os,
const value_type& value) {
return os << static_cast<const type_t&>(value);}
81 using pointer =
typename std::allocator_traits<allocator_type>::pointer;
83 using const_pointer =
typename std::allocator_traits<allocator_type>::const_pointer;
85 using iterator =
typename std::vector<value_type>::iterator;
118 for (
auto item : collection)
121 arranged_element_collection(
const arranged_element_collection& collection) {
push_back_range(collection);}
122 arranged_element_collection& operator =(
const arranged_element_collection& collection) {
127 arranged_element_collection(arranged_element_collection&&) =
default;
128 bool operator ==(
const arranged_element_collection& value)
const {
return collection_ == value.collection_;}
129 bool operator !=(
const arranged_element_collection& value)
const {
return !operator ==(value);}
143 collection_[pos].pos = pos;
144 collection_[pos].owner =
this;
145 return collection_.at(pos);
215 bool empty() const noexcept {
return collection_.empty();}
237 virtual bool sorted() const noexcept {
return sorted_;}
241 if (sorted_ != value) {
258 size_t index = pos -
begin();
260 iterator result = collection_.insert(pos, value);
262 (*this)[index].owner =
this;
263 (*this)[index].pos = index;
272 size_t index = pos -
begin();
274 iterator result = collection_.insert(pos, value);
276 (*this)[index].owner =
this;
277 (*this)[index].pos = index;
294 template<
typename ...args_t>
296 size_t index = pos -
begin();
298 iterator result = collection_.insert(pos, args...);
300 (*this)[index].owner =
this;
301 (*this)[index].pos = index;
309 template<
typename ...args_t>
311 collection_.push_back(args...);
312 size_t index = collection_.size() - 1;
313 (*this)[index].owner =
this;
314 (*this)[index].pos = index;
324 iterator result = collection_.erase(pos);
333 iterator result = collection_.erase(pos);
343 for (
iterator it = first; it <= last; ++it)
372 collection_.push_back(item);
373 size_t index = collection_.size() - 1;
374 (*this)[index].owner =
this;
375 (*this)[index].pos = index;
382 collection_.push_back(item);
383 size_t index = collection_.size() - 1;
384 (*this)[index].owner =
this;
385 (*this)[index].pos = index;
410 template<
typename collection_t>
412 for (
auto& item : collection)
417 template<
typename iterator_t>
419 for (
auto it =
begin; it !=
end; ++it)
432 std::vector<type_t>
array;
433 std::for_each(collection_.begin(), collection_.end(), [&](
auto item) {array.push_back(item);});
448 collection_[pos].pos = pos;
449 collection_[pos].owner =
this;
450 return collection_[pos];
455 collection_[pos].pos = pos;
457 return collection_[pos];
503 mutable std::vector<value_type, allocator_type> collection_;
504 bool inserting_ =
false;
505 bool erasing_ =
false;
506 bool sorted_ =
false;
The exception that is thrown when one of the arguments provided to a method is out of range.
Definition argument_out_of_range_exception.hpp:23
Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the ba...
Definition array.hpp:58
static constexpr type_t max_value
Represents the largest possible value of type_t. This field is constant.
Definition box_integer.hpp:67
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:42
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.hpp:10
Contains xtd::forms::layout::sorter_none class.