BitArray.hpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef CORE_BIT_ARRAY_HPP
  2. #define CORE_BIT_ARRAY_HPP
  3. #include "core/utils/ArrayString.hpp"
  4. namespace Core {
  5. class BitArray final {
  6. u64 lengthBits;
  7. u64* data;
  8. public:
  9. BitArray();
  10. BitArray(const BitArray& other) = delete;
  11. BitArray(BitArray&& other);
  12. ~BitArray();
  13. BitArray& operator=(const BitArray& other) = delete;
  14. BitArray& operator=(BitArray&& other);
  15. check_return Error copyFrom(const BitArray& other);
  16. BitArray& set(u64 index, u64 value);
  17. u64 get(u64 index) const;
  18. u64 getLength() const;
  19. u64 getBits() const;
  20. u64 getInternalByteSize() const;
  21. i64 select(u64 index) const;
  22. check_return Error resize(u64 newLength, u64 newBits);
  23. void fill(u64 value);
  24. template<typename String>
  25. check_return Error toString(String& s) const {
  26. CORE_RETURN_ERROR(s.append("["));
  27. u64 length = getLength();
  28. if(length > 0) {
  29. length--;
  30. for(u64 i = 0; i < length; i++) {
  31. CORE_RETURN_ERROR(s.append(get(i)));
  32. CORE_RETURN_ERROR(s.append(", "));
  33. }
  34. CORE_RETURN_ERROR(s.append(get(length)));
  35. }
  36. return s.append("]");
  37. }
  38. void swap(BitArray& other);
  39. };
  40. }
  41. #endif