8#include <xtd/collections/generic/helpers/equator>
9#include <xtd/collections/generic/list>
12#include <xtd/argument_out_of_range_exception>
13#include <xtd/event_args>
14#include <xtd/event_handler>
18#include <xtd/usize_object>
40 template<
typename type_t,
typename sorter_t = sorter_none>
50 template<
typename ...args_t>
51 value_type(args_t&& ...args) : type_t(args...) {}
53 if (value.owner) owner = value.owner;
54 if (owner !=
nullptr && !owner->data_->inserting && !owner->data_->erasing) owner->
on_item_updated(pos,
static_cast<type_t&
>(
const_cast<value_type&
>(value)));
55 type_t::operator =(value);
59 if (value.owner) owner = value.owner;
60 if (owner !=
nullptr && !owner->data_->inserting && !owner->data_->erasing) owner->
on_item_updated(pos,
static_cast<type_t&
>(value));
61 type_t::operator =(value);
64 operator type_t() {
return self_;}
69 friend class arranged_element_collection;
71 arranged_element_collection* owner =
nullptr;
167 data_ = std::move(collection.data_);
183 template <std::input_iterator input_iterator_t>
216 const auto&
items()
const {
return data_->items.items();}
219 auto&
items() {
return data_->items.items();}
223 virtual bool sorted() const noexcept {
return data_->sorted;}
227 if (data_->sorted == value)
return self_;
228 data_->sorted = value;
229 if (data_->sorted)
sort();
239 void add(
const type_t& item)
override {
240 data_->items.add(item);
241 size_t index = data_->items.count() - 1;
242 static_cast<value_type&
>(
self_[index]).owner =
this;
243 static_cast<value_type&
>(
self_[index]).pos = index;
245 if (data_->sorted)
sort();
249 virtual void add(type_t&& item) {
250 data_->items.add(item);
251 size_t index = data_->items.count() - 1;
252 static_cast<value_type&
>(
self_[index]).owner =
this;
253 static_cast<value_type&
>(
self_[index]).pos = index;
255 if (data_->sorted)
sort();
261 for (
const auto& item : collection)
266 virtual void add_range(
const std::vector<type_t>& collection) {
267 for (
const auto& item : collection)
272 virtual void add_range(
const std::initializer_list<type_t>& collection) {
273 for (
const auto& item : collection)
278 template<
typename collection_t>
280 for (
auto& item : collection)
285 template<
typename collection_t>
287 for (
const auto& item : collection)
301 bool contains(
const type_t& item)
const noexcept override {
302 return data_->items.contains(item);
312 for (
const type_t& item :
self_) {
314 array[array_index +
i++] = item;
324 const type_t& current()
const override {
327 return items_[index_];
330 bool move_next()
override {
332 return ++index_ < items_.count();
335 void reset()
override {
336 version_ = items_.items().version();
354 data_->inserting =
true;
356 data_->inserting =
false;
357 static_cast<value_type&
>(
self_[index]).owner =
this;
358 static_cast<value_type&
>(
self_[index]).pos = index;
360 if (data_->sorted)
sort();
375 bool remove(
const type_t& item)
override {
376 if (
count() == 0)
return false;
390 data_->erasing =
true;
392 data_->erasing =
false;
412 data_->items.reverse(index,
count);
457 data_->items[index].pos = index >
npos / 2 ?
count() - (
npos - index) : index;
458 data_->items[index].owner =
this;
459 return data_->items[index];
466 data_->items[index].pos = index >
npos / 2 ?
count() - (
npos - index) : index;
468 return data_->items[index];
515 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::items().max_size - Will be removed in version 0.4.0.")]]
526 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::operator [] - Will be removed in version 0.4.0.")]]
528 data_->items[pos].pos = pos;
529 data_->items[pos].owner =
this;
530 return data_->items.at(pos);
536 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::operator [] - Will be removed in version 0.4.0.")]]
542 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::operator [~1_z] - Will be removed in version 0.4.0.")]]
547 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::operator [~1_z] - Will be removed in version 0.4.0.")]]
553 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::items().crbegin - Will be removed in version 0.4.0.")]]
558 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::items().crend - Will be removed in version 0.4.0.")]]
564 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::operator [0] - Will be removed in version 0.4.0.")]]
569 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::operator [0] - Will be removed in version 0.4.0.")]]
575 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::items().get_allocator - Will be removed in version 0.4.0.")]]
582 template<
typename ...args_t>
583 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::insert - Will be removed in version 0.4.0.")]]
585 auto index = pos -
items().begin();
586 data_->inserting =
true;
587 auto result = data_->
items.insert(pos, args...);
588 data_->inserting =
false;
589 self_[index].owner =
this;
590 self_[index].pos = index;
592 if (data_->sorted)
sort();
599 template<
typename ...args_t>
600 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::add - Will be removed in version 0.4.0.")]]
602 data_->items.emplace_back(args...);
603 size_t index = data_->items.count() - 1;
604 self_[index].owner =
this;
605 self_[index].pos = index;
607 if (data_->sorted)
sort();
613 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::remove_at - Will be removed in version 0.4.0.")]]
616 data_->erasing =
true;
617 auto result =
items().erase(pos);
618 data_->erasing =
false;
624 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::remove_at - Will be removed in version 0.4.0.")]]
627 data_->erasing =
true;
628 auto result =
items().erase(pos);
629 data_->erasing =
false;
637 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::remove_at - Will be removed in version 0.4.0.")]]
639 auto result =
items().end();
649 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::remove_at - Will be removed in version 0.4.0.")]]
651 auto result =
items().end();
661 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::remove_at - Will be removed in version 0.4.0.")]]
670 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::insert - Will be removed in version 0.4.0.")]]
672 auto index = pos -
items().begin();
673 data_->inserting =
true;
675 data_->inserting =
false;
676 self_[index].owner =
this;
677 self_[index].pos = index;
679 if (data_->sorted)
sort();
686 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::insert - Will be removed in version 0.4.0.")]]
688 auto index = pos -
items().begin();
689 data_->inserting =
true;
691 data_->inserting =
false;
692 self_[index].owner =
this;
693 self_[index].pos = index;
695 if (data_->sorted)
sort();
703 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::insert - Will be removed in version 0.4.0.")]]
710 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::remove(count() - 1) - Will be removed in version 0.4.0.")]]
718 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::add - Will be removed in version 0.4.0.")]]
725 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::add - Will be removed in version 0.4.0.")]]
727 add(std::move(item));
733 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::add_range - Will be removed in version 0.4.0.")]]
740 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::add_range - Will be removed in version 0.4.0.")]]
747 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::add_range - Will be removed in version 0.4.0.")]]
754 template<
typename collection_t>
755 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::add_range - Will be removed in version 0.4.0.")]]
762 template<
typename iterator_t>
763 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::add_range - Will be removed in version 0.4.0.")]]
771 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::to_array - Will be removed in version 0.4.0.")]]
777 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::items().rbegin - Will be removed in version 0.4.0.")]]
778 auto rbegin() noexcept {
return data_->items.rbegin();}
782 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::items().rbegin - Will be removed in version 0.4.0.")]]
783 auto rbegin() const noexcept {
return data_->items.rbegin();}
788 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::items().rend - Will be removed in version 0.4.0.")]]
789 auto rend() noexcept {
return data_->items.rend();}
793 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::items().rend - Will be removed in version 0.4.0.")]]
794 auto rend() const noexcept {
return data_->items.rend();}
798 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::items().reserve - Will be removed in version 0.4.0.")]]
803 [[deprecated(
"Replaced by xtd::forms::layout::arranged_element_collection::items().shrink_to_fit - Will be removed in version 0.4.0.")]]
828 bool is_read_only() const noexcept
override {
return false;}
829 bool is_synchronized() const noexcept
override {
return false;}
830 const xtd::object& sync_root() const noexcept
override {
return data_->sync_root;}
832 struct data_collection {
833 mutable xtd::collections::generic::list < value_type >
items;
834 bool inserting =
false;
835 bool erasing =
false;
Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the ba...
Definition array.hpp:64
virtual auto items() const noexcept -> const base_type &
Returns the underlying base type items.
Definition basic_array.hpp:111
virtual auto length() const noexcept -> size_type
Gets a size that represents the total number of elements in all the dimensions of the array.
Definition basic_array.hpp:122
static constexpr xtd::usize max_value
Definition box_integer.hpp:71
Exposes the enumerator, which supports a simple iteration over a collection of a specified type.
Definition ienumerable.hpp:40
Supports a simple iteration over a generic collection.
Definition ienumerator.hpp:58
Represents a strongly typed list of objects that can be accessed by index. Provides methods to search...
Definition list.hpp:80
auto insert(size_type index, const type_t &value) -> void override
Determines the index of a specific item in the xtd::collections::generic::list <type_t>.
Definition list.hpp:697
typename xtd::collections::generic::helpers::raw_array< value_type >::base_type base_type
Represents the list base type.
Definition list.hpp:88
const auto & items() const noexcept
Returns the underlying base type items.
Definition list.hpp:251
Provides the base class for a generic read-only collection.
Definition read_only_collection.hpp:38
static auto throws(xtd::helpers::exception_case exception_case, const source_location &location=source_location::current()) -> void
Throws an exption with specified exception case.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:45
object()=default
Create a new instance of the ultimate base class object.
Represents the version number of an assembly, operating system, or the xtd. This class cannot be inhe...
Definition version.hpp:115
@ index_out_of_range
The index is out of range.
Definition exception_case.hpp:61
@ argument_out_of_range
The argument is out of range.
Definition exception_case.hpp:35
@ invalid_operation
The operation is not valid.
Definition exception_case.hpp:65
#define self_
The self_ expression is a reference value expression whose value is the reference of the implicit obj...
Definition self.hpp:20
constexpr xtd::usize npos
Represents a value that is not a valid position in a collection.
Definition npos.hpp:26
xtd::sptr< type_t > ptr
The xtd::ptr object is a shared pointer.
Definition ptr.hpp:27
std::size_t usize
Represents an unsigned size of any object in bytes.
Definition usize.hpp:22
ptr< type_t > new_ptr(args_t &&... args)
The xtd::new_ptr operator creates a xtd::ptr object.
Definition new_ptr.hpp:24
@ other
The operating system is other.
Definition platform_id.hpp:60
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
const xtd::collections::generic::helpers::wrap_pointer_iterator< pointer > iterator
Represents the iterator of read_only_span value type.
Definition read_only_span.hpp:74
const_iterator begin() const
Returns an iterator to the beginning.
Definition read_only_span.hpp:183
read_only_span< type_t, count > first() const
Obtains a subspan consisting of the first count elements of the sequence.
Definition read_only_span.hpp:282
const std::reverse_iterator< xtd::collections::generic::helpers::wrap_pointer_iterator< pointer > > reverse_iterator
Represents the reverse iterator of read_only_span value type.
Definition read_only_span.hpp:78
const_iterator end() const
Returns an iterator to the end.
Definition read_only_span.hpp:213
read_only_span< type_t, count > last() const
Obtains a subspan consisting of the last N elements of the sequence.
Definition read_only_span.hpp:307
const std::reverse_iterator< xtd::collections::generic::helpers::wrap_pointer_iterator< pointer > > const_reverse_iterator
Represents the const reverse iterator of read_only_span value type.
Definition read_only_span.hpp:80
constexpr size_type size() const noexcept
Returns the number of elements.
Definition read_only_span.hpp:241
std::add_cv_t< type_t > value_type
Represents the read_only_span value type.
Definition read_only_span.hpp:60
Contains xtd::forms::layout::sorter_none class.
Supports a simple iteration over a generic collection.
Definition enumerator.hpp:38
Implements a function object for performing comparisons. Unless specialised, invokes operator== on ty...
Definition equator.hpp:39
Contains xtd::helpers::throw_helper class.