1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#pragma once
#include "../../Main.h"
#include <Containers/Tags.h>
using namespace Death::Containers;
namespace nCine
{
class BitArray;
/** @brief Index in a bit array */
class BitArrayIndex
{
public:
BitArrayIndex(BitArray* array, std::size_t bit);
void operator=(bool value);
private:
BitArray* _bitArray;
std::size_t _bit;
};
/** @brief Bit array */
class BitArray
{
public:
BitArray();
BitArray(ValueInitT, std::size_t sizeInBits);
BitArray(NoInitT, std::size_t sizeInBits);
~BitArray();
BitArray(const BitArray&) = delete;
BitArray& operator=(const BitArray&) = delete;
BitArray(BitArray&& other) noexcept;
BitArray& operator=(BitArray&& other) noexcept;
char* data() { return _data; }
bool empty() const { return !_size; }
std::size_t size() const { return _size; };
std::size_t sizeInBytes() const;
void resize(ValueInitT, std::size_t sizeInBits);
void resize(NoInitT, std::size_t sizeInBits);
void setAll();
void resetAll();
void set(std::size_t bit);
void set(std::size_t bit, bool value);
void reset(std::size_t bit);
BitArrayIndex operator()(const std::size_t bit);
bool operator[](std::size_t bit) const;
bool operator==(const BitArray& other) const;
BitArray operator&(const BitArray& other) const;
BitArray operator^(const BitArray& other) const;
BitArray operator|(const BitArray& other) const;
BitArray operator~() const;
BitArray operator<<(std::size_t count) const;
BitArray operator>>(std::size_t count) const;
BitArray& operator++();
BitArray& operator++(int);
BitArray& operator--();
BitArray& operator--(int);
BitArray& operator&=(const BitArray& src);
BitArray& operator^=(const BitArray& src);
BitArray& operator|=(const BitArray& src);
BitArray& notAll();
BitArray& operator<<=(std::size_t shifts);
BitArray& operator>>=(std::size_t shifts);
private:
char* _data;
std::size_t _size;
};
}
|