chunkedvector.h 921 B

12345678910111213141516171819202122232425262728293031
  1. #pragma once
  2. #include "pocketpy/common/vector.h"
  3. typedef struct c11_chunkedvector_chunk {
  4. int length;
  5. int capacity;
  6. void* data;
  7. } c11_chunkedvector_chunk;
  8. typedef struct c11_chunkedvector {
  9. c11_vector /*T=c11_chunkedvector_chunk*/ chunks;
  10. int length;
  11. int capacity;
  12. int elem_size;
  13. int initial_chunks;
  14. } c11_chunkedvector;
  15. // chunks[0]: size=1, total_capacity=1
  16. // chunks[1]: size=2, total_capacity=3
  17. // chunks[2]: size=4, total_capacity=7
  18. // chunks[3]: size=8, total_capacity=15
  19. // chunks[4]: size=16, total_capacity=31
  20. // chunks[5]: size=32, total_capacity=63
  21. // ...
  22. // chunks[n]: size=2^n, total_capacity=2^(n+1)-1
  23. void c11_chunkedvector__ctor(c11_chunkedvector* self, int elem_size, int initial_chunks);
  24. void c11_chunkedvector__dtor(c11_chunkedvector* self);
  25. void* c11_chunkedvector__emplace(c11_chunkedvector* self);
  26. void* c11_chunkedvector__at(c11_chunkedvector* self, int index);