BitArray.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #ifndef CORE_BIT_ARRAY_H
  2. #define CORE_BIT_ARRAY_H
  3. #include "core/Types.h"
  4. typedef struct {
  5. u64 length : 56;
  6. u64 bits : 8;
  7. u64* data;
  8. } CoreBitArray;
  9. static_assert(sizeof(CoreBitArray) == 16, "invalid bit array size");
  10. #define CORE_BIT_ARRAY ((CoreBitArray){0, 0, nullptr})
  11. void coreCopyBitArray(CoreBitArray* a, const CoreBitArray* other);
  12. void coreMoveBitArray(CoreBitArray* a, CoreBitArray* other);
  13. void coreDestroyBitArray(CoreBitArray* a);
  14. CoreBitArray* coreSetBitsBitArray(CoreBitArray* a, size_t index, u64 value);
  15. u64 coreGetBitsBitArray(const CoreBitArray* a, size_t index);
  16. size_t coreGetBytesBitArray(const CoreBitArray* a);
  17. i64 coreSelectBitsBitArray(const CoreBitArray* a, size_t index);
  18. void coreResizeBitArray(CoreBitArray* a, size_t newLength, size_t newBits);
  19. void coreFillBitArray(CoreBitArray* a, u64 value);
  20. size_t coreToStringBitArray(const CoreBitArray* a, char* buffer, size_t n);
  21. void coreSwapBitArray(CoreBitArray* a, CoreBitArray* b);
  22. #ifdef IMPORT_CORE
  23. #define BitArray CoreBitArray
  24. #define BIT_ARRAY CORE_BIT_ARRAY
  25. #define copyBitArray coreCopyBitArray
  26. #define moveBitArray coreMoveBitArray
  27. #define destroyBitArray coreDestroyBitArray
  28. #define setBitsBitArray coreSetBitsBitArray
  29. #define getBitsBitArray coreGetBitsBitArray
  30. #define getBytesBitArray coreGetBytesBitArray
  31. #define selectBitsBitArray coreSelectBitsBitArray
  32. #define resizeBitArray coreResizeBitArray
  33. #define fillBitArray coreFillBitArray
  34. #define toStringBitArray coreToStringBitArray
  35. #define swapBitArray coreSwapBitArray
  36. #endif
  37. #endif