xtd 0.2.0
Loading...
Searching...
No Matches
bit_array.hpp
Go to the documentation of this file.
1
3#pragma once
4
5#include "generic/list.hpp"
6#include "../iclonable.hpp"
7#include "../iequatable.hpp"
8#include "../array.hpp"
9#include "../boolean.hpp"
10#include "../byte.hpp"
11#include "../int32.hpp"
12#include "../math.hpp"
13#include "../npos.hpp"
14#include "../object.hpp"
15#include "../size.hpp"
16#include "../types.hpp"
17#include <bitset>
18#include <initializer_list>
19#include <limits>
20
22namespace xtd {
24 namespace collections {
41 class core_export_ bit_array : public xtd::object, public xtd::iequatable<bit_array>, public xtd::collections::generic::icollection<bool>, public xtd::iclonable {
42 private:
43 struct boolean_ref {
44 boolean_ref() noexcept = default;
45 bool& get_boolean_ref(bool value, xtd::size index) noexcept;
46 const bool& get_boolean_ref(bool value, xtd::size index) const noexcept;
47 void from_boolean(bit_array& parent) noexcept;
48
49 inline static constexpr xtd::size npos = xtd::npos;
50 inline static constexpr xtd::size bpos = xtd::bpos;
51 inline static constexpr xtd::size epos = xtd::epos;
52 mutable xtd::size index = npos;
53 mutable bool value = false;
54 };
55
56 public:
58
61 using value_type = bool;
75 using const_pointer = const value_type*;
81
83
89 explicit bit_array(xtd::size length) noexcept;
90
96 bit_array(xtd::size length, bool defaultValue) noexcept;
97
101 bit_array(std::initializer_list<bool> il) noexcept;
102
106 bit_array(const xtd::array<bool>& values) noexcept;
107
112 bit_array(const xtd::array<xtd::byte>& values) noexcept;
113
118 bit_array(const xtd::array<int32>& values) noexcept;
119
123 template<xtd::size length>
124 bit_array(const std::bitset<length>& bit_set) noexcept : bit_array(length) {
125 for (auto index = xtd::size {0}; index < length; ++index)
126 set(index, bit_set.test(index));
127 }
128
132 bit_array(const std::vector<bool>& booleans) noexcept;
134
136 bit_array(bit_array&& bits) = default;
137 bit_array& operator=(bit_array&&) = default;
138 bit_array(const bit_array& bits) = default;
139 bit_array& operator=(const bit_array&) = default;
141
143
145
152
155 template<xtd::size length>
156 std::bitset<length> bits() const noexcept {
157 auto result = std::bitset<length> {};
158 auto bits_count = xtd::math::min(length, count());
159 for (auto index = xtd::size {0}; index < bits_count; ++index)
160 result[index] = at(index);
161 return result;
162 }
163
166 std::vector<bool> bits() const noexcept {
167 auto result = std::vector<bool> {};
168 for (auto index = xtd::size {0}; index < count(); ++index)
169 result[index] = at(index);
170 return result;
171 }
172
176
180
184 xtd::size count() const noexcept override;
185
192
196 xtd::size length() const noexcept;
200 void length(xtd::size value);
202
204
212 const bit_array& and_(const bit_array& value);
213
219 bool at(xtd::size index) const;
220
226 bool& at(xtd::size index);
227
230 xtd::uptr<xtd::object> clone() const override;
231
236 void copy_to(xtd::array<bool>& array, xtd::size index) const override;
237
241 bool equals(const bit_array& value) const noexcept override;
242
246 bool equals(const object& obj) const noexcept override;
247
253 bool get(xtd::size index) const;
254
260 bool& get(xtd::size index);
261
265
268 bool has_all_set() const noexcept;
269
272 bool has_any_set() const noexcept;
273
279
283 const bit_array& not_();
284
291 const bit_array& or_(const bit_array& value);
292
298
304 void set(xtd::size index, bool value);
305
309 void set_all(bool value);
310
313 xtd::string to_string() const noexcept override;
314
321 const bit_array& xor_(const bit_array& value);
323
325
331 const bool& operator [](xtd::size index) const;
332
337 bool& operator [](xtd::size index);
338
339 using xtd::collections::generic::icollection<bool>::operator >>;
344 bit_array operator >>(xtd::size count) const noexcept;
345
350 bit_array& operator >>=(xtd::size count) noexcept;
351
352 using xtd::collections::generic::icollection<bool>::operator <<;
357 bit_array operator <<(xtd::size count) const noexcept;
358
363 bit_array& operator <<=(xtd::size count) noexcept;
365
366 private:
367 bool is_read_only() const noexcept override;
368 bool is_synchronized() const noexcept override;
369 const object& sync_root() const noexcept override;
370
371 void add(const bool&) override;
372 void clear() override;
373 bool contains(const bool&) const noexcept override;
374 bool remove(const bool&) override;
375
376 void flush() const noexcept;
377 xtd::size get_int32_array_length_from_bit_length(xtd::size n) const noexcept;
378 xtd::size get_list_length(xtd::size length_) const noexcept;
379 xtd::size get_list_position(xtd::size index) const noexcept;
380 xtd::size get_bit_position(xtd::size index) const noexcept;
381 bool get_bit_value(xtd::size index) const noexcept;
382 void set_bit_value(xtd::size index, bool value) noexcept;
383
384 static constexpr xtd::size bits_per_byte = 8;
385 static constexpr xtd::size bits_per_int32 = 32;
386 static constexpr xtd::size bytes_per_int32 = 4;
387 static constexpr xtd::size bit_shift_per_int32 = 5;
388 mutable boolean_ref value_ref_;
389 xtd::collections::generic::list<int32> bit_array_;
390 xtd::size length_ = 0;
391 };
392 }
393}
Contains xtd::array class.
Contains xtd::boolean type.
Contains xtd::byte type.
Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the ba...
Definition array.hpp:63
bit_array(const xtd::array< xtd::byte > &values) noexcept
Initializes a new instance of the xtd::collections::bit_array class that contains bit values copied f...
const value_type * const_pointer
Represents the const pointer of list value type.
Definition bit_array.hpp:75
bit_array(std::initializer_list< bool > il) noexcept
Initializes a new instance of the xtd::collections::bit_array class that contains bit values copied f...
const_iterator begin() const noexcept override
Returns an iterator to the first element of the enumerable.
Definition bit_array.hpp:148
const bit_array & or_(const bit_array &value)
Performs the bitwise OR operation on the elements in the current xtd::collections::bit_array against ...
iterator end() noexcept override
Returns an iterator to the element following the last element of the enumerable.
Definition bit_array.hpp:191
xtd::size count() const noexcept override
Gets the number of elements contained in the xtd::collections::bit_array.
xtd::ptrdiff difference_type
Represents the list difference type (usually xtd::ptrdiff).
Definition bit_array.hpp:67
const bit_array & not_()
Inverts all the bit values in the current xtd::collections::bit_array, so that elements set to true a...
typename xtd::collections::generic::list< int32 > base_type
Represents the list base type.
Definition bit_array.hpp:63
std::bitset< length > bits() const noexcept
Returns a std::bitset object containing the Booleans contained in the current xtd::collections::bit_a...
Definition bit_array.hpp:156
bool at(xtd::size index) const
Gets the value of the bit at a specific position in the xtd::collections::bit_array.
xtd::size size_type
Represents the list size type (usually xtd::size).
Definition bit_array.hpp:65
typename xtd::collections::generic::ienumerable< bool >::const_iterator const_iterator
Represents the const iterator of list value type.
Definition bit_array.hpp:79
typename xtd::collections::generic::ienumerable< bool >::iterator iterator
Represents the iterator of list value type.
Definition bit_array.hpp:77
const bit_array & xor_(const bit_array &value)
Performs the bitwise exclusive OR operation on the elements in the current xtd::collections::bit_arra...
value_type & reference
Represents the reference of list value type.
Definition bit_array.hpp:69
void set(xtd::size index, bool value)
Sets the value of the bit at a specific position in the xtd::collections::bit_array.
xtd::size length() const noexcept
Gets the number of elements contained in the xtd::collections::bit_array.
const value_type & const_reference
Represents the const reference of list value type.
Definition bit_array.hpp:71
bit_array(xtd::size length, bool defaultValue) noexcept
Initializes a new instance of the xtd::collections::bit_array class that can hold the specified numbe...
bit_array(const std::vector< bool > &booleans) noexcept
Initializes a new instance of the xtd::collections::bit_array class that contains bit values copied f...
iterator begin() noexcept override
Returns an iterator to the first element of the enumerable.
Definition bit_array.hpp:151
void copy_to(xtd::array< bool > &array, xtd::size index) const override
Copies the elements of the xtd::collections::bit_array to an xtd::array, starting at a particular xtd...
bit_array(const xtd::array< bool > &values) noexcept
Initializes a new instance of the xtd::collections::bit_array class that contains bit values copied f...
void set_all(bool value)
Sets all bits in the xtd::collections::bit_array to the specified value.
bool get(xtd::size index) const
Gets the value of the bit at a specific position in the xtd::collections::bit_array.
xtd::collections::generic::enumerator< bool > get_enumerator() const override
Returns an enumerator that iterates through a collection.
value_type * pointer
Represents the pointer of list value type.
Definition bit_array.hpp:73
bit_array(const std::bitset< length > &bit_set) noexcept
Initializes a new instance of the xtd::collections::bit_array class that contains bit values copied f...
Definition bit_array.hpp:124
bit_array & right_shift(xtd::size count) noexcept
Shifts all the bit values of the current xtd::collections::bit_array to the right on count bits.
std::vector< bool > bits() const noexcept
Returns a std::vector<bool> object containing the Booleans contained in the current xtd::collections:...
Definition bit_array.hpp:166
bit_array(xtd::size length) noexcept
Initializes a new instance of the xtd::collections::bit_array class that can hold the specified numbe...
const bit_array & and_(const bit_array &value)
Performs the bitwise AND operation on the elements in the current xtd::collections::bit_array against...
const_iterator cend() const noexcept override
Returns an iterator to the element following the last element of the enumerable.
Definition bit_array.hpp:179
bool has_all_set() const noexcept
Determines whether all bits in the xtd::collections::bit_array are set to true.
bit_array(const xtd::array< int32 > &values) noexcept
Initializes a new instance of the xtd::collections::bit_array class that contains bit values copied f...
bool equals(const bit_array &value) const noexcept override
Determines whether this instance of xtd::collections::bit_array and a specified object,...
bool value_type
Represents the list value type.
Definition bit_array.hpp:61
const_iterator cbegin() const noexcept override
Returns an iterator to the first element of the enumerable.
Definition bit_array.hpp:175
xtd::uptr< xtd::object > clone() const override
Creates a new object that is a copy of the current instance.
bool has_any_set() const noexcept
Determines whether any bit in the xtd::collections::bit_array is set to true.
xtd::string to_string() const noexcept override
Returns a xtd::string that represents the current object.
bit_array & left_shift(xtd::size count) noexcept
Shifts all the bit values of the current xtd::collections::bit_array to the left on count bits.
const_iterator end() const noexcept override
Returns an iterator to the element following the last element of the enumerable.
Definition bit_array.hpp:188
virtual const_iterator cbegin() const
Returns an iterator to the first element of the enumerable.
Definition enumerable_iterators.hpp:148
virtual const_iterator begin() const
Returns an iterator to the first element of the enumerable.
Definition enumerable_iterators.hpp:141
virtual const_iterator cend() const
Returns an iterator to the element following the last element of the enumerable.
Definition enumerable_iterators.hpp:152
virtual const_iterator end() const
Returns an iterator to the element following the last element of the enumerable.
Definition enumerable_iterators.hpp:156
typename xtd::collections::generic::extensions::enumerable_iterators< xtd::any_object, xtd::collections::generic::ienumerable< xtd::any_object > >::const_iterator const_iterator
Definition ienumerable.hpp:50
typename xtd::collections::generic::extensions::enumerable_iterators< xtd::any_object, xtd::collections::generic::ienumerable< xtd::any_object > >::iterator iterator
Definition ienumerable.hpp:48
Represents a strongly typed list of objects that can be accessed by index. Provides methods to search...
Definition list.hpp:79
Supports cloning, which creates a new instance of a class with the same value as an existing instance...
Definition iclonable.hpp:21
Defines a generalized method that a value type or class implements to create a type-specific method f...
Definition iequatable.hpp:22
static xtd::byte min(xtd::byte a, xtd::byte b) noexcept
Returns the smaller of two 8-bit unsigned integers.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:44
generic::icollection< xtd::any_object > icollection
Defines size, enumerators, and synchronization methods for all nongeneric collections.
Definition icollection.hpp:32
generic::enumerator< xtd::any_object > enumerator
Supports a simple iteration over a non-generic collection.
Definition enumerator.hpp:28
#define core_export_
Define shared library export.
Definition core_export.hpp:13
constexpr xtd::size npos
Represents a value that is not a valid position in a collection.
Definition npos.hpp:26
constexpr xtd::size epos
Represents the index of the last valid element in a collection.
Definition epos.hpp:33
constexpr xtd::size bpos
Represents the index of the firsy valid element in a collection.
Definition bpos.hpp:25
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
xtd::unique_ptr_object< type_t > uptr
The xtd::uptr object is a unique pointer.
Definition uptr.hpp:25
std::int32_t int32
Represents a 32-bit signed integer.
Definition int32.hpp:23
std::ptrdiff_t ptrdiff
Represent the signed integer type of the result of subtracting two pointers.
Definition ptrdiff.hpp:23
@ n
The N key.
Definition console_key.hpp:114
Contains xtd::iclonable interface.
Contains xtd::iequatable interface.
Contains xtd::int32 type.
Contains xtd::collections::generic::list <value_t> class.
Contains xtd::math class.
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
Contains xtd::npos constant.
Contains xtd::object class.
Contains xtd fundamental types.
Contains xtd::size type.