Files
2026-07-13 13:33:03 +08:00

39 lines
818 B
C++
Executable File

#pragma once
#include "thread_pool.h"
#include <string>
// File reader using Direct IO
class FileDirectReader {
private:
static constexpr size_t kMemoryAlignment = 4096UL; // 4096 Bytes
static constexpr size_t kBlockSize = 1048576UL; // 1 MB
public:
explicit FileDirectReader(const std::string& filepath, const size_t numWorkers = 8);
~FileDirectReader();
explicit operator bool() const;
bool valid() const;
size_t size() const;
bool load(void* dstBuffer, const size_t dstSize);
private:
static size_t legalizeNumWorkers(const size_t numWorkers);
private:
const std::string kFilePath;
const size_t kNumWorkers;
BasicThreadPool mThreadPool;
int mFileFd = -1;
size_t mFileSize = 0;
size_t mWholeBlocksSize = 0;
size_t mLastBlockSize = 0;
};