FileManager v1.7.0
Manage access to files with async model
Loading...
Searching...
No Matches
ReadFileHandle.cpp
1#include "ReadFileHandle.h"
2
3#include "FileManager.h"
4#include "Exceptions/FileDoesNotExistException.h"
5
6using namespace std;
7
8namespace file_manager
9{
10 ReadFileHandle::ReadOnlyBuffer::ReadOnlyBuffer(string_view view)
11 {
12 char* data = const_cast<char*>(view.data());
13
14 setg(data, data, data + view.size());
15 }
16
17 ReadFileHandle::ReadFileHandle(const filesystem::path& filePath, ios_base::openmode mode) :
18 FileHandle(filePath, mode | ios_base::in)
19 {
20 Cache& cache = FileManager::getInstance().getCache();
21
22 if (cache.contains(filePath))
23 {
24 buffer = make_unique<ReadOnlyBuffer>(cache.getCacheData(filePath));
25
26 static_cast<iostream&>(file).rdbuf(buffer.get());
27 }
28 }
29
30 const string& ReadFileHandle::readAllData()
31 {
32 Cache& cache = FileManager::getInstance().getCache();
33
34 switch (cache.addCache(filePath, mode))
35 {
36 case Cache::CacheResultCodes::noError:
37 return cache.getCacheData(filePath);
38
39 case Cache::CacheResultCodes::fileDoesNotExist:
41
42 case Cache::CacheResultCodes::notEnoughCacheSize:
43 data = (ostringstream() << file.rdbuf()).str();
44 }
45
46 return data;
47 }
48
49 streamsize ReadFileHandle::readSome(string& outData, streamsize count, bool shrinkOutData, bool resizeOutData)
50 {
51 if (resizeOutData && outData.size() != count)
52 {
53 outData.resize(count);
54 }
55
56 streamsize result = file.read(outData.data(), count).gcount();
57
58 if (shrinkOutData && outData.size() != result)
59 {
60 outData.resize(result);
61 }
62
63 return result;
64 }
65
66 istream& ReadFileHandle::getStream()
67 {
68 return file.read(nullptr, 0);
69 }
70
71 ReadFileHandle::~ReadFileHandle()
72 {
73 if (isNotifyOnDestruction)
74 {
75 FileManager::getInstance().decreaseReadRequests(filePath);
76 }
77 }
78}
Files cache.
Definition Cache.h:19
const std::string & getCacheData(const std::filesystem::path &filePath) const
Get cached data.
Definition Cache.cpp:169
CacheResultCodes addCache(const std::filesystem::path &filePath, std::ios_base::openmode mode)
Add cache data.
Definition Cache.cpp:73