CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
bitarray.h
1
2#ifndef _BitArray_h_
3#define _BitArray_h_
4
5#include "system/collections/icollection.h"
6#include "system/collections/ienumerable.h"
7#include "system/array.h"
8
9#include <memory>
10#include <vector>
11
12
13#ifdef ASPOSECPPLIB_BEING_BUILT
14#include <boost/dynamic_bitset.hpp>
15#endif
16
17
18namespace boost {
20 template <class, class> class dynamic_bitset;
21}
22
23
24namespace System {
25namespace Collections {
26
27namespace Detail{
29 typedef boost::dynamic_bitset<uint32_t, std::allocator<uint32_t>> BitsetType;
30
32 struct BitsetSizeEquivalent
33 {
35 std::vector<uint32_t> m_data;
37 std::size_t m_size;
38 };
40 struct BitsetReferenceSizeEquivalent
41 {
43 uint32_t &m_ref;
45 uint32_t m_mask;
47 BitsetReferenceSizeEquivalent() = delete;
48 };
49
51 ASPOSECPP_3RD_PARTY_TYPE_HOLDER(BitsetType, dynamic_bitset, sizeof(BitsetSizeEquivalent), std::uint32_t*, BitsetHolder);
53 ASPOSECPP_3RD_PARTY_TYPE_HOLDER_HIDDEN_TYPE(BitsetType::reference, reference, sizeof(BitsetReferenceSizeEquivalent), BitsetReferenceSizeEquivalent, BitsetReferenceHolder);
54}
55
57class ASPOSECPP_SHARED_CLASS BitArrayPtr;
58
94class ASPOSECPP_SHARED_CLASS BitArray
95 : virtual public Object
96 , public Generic::ICollection<bool>
97{
99 RTTI_INFO(BitArray, ::System::BaseTypesInfo<System::Object>);
100
101public:
103 typedef Detail::BitsetType bitset;
104
106 class Enumerator : virtual public Object, public Generic::IEnumerator<bool>
107 {
109 RTTI_INFO(BitArray::Enumerator, ::System::BaseTypesInfo<System::Object>);
110
112 bitset& m_data;
114 int m_current;
115
116 public:
119 ASPOSECPP_SHARED_API Enumerator(const SharedPtr<BitArray>& parent);
122 ASPOSECPP_SHARED_API bool get_Current() const override;
125 ASPOSECPP_SHARED_API bool MoveNext() override;
127 ASPOSECPP_SHARED_API void Reset() override;
128 };
129
131 class ASPOSECPP_SHARED_CLASS Reference
132 {
133 public:
138 ASPOSECPP_SHARED_API operator bool() const;
141 ASPOSECPP_SHARED_API bool operator ~ () const;
145 ASPOSECPP_SHARED_API Reference& operator = (bool value);
149 ASPOSECPP_SHARED_API Reference& operator = (const Reference &reference);
153 ASPOSECPP_SHARED_API Reference& operator |= (bool value);
157 ASPOSECPP_SHARED_API Reference& operator &= (bool value);
161 ASPOSECPP_SHARED_API Reference& operator ^= (bool value);
165 ASPOSECPP_SHARED_API Reference& operator -= (bool value);
166 private:
168 friend class BitArray;
172 template <typename T> Reference(const T &reference);
174 Detail::BitsetReferenceHolder m_reference;
175 };
176
179 ASPOSECPP_SHARED_API SharedPtr<Generic::IEnumerator<bool> > GetEnumerator() override;
180
183 ASPOSECPP_SHARED_API BitArray(const bitset& bits);
186 ASPOSECPP_SHARED_API BitArray(const BitArray& bits);
189 ASPOSECPP_SHARED_API BitArray(const BitArrayPtr& array);
192 ASPOSECPP_SHARED_API BitArray(const System::ArrayPtr<bool>& values);
195 ASPOSECPP_SHARED_API BitArray(const System::ArrayPtr<uint8_t>& bytes);
198 ASPOSECPP_SHARED_API BitArray(const System::ArrayPtr<int>& values);
202 ASPOSECPP_SHARED_API BitArray(int length, bool defaultValue = false);
203
207 ASPOSECPP_SHARED_API Reference operator[](int index);
208
212 ASPOSECPP_SHARED_API bool idx_get(int index) const;
216 ASPOSECPP_SHARED_API void idx_set(int index, bool value);
217
220 ASPOSECPP_SHARED_API int get_Length() const;
223 ASPOSECPP_SHARED_API int get_Count() const override;
224
227 ASPOSECPP_SHARED_API void Add(const bool &item) override;
229 ASPOSECPP_SHARED_API void Clear() override;
233 ASPOSECPP_SHARED_API bool Contains(const bool &item) const override;
237 ASPOSECPP_SHARED_API bool Remove(const bool &item) override;
241 ASPOSECPP_SHARED_API void CopyTo(System::ArrayPtr<bool> array, int arrayIndex) override;
242
246 ASPOSECPP_SHARED_API BitArrayPtr And(const BitArrayPtr& value);
250 ASPOSECPP_SHARED_API BitArrayPtr Or(const BitArrayPtr& value);
254 ASPOSECPP_SHARED_API BitArrayPtr Xor(const BitArrayPtr& value);
257 ASPOSECPP_SHARED_API BitArrayPtr Not();
258
262 ASPOSECPP_SHARED_API bool Get(int index) const;
266 ASPOSECPP_SHARED_API void Set(int index, bool value);
269 ASPOSECPP_SHARED_API void SetAll(bool value);
270
273 ASPOSECPP_SHARED_API bitset& data();
276 ASPOSECPP_SHARED_API const bitset& data() const;
277
281 ASPOSECPP_SHARED_API bool operator == (const BitArray &other) const;
285 ASPOSECPP_SHARED_API bool operator != (const BitArray &other) const;
286
288 ASPOSECPP_SHARED_API void SetTemplateWeakPtr(uint32_t argument) override;
289
291 System::Details::VirtualizedIteratorBase<bool>* virtualizeBeginIterator() override;
293 System::Details::VirtualizedIteratorBase<bool>* virtualizeEndIterator() override;
295 System::Details::VirtualizedIteratorBase<bool>* virtualizeBeginConstIterator() const override;
297 System::Details::VirtualizedIteratorBase<bool>* virtualizeEndConstIterator() const override;
298
299protected:
301 ASPOSECPP_SHARED_API ~BitArray() override;
303 Detail::BitsetHolder m_data;
304};
305
309class ASPOSECPP_SHARED_CLASS BitArrayPtr : public SharedPtr<BitArray>
310{
311public:
313 ASPOSECPP_SHARED_API BitArrayPtr();
316 ASPOSECPP_SHARED_API BitArrayPtr(const SharedPtr<BitArray>& obj);
317
321 ASPOSECPP_SHARED_API BitArray::Reference operator[] (int idx) const;
322
324 ASPOSECPP_SHARED_API bool IsNull() const;
325};
326
327} // namespace Collections
328} // namespace System
329
330#endif // _BitArray_h_
Enumerator type for iteration purposes.
Definition: bitarray.h:107
bool get_Current() const override
Gets addressed bit in boolean form.
bool MoveNext() override
Moves to the next bit.
void Reset() override
Resets enumerator to position before first element.
Enumerator(const SharedPtr< BitArray > &parent)
Creates enumerator.
Reference class to allow treating BitArray elements in contexts where bool is required.
Definition: bitarray.h:132
Array of bits which can be addressed by index. Objects of this class should only be allocated using S...
Definition: bitarray.h:97
BitArray(const System::ArrayPtr< uint8_t > &bytes)
Copy constructor.
const bitset & data() const
Underlying data structure access.
bool Get(int index) const
Gets BitArray element.
System::Details::VirtualizedIteratorBase< bool > * virtualizeBeginIterator() override
Gets the implementation of begin iterator for the current container.
void CopyTo(System::ArrayPtr< bool > array, int arrayIndex) override
Copies data to existing array elements.
BitArray(const bitset &bits)
Copy constructor.
int get_Count() const override
Gets container size.
System::Details::VirtualizedIteratorBase< bool > * virtualizeBeginConstIterator() const override
Gets the implementation of begin const iterator for the current container.
~BitArray() override
Destructor.
void idx_set(int index, bool value)
Setter function.
BitArrayPtr And(const BitArrayPtr &value)
Calculates bitwise 'and' between two BitSets.
void Clear() override
Deletes all elements.
bool idx_get(int index) const
Getter function.
BitArray(const BitArrayPtr &array)
Copy constructor.
BitArrayPtr Not()
Negates BitSet.
BitArray(const BitArray &bits)
Copy constructor.
Reference operator[](int index)
Accessor function.
bitset & data()
Underlying data structure access.
Detail::BitsetHolder m_data
Internal data structure.
Definition: bitarray.h:303
BitArray(const System::ArrayPtr< int > &values)
Copy constructor.
SharedPtr< Generic::IEnumerator< bool > > GetEnumerator() override
Creates enumerator object.
bool Contains(const bool &item) const override
Checks whether specific value is present in container. Not implemented.
void SetAll(bool value)
Sets all elements to specific value.
BitArray(int length, bool defaultValue=false)
Fill constructor.
void Set(int index, bool value)
Sets BitArray element.
BitArrayPtr Xor(const BitArrayPtr &value)
Calculates bitwise 'xor' between two BitSets.
bool Remove(const bool &item) override
Returns first occurance of specified value. Not implemented.
System::Details::VirtualizedIteratorBase< bool > * virtualizeEndIterator() override
Gets the implementation of end iterator for the current container.
Detail::BitsetType bitset
Underlying data type.
Definition: bitarray.h:103
BitArrayPtr Or(const BitArrayPtr &value)
Calculates bitwise 'or' between two BitSets.
BitArray(const System::ArrayPtr< bool > &values)
Copy constructor.
int get_Length() const
Gets container size.
System::Details::VirtualizedIteratorBase< bool > * virtualizeEndConstIterator() const override
Gets the implementation of end const iterator for the current container.
void Add(const bool &item) override
Adds value to the end of container.
void SetTemplateWeakPtr(uint32_t argument) override
Formal implementation of weak template arguments mechanism; inapplicable to this class.
Pointer to BitArray. This type is a pointer to manage other object's deletion. It should be allocated...
Definition: bitarray.h:310
BitArrayPtr(const SharedPtr< BitArray > &obj)
Conversion constructor.
bool IsNull() const
Checks if specific value is null.
BitArrayPtr()
Initializes null pointer.
Interface of collection of elements. Objects of this class should only be allocated using System::Mak...
Definition: icollection.h:20
Interface of enumerator which can be used to iterate through some elements. Objects of this class sho...
Definition: ienumerator.h:63
Base class that enables using methods available for System.Object class in C#. All non-trivial classe...
Definition: object.h:62
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
bool operator!=(ArraySegment< T > a, ArraySegment< T > b)
Definition: array_segment.h:157
bool operator==(ArraySegment< T > a, ArraySegment< T > b)
Definition: array_segment.h:151