chunked_memory_pool_output.h 909 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #pragma once
  2. #include "public.h"
  3. #include "ref.h"
  4. #include <util/stream/zerocopy_output.h>
  5. #include <util/generic/size_literals.h>
  6. namespace NYT {
  7. ////////////////////////////////////////////////////////////////////////////////
  8. class TChunkedMemoryPoolOutput
  9. : public IZeroCopyOutput
  10. {
  11. public:
  12. static constexpr size_t DefaultChunkSize = 4_KB;
  13. explicit TChunkedMemoryPoolOutput(
  14. TChunkedMemoryPool* pool,
  15. size_t chunkSize = DefaultChunkSize);
  16. std::vector<TMutableRef> Finish();
  17. private:
  18. size_t DoNext(void** ptr) override;
  19. void DoUndo(size_t size) override;
  20. private:
  21. TChunkedMemoryPool* const Pool_;
  22. const size_t ChunkSize_;
  23. char* Begin_ = nullptr;
  24. char* Current_ = nullptr;
  25. char* End_ = nullptr;
  26. std::vector<TMutableRef> Refs_;
  27. };
  28. ////////////////////////////////////////////////////////////////////////////////
  29. } // namespace NYT