RavEngine
Loading...
Searching...
No Matches
VirtualFileSystem.hpp
1#pragma once
2#include <string>
3#include "Function.hpp"
4#include "Filesystem.hpp"
5#include "Vector.hpp"
6#include "Utilities.hpp"
7#include "Debug.hpp"
8#include <span>
9
10struct PHYSFS_File;
11
12namespace RavEngine{
14private:
15 struct ptrsize{
16 PHYSFS_File* ptr = nullptr;
17 size_t size = 0;
18 };
19
20 const ptrsize GetSizeAndPtr(const char* path);
21
22 void close(PHYSFS_File* file);
23
24 size_t ReadInto(PHYSFS_File*, void* data, size_t size);
25public:
27
34 template<typename vec = RavEngine::Vector<uint8_t>>
35 const vec FileContentsAt(const char* path, bool nullTerminate = true)
36 {
37 vec fileData;
39 return fileData;
40 }
41
48 template<typename vec = RavEngine::Vector<uint8_t>>
49 void FileContentsAt(const char* path, vec& datavec, bool nullTerminate = true){
50 auto fullpath = Format("{}/{}",rootname,path);
51
52 if(!Exists(path)){
53 Debug::Fatal("cannot open {}",fullpath);
54 }
55
56 auto ptrsize = GetSizeAndPtr(fullpath.c_str());
57 auto ptr = ptrsize.ptr;
58 auto size = ptrsize.size + (nullTerminate ? 1 : 0);
59
60 datavec.resize(size);
61
62 size_t length_read = ReadInto(ptrsize.ptr, datavec.data(), size);
63 if (nullTerminate){
64 datavec.data()[size-1] = static_cast<vec::value_type>('\0'); //add null terminator
65 }
66 close(ptrsize.ptr);
67 }
68
72 bool Exists(const char* path);
73
79 void IterateDirectory(const char* path, Function<void(const std::string&)> callback);
80
81 Filesystem::Path GetStreamingAssetFullRootPath() const{
82 return streamingAssetsPath;
83 }
84
85 const std::span<const char> GetShaderData(const std::string_view name);
86
87protected:
88 std::string rootname;
89 Filesystem::Path streamingAssetsPath;
90};
91}
static void Fatal(const std::string_view message)
Definition Debug.hpp:106
Definition VirtualFileSystem.hpp:13
void FileContentsAt(const char *path, vec &datavec, bool nullTerminate=true)
Definition VirtualFileSystem.hpp:49
bool Exists(const char *path)
Definition VirtualFileSystem.cpp:213
const vec FileContentsAt(const char *path, bool nullTerminate=true)
Definition VirtualFileSystem.hpp:35
void IterateDirectory(const char *path, Function< void(const std::string &)> callback)
Definition VirtualFileSystem.cpp:218
Definition concurrentqueue.h:747
Definition Animation.hpp:6