CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
queue.h
1
2#ifndef _aspose_system_collections_queue_h_
3#define _aspose_system_collections_queue_h_
4
5#include "system/object.h"
6#include "system/collections/base_enumerator.h"
7#include "system/collections/ienumerable.h"
8#include "system/collections/icollection.h"
9#include "system/cycles_detection.h"
10
11#include <list>
12
13namespace System {
14namespace Collections {
15namespace Generic {
16
18template<typename T> class Queue;
19
24template<typename T>
25class ASPOSECPP_SHARED_CLASS QueuePtr : public SharedPtr<Queue<T> >
26{
27public:
32 QueuePtr(const SharedPtr<Queue<T> >& obj) : SharedPtr<Queue<T> >(obj) { }
33};
34
86template<typename T>
87class ASPOSECPP_SHARED_CLASS Queue : public IEnumerable<T>
88{
89 ASPOSE_COLLECTION_POINTER_MODE_CONTROL(T)
90
91public:
93 typedef T ValueType;
94
95private:
97 RTTI_INFO_TEMPLATE_CLASS(System::Collections::Generic::Queue<T>, System::BaseTypesInfo<System::Object>);
98
99public:
101 typedef std::list<T, ASPOSE_COLLECTION_ALLOCATOR_TYPE> queue_t;
102
103protected:
107 typedef typename queue_t::iterator queueIt_t;
110
111public:
116
121 class Enumerator : public SimpleEnumerator<queue_t>
122 {
123 public:
126 Enumerator(const ThisPtr& data) : SimpleEnumerator<queue_t>(data, data->m_data) { }
128 RTTI_INFO_TEMPLATE_CLASS(Queue<T>::Enumerator, System::BaseTypesInfo<System::Object>);
129 };
130
132 Queue() : ASPOSE_COLLECTION_INIT_ALLOCATOR() {}
136 Queue(int capacity) : ASPOSE_COLLECTION_INIT_ALLOCATOR()
137 {
138 if (capacity < 0) {
139 throw ArgumentOutOfRangeException(u"capacity");
140 }
141 }
145 Queue(const SharedPtr<IEnumerable<T>>& items) : ASPOSE_COLLECTION_INIT_ALLOCATOR()
146 {
147 if (!items)
148 {
149 throw ArgumentNullException(u"items");
150 }
151
152 auto e = items->GetEnumerator();
153 while (e->MoveNext())
154 m_data.push_back(e->get_Current());
155 }
156
160 {
161 return MakeObject<Enumerator>(MakeSharedPtr(this));
162 }
163
166 virtual int get_Count() const
167 {
168 return ASPOSECPP_CHECKED_CAST(int, m_data.size());
169 }
171 virtual void Clear()
172 {
173 m_data.clear();
174 }
175
179 virtual bool Contains(const T& item) const
180 {
181 return std::find(m_data.begin(), m_data.end(), item) != m_data.end();
182 }
185 void Enqueue(const T& item)
186 {
187 m_data.push_back(item);
188 }
193 {
194 if (m_data.empty())
195 {
196 throw InvalidOperationException(u"Queue is empty");
197 }
198 T rv = m_data.front();
199 m_data.pop_front();
200 return rv;
201 }
206 {
207 if (m_data.empty())
208 {
209 throw InvalidOperationException(u"Queue is empty");
210 }
211 return m_data.front();
212 }
213
216 queue_t& data() { return m_data; }
219 const queue_t& data() const { return m_data; }
220
222 System::Details::VirtualizedIteratorBase<T>* virtualizeBeginIterator() override
223 {
224 return new System::Details::NativeIteratorWrapper<T, typename queue_t::iterator>(m_data.begin(), m_data.end());
225 }
227 System::Details::VirtualizedIteratorBase<T>* virtualizeEndIterator() override
228 {
229 return new System::Details::NativeIteratorWrapper<T, typename queue_t::iterator>(m_data.end(), m_data.end());
230 }
232 System::Details::VirtualizedIteratorBase<T>* virtualizeBeginConstIterator() const override
233 {
234 return new System::Details::NativeConstIteratorWrapper<T, typename queue_t::const_iterator>(m_data.begin(), m_data.end());
235 }
237 System::Details::VirtualizedIteratorBase<T>* virtualizeEndConstIterator() const override
238 {
239 return new System::Details::NativeConstIteratorWrapper<T, typename queue_t::const_iterator>(m_data.end(), m_data.end());
240 }
241
242protected:
244 ~Queue() override {}
245
246#ifdef __DBG_FOR_EACH_MEMBER
247public:
250 void DBG_for_each_member(DBG::for_each_member_visitor &visitor) const override
251 {
252 visitor.add_self(this);
253 DBG::for_each_of_Object(this, m_data, visitor);
254 }
255
258 const char* DBG_class_name() const override { return "Queue<T>"; }
259#endif
260
261protected:
262#ifdef ASPOSE_GET_SHARED_MEMBERS
264 DEFINE_GET_SHARED_MEMBERS(m_data)
265#endif
266};
267
268} // namespace Generic
269} // namespace Collections
270} // namespace System
271
272#endif // _aspose_system_collections_queue_h_
Interface of object providing enumerator on contained elements.
Definition: ienumerable.h:25
Enumerator to iterate through queue. Objects of this class should only be allocated using System::Mak...
Definition: queue.h:122
RTTI_INFO_TEMPLATE_CLASS(Queue< T >::Enumerator, System::BaseTypesInfo< System::Object >)
RTTI information.
Enumerator(const ThisPtr &data)
Constructs enumerator pointing to specific queue.
Definition: queue.h:126
Queue class forward declaration.
Definition: queue.h:88
System::Details::VirtualizedIteratorBase< T > * virtualizeBeginConstIterator() const override
Gets the implementation of begin const iterator for the current container.
Definition: queue.h:232
Queue()
Constructs empty queue.
Definition: queue.h:132
System::Details::VirtualizedIteratorBase< T > * virtualizeBeginIterator() override
Gets the implementation of begin iterator for the current container.
Definition: queue.h:222
IEnumeratorPtr GetEnumerator() override
Gets enumerator to iterate through the queue.
Definition: queue.h:159
std::list< T, ASPOSE_COLLECTION_ALLOCATOR_TYPE > queue_t
Underlying data type.
Definition: queue.h:101
T Dequeue()
Gets item from the beginning of the queue.
Definition: queue.h:192
queue_t m_data
Wrapped data structure.
Definition: queue.h:109
System::Details::VirtualizedIteratorBase< T > * virtualizeEndConstIterator() const override
Gets the implementation of end const iterator for the current container.
Definition: queue.h:237
void Enqueue(const T &item)
Puts item to the end of the queue.
Definition: queue.h:185
virtual void Clear()
Deletes all elements in queue.
Definition: queue.h:171
SharedPtr< IEnumerable< T > > IEnumerablePtr
Container of same type elements.
Definition: queue.h:113
System::Details::VirtualizedIteratorBase< T > * virtualizeEndIterator() override
Gets the implementation of end iterator for the current container.
Definition: queue.h:227
queue_t & data()
Underlying data structure accessor.
Definition: queue.h:216
SharedPtr< IEnumerator< T > > IEnumeratorPtr
Enumerator type.
Definition: queue.h:115
T Peek()
Gets item from the beginning of the queue, but does not remove it from queue.
Definition: queue.h:205
SharedPtr< Queue< T > > ThisPtr
Pointer type.
Definition: queue.h:105
~Queue() override
Destructor.
Definition: queue.h:244
virtual int get_Count() const
Gets number of elements in queue.
Definition: queue.h:166
Queue(const SharedPtr< IEnumerable< T > > &items)
Copy constructor.
Definition: queue.h:145
T ValueType
This type.
Definition: queue.h:93
queue_t::iterator queueIt_t
Iterator type.
Definition: queue.h:107
const queue_t & data() const
Underlying data structure accessor.
Definition: queue.h:219
virtual bool Contains(const T &item) const
Checks if queue contains specific element using operator == to compare elements.
Definition: queue.h:179
Queue(int capacity)
Constructs empty queue.
Definition: queue.h:136
Queue pointer. This type is a pointer to manage other object's deletion. It should be allocated on st...
Definition: queue.h:26
QueuePtr()
Constructs null pointer.
Definition: queue.h:29
QueuePtr(const SharedPtr< Queue< T > > &obj)
Constructs pointer to specific queue.
Definition: queue.h:32
Iterator class for simple containers holding elements directly using rbegin() and rend() functions....
Definition: base_enumerator.h:81
Pointer class to wrap types being allocated on heap. Use it to manage memory for classes inheriting O...
Definition: smart_ptr.h:180
Definition: db_command.h:9
SmartPtr< X > MakeSharedPtr(X *p)
Converts raw pointer to smart pointer.
Definition: smart_ptr.h:1650