1#include "ReadFileHandle.h"
3#include "FileManager.h"
4#include "Exceptions/FileDoesNotExistException.h"
10 ReadFileHandle::ReadOnlyBuffer::ReadOnlyBuffer(string_view view)
12 char* data =
const_cast<char*
>(view.data());
14 setg(data, data, data + view.size());
17 ReadFileHandle::ReadFileHandle(
const filesystem::path& filePath, ios_base::openmode mode) :
18 FileHandle(filePath, mode | ios_base::in)
20 Cache& cache = FileManager::getInstance().getCache();
22 if (cache.contains(filePath))
24 buffer = make_unique<ReadOnlyBuffer>(cache.getCacheData(filePath));
26 static_cast<iostream&
>(file).rdbuf(buffer.get());
30 const string& ReadFileHandle::readAllData()
32 Cache& cache = FileManager::getInstance().getCache();
34 switch (cache.
addCache(filePath, mode))
36 case Cache::CacheResultCodes::noError:
39 case Cache::CacheResultCodes::fileDoesNotExist:
42 case Cache::CacheResultCodes::notEnoughCacheSize:
43 data = (ostringstream() << file.rdbuf()).str();
49 streamsize ReadFileHandle::readSome(
string& outData, streamsize count,
bool shrinkOutData,
bool resizeOutData)
51 if (resizeOutData && outData.size() != count)
53 outData.resize(count);
56 streamsize result = file.read(outData.data(), count).gcount();
58 if (shrinkOutData && outData.size() != result)
60 outData.resize(result);
66 istream& ReadFileHandle::getStream()
68 return file.read(
nullptr, 0);
71 ReadFileHandle::~ReadFileHandle()
73 if (isNotifyOnDestruction)
75 FileManager::getInstance().decreaseReadRequests(filePath);
const std::string & getCacheData(const std::filesystem::path &filePath) const
Get cached data.
CacheResultCodes addCache(const std::filesystem::path &filePath, std::ios_base::openmode mode)
Add cache data.
Thrown if file does not exist.