bitarray.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * category: [data structure]
  3. * apply status: framework
  4. * edit status: not
  5. * build status: windows&linux
  6. * description:
  7. */
  8. #ifndef BITARRAY_H
  9. #define BITARRAY_H
  10. #pragma once
  11. #include "config.h"
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. typedef struct bitarray_t bitarray_t;
  16. struct bitarray_t {
  17. int nelts;
  18. int nalloc;
  19. int *bits;
  20. };
  21. /**
  22. * make bitarray
  23. */
  24. TOOLKIT_API bitarray_t* bitarray_make(int nelts);
  25. TOOLKIT_API void bitarray_free(bitarray_t *arr);
  26. TOOLKIT_API int bitarray_empty(bitarray_t *arr);
  27. TOOLKIT_API void bitarray_push(bitarray_t *arr, int v);
  28. TOOLKIT_API int bitarray_pop(bitarray_t *arr);
  29. TOOLKIT_API void bitarray_clear(bitarray_t *arr);
  30. TOOLKIT_API void bitarray_cat(bitarray_t *dst, const bitarray_t *src);
  31. TOOLKIT_API bitarray_t * bitarray_copy(const bitarray_t *arr);
  32. TOOLKIT_API void bitarray_reserve(bitarray_t *arr, int cnt);
  33. TOOLKIT_API void bitarray_set(bitarray_t *arr, int pos, int v);
  34. TOOLKIT_API int bitarray_get(const bitarray_t *arr, int pos);
  35. TOOLKIT_API void bitarray_flip(const bitarray_t *arr, int pos);
  36. #ifdef __cplusplus
  37. } // extern "C" {
  38. #endif
  39. #endif // BITARRAY_H