xtd 1.0.0
Loading...
Searching...
No Matches
concurrent_queue.hpp
Go to the documentation of this file.
1
4#pragma once
8#include "../../object.hpp"
9#include "../../unused.hpp"
10
12namespace xtd {
14 namespace collections {
17 namespace concurrent {
33 template<typename type_t>
35 public:
37
48
50
53 concurrent_queue() = default;
56 concurrent_queue(std::initializer_list<type_t> items) {
57 for (const auto& item : items)
58 enqueue(item);
59 }
60
62 for (const auto& item : collection)
63 enqueue(item);
64 }
65
66
68
72 [[nodiscard]] auto count() const noexcept -> xtd::usize override {
73 lock_guard_(items_)
74 return items_.count();
75 return {};
76 }
77
81 [[nodiscard]] auto is_read_only() const noexcept -> bool override {return false;}
82
97 [[nodiscard]] auto is_synchronized() const noexcept -> bool override {return true;}
99
101
103 auto clear() -> void override {
104 lock_guard_(items_)
105 items_.clear();
106 }
107
112 auto copy_to(xtd::array<value_type>& array, xtd::usize array_index) const -> void override {
113 lock_guard_(items_)
114 items_.copy_to(array, array_index);
115 }
116
120 virtual auto enqueue(const_reference item) -> void {
121 lock_guard_(items_)
122 items_.enqueue(item);
123 }
124
128 [[nodiscard]] auto get_enumerator() const -> xtd::collections::generic::enumerator<value_type> override {
129 static thread_local auto items = xtd::array<value_type> {};
130 items = to_array();
131 return items.get_enumerator();
132 }
133
137 [[nodiscard]] auto to_array() const -> xtd::array<value_type> override {
138 lock_guard_(items_)
139 return items_.to_array();
140 return {};
141 }
142
145 [[nodiscard]] auto to_string() const noexcept -> xtd::string override {
146 return to_array().to_string();
147 }
148
152 virtual auto try_dequeue(reference result) -> bool {
153 lock_guard_(items_)
154 return items_.try_dequeue(result);
155 return false;
156 }
157
161 auto try_peek(reference result) const -> bool {
162 lock_guard_(items_)
163 return items_.try_peek(result);
164 return false;
165 }
166
167
168 private:
169 auto add(const_reference item) -> void override {enqueue(item);}
170 [[nodiscard]] auto contains(const_reference item) const noexcept -> bool override {return false;}
171 auto remove(const_reference item) -> bool override {return false;}
172 [[nodiscard]] auto sync_root() const noexcept -> const object& override {return items_;}
173 auto try_add(const_reference item) -> bool override {return false;}
174 auto try_take(reference item) -> bool override {return try_dequeue(item);}
175
176 collection_type items_;
177 };
178 }
179 }
180}
Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the ba...
Definition array.hpp:64
auto is_synchronized() const noexcept -> bool override
Gets a value indicating whether access to the xtd::collections::concurrent::concurrent_queue <type_t>...
Definition concurrent_queue.hpp:97
auto try_peek(reference result) const -> bool
Tries to return an object from the beginning of the xtd::collections::concurrent::concurrent_queue <t...
Definition concurrent_queue.hpp:161
const value_type & const_reference
Represents the const reference of list value type.
Definition concurrent_queue.hpp:44
value_type & reference
Represents the reference of list value type.
Definition concurrent_queue.hpp:42
auto is_read_only() const noexcept -> bool override
Gets a value indicating whether the xtd::collections::concurrent::concurrent_queue <type_t> is read-o...
Definition concurrent_queue.hpp:81
typename iproducer_consumer_collection< type_t >::value_type value_type
Represents the concurrent bag value type.
Definition concurrent_queue.hpp:40
auto count() const noexcept -> xtd::usize override
Gets the number of elements contained in the xtd::collections::generic::icollection.
Definition concurrent_queue.hpp:72
xtd::collections::generic::queue< value_type > collection_type
Represents the concurrent bag collection type.
Definition concurrent_queue.hpp:46
auto get_enumerator() const -> xtd::collections::generic::enumerator< value_type > override
Returns an enumerator that iterates through a collection.
Definition concurrent_queue.hpp:128
auto to_string() const noexcept -> xtd::string override
Returns a xtd::string that represents the current object.
Definition concurrent_queue.hpp:145
concurrent_queue(std::initializer_list< type_t > items)
Constructs the container with the contents of the specified initializer list, and allocator.
Definition concurrent_queue.hpp:56
concurrent_queue(const xtd::collections::generic::ienumerable< value_type > &collection)
Initializes a new instance of the xtd::collections::concurrent::concurrent_queue <type_t> class that ...
Definition concurrent_queue.hpp:61
auto to_array() const -> xtd::array< value_type > override
Copies the elements contained in the xtd::collections::concurrent::concurrent_queue <type_t> to a new...
Definition concurrent_queue.hpp:137
virtual auto enqueue(const_reference item) -> void
Adds an item to the end of the xtd::collections::concurrent::concurrent_queue <type_t>.
Definition concurrent_queue.hpp:120
virtual auto try_dequeue(reference result) -> bool
Tries to remove and return the object at the beginning of the concurrent queue.
Definition concurrent_queue.hpp:152
auto clear() -> void override
Removes all items from the xtd::collections::generic::icollection <type_t>.
Definition concurrent_queue.hpp:103
auto copy_to(xtd::array< value_type > &array, xtd::usize array_index) const -> void override
Copies the elements of the xtd::collections::concurrent::concurrent_queue <type_t> to an xtd::array,...
Definition concurrent_queue.hpp:112
concurrent_queue()=default
Initializes a new instance of the xtd::collections::concurrent::concurrent_queue <type_t> class.
Defines methods to manipulate thread-safe collections intended for producer/consumer usage....
Definition iproducer_consumer_collection.hpp:30
virtual auto sync_root() const noexcept -> const object &=0
Gets an object that can be used to synchronize access to the the xtd::collections::generic::icollecti...
virtual auto to_array() const -> xtd::array< type_t >=0
Copies the elements contained in the xtd::collections::concurrent::iproducer_consumer_collection <typ...
typename xtd::collections::generic::ienumerable< type_t >::value_type value_type
Represents the xtd::collections::generic::icollection value type.
Definition icollection.hpp:51
Exposes the enumerator, which supports a simple iteration over a collection of a specified type.
Definition ienumerable.hpp:40
Represents a first-in, first-out collection of objects.
Definition queue.hpp:47
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:45
Contains xtd::collections::generic::queue <value_t> class.
generic::enumerator< xtd::any_object > enumerator
Supports a simple iteration over a non-generic collection.
Definition enumerator.hpp:28
#define lock_guard_(object)
The lock_guard_ keyword marks a statement block_guard as a critical section by obtaining the mutual-e...
Definition lock_guard.hpp:65
std::size_t usize
Represents an unsigned size of any object in bytes.
Definition usize.hpp:22
Contains xtd::collections::concurrent::iproducer_consumer_collection <type_t> interface.
Provides several thread-safe collection classes that should be used in place of the corresponding typ...
Definition concurrent_bag.hpp:20
The xtd::collections::generic namespace contains interfaces and classes that define generic collectio...
Definition comparer.hpp:16
The xtd::collections namespace contains interfaces and classes that define various collections of obj...
Definition any_pair.hpp:10
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
const type_t & const_reference
Represents the read_only_span const reference type.
Definition read_only_span.hpp:69
Contains xtd::object class.
Contains xtd::threading::lock_guard class.
Contains __ and unused_ keywords.