31 class FileSourceUnion;
49 std::string
JoinPath(
const std::string &a,
const std::string &b);
55 std::string
JoinPathBelow(
const std::string &base,
const std::string &path);
59 std::string
GetRelativePath(
const std::string &base,
const std::string &path);
104 const std::string &
GetPath()
const {
return m_path; }
105 std::string
GetName()
const {
return m_path.substr(m_dirLen); }
106 std::string
GetDir()
const {
return m_path.substr(0, m_dirLen); }
116 return (a.m_source == b.m_source && a.m_type == b.m_type && a.m_path == b.m_path);
120 return (a.m_source != b.m_source || a.m_type != b.m_type || a.m_path != b.m_path);
124 int c = a.m_path.compare(b.m_path);
128 if (a.m_type != b.m_type) {
129 return (a.m_type < b.m_type);
131 return (a.m_source < b.m_source);
135 int c = a.m_path.compare(b.m_path);
139 if (a.m_type != b.m_type) {
140 return (a.m_type < b.m_type);
142 return (a.m_source <= b.m_source);
191 FileData(info, size, static_cast<char *>(std::malloc(size))) {}
199 explicit FileSource(
const std::string &root,
bool trusted =
false) :
201 m_trusted(trusted) {}
204 const std::string &
GetRoot()
const {
return m_root; }
208 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output) = 0;
223 explicit FileSourceFS(
const std::string &root,
bool trusted =
false);
228 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output);
255 std::vector<FileInfo>
LookupAll(
const std::string &path);
257 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output);
260 std::vector<FileSource *> m_sources;
283 void ExpandDirQueue();
284 void QueueDirectoryContents(
const FileInfo &info);
287 std::deque<FileInfo> m_queue;
288 std::deque<FileInfo> m_dirQueue;
301 return JoinPath(m_source->GetRoot(), GetPath());
306 return m_source->ReadFile(m_path);
Definition: FileSystem.h:188
FileDataMalloc(const FileInfo &info, size_t size)
Definition: FileSystem.h:190
FileDataMalloc(const FileInfo &info, size_t size, char *data)
Definition: FileSystem.h:192
virtual ~FileDataMalloc()
Definition: FileSystem.h:194
Definition: FileSystem.h:158
ByteRange AsByteRange() const
Definition: FileSystem.h:170
FileData(const FileInfo &info, size_t size, char *data)
Definition: FileSystem.h:174
StringRange AsStringRange() const
Definition: FileSystem.h:169
size_t m_size
Definition: FileSystem.h:185
FileData(const FileInfo &info)
Definition: FileSystem.h:178
size_t GetSize() const
Definition: FileSystem.h:163
char * m_data
Definition: FileSystem.h:184
virtual ~FileData()
Definition: FileSystem.h:160
const char * GetData() const
Definition: FileSystem.h:164
const FileInfo & GetInfo() const
Definition: FileSystem.h:162
FileInfo m_info
Definition: FileSystem.h:183
std::string_view AsStringView() const
Definition: FileSystem.h:171
Definition: FileSystem.h:263
Flags
Definition: FileSystem.h:265
@ Recurse
Definition: FileSystem.h:269
@ ExcludeFiles
Definition: FileSystem.h:268
@ IncludeSpecials
Definition: FileSystem.h:267
@ IncludeDirs
Definition: FileSystem.h:266
void Next()
Definition: FileSystem.cpp:385
~FileEnumerator()
Definition: FileSystem.cpp:374
void AddSearchRoot(const std::string &path)
Definition: FileSystem.cpp:376
FileEnumerator(FileSource &fs, int flags=0)
Definition: FileSystem.cpp:363
bool Finished() const
Definition: FileSystem.h:278
const FileInfo & Current() const
Definition: FileSystem.h:280
Definition: FileSystem.h:77
const FileSource & GetSource() const
Definition: FileSystem.h:110
std::string GetName() const
Definition: FileSystem.h:105
const std::string & GetPath() const
Definition: FileSystem.h:104
friend bool operator<=(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:133
friend bool operator!=(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:118
FileInfo()
Definition: FileSystem.h:81
bool IsFile() const
Definition: FileSystem.h:97
enum FileType GetType() const
Definition: FileSystem.h:94
std::string GetDir() const
Definition: FileSystem.h:106
std::string GetAbsoluteDir() const
Definition: FileSystem.h:294
Time::DateTime GetModificationTime() const
Definition: FileSystem.h:102
std::string GetAbsolutePath() const
Definition: FileSystem.h:299
bool Exists() const
Definition: FileSystem.h:95
FileType
Definition: FileSystem.h:86
@ FT_SPECIAL
Definition: FileSystem.h:91
@ FT_NON_EXISTENT
Definition: FileSystem.h:90
@ FT_FILE
Definition: FileSystem.h:89
@ FT_DIR
Definition: FileSystem.h:88
RefCountedPtr< FileData > Read() const
Definition: FileSystem.h:304
friend bool operator<(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:122
friend bool operator>(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:144
friend bool operator>=(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:145
bool IsSpecial() const
Definition: FileSystem.h:98
bool IsDir() const
Definition: FileSystem.h:96
friend bool operator==(const FileInfo &a, const FileInfo &b)
Definition: FileSystem.h:114
Definition: FileSystem.h:221
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)
Definition: FileSystemPosix.cpp:205
FILE * OpenReadStream(const std::string &path)
Definition: FileSystemPosix.cpp:274
virtual FileInfo Lookup(const std::string &path)
Definition: FileSystemPosix.cpp:162
FileSourceFS(const std::string &root, bool trusted=false)
Definition: FileSystemPosix.cpp:126
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)
Definition: FileSystemPosix.cpp:170
WriteFlags
Definition: FileSystem.h:232
@ WRITE_TEXT
Definition: FileSystem.h:233
bool MakeDirectory(const std::string &path)
Definition: FileSystemPosix.cpp:268
~FileSourceFS()
Definition: FileSystemPosix.cpp:129
FILE * OpenWriteStream(const std::string &path, int flags=0)
Definition: FileSystemPosix.cpp:280
Definition: FileSystem.h:242
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)
Definition: FileSystem.cpp:327
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)
Definition: FileSystem.cpp:277
void AppendSource(FileSource *fs)
Definition: FileSystem.cpp:239
void PrependSource(FileSource *fs)
Definition: FileSystem.cpp:232
void RemoveSource(FileSource *fs)
Definition: FileSystem.cpp:246
std::vector< FileInfo > LookupAll(const std::string &path)
Definition: FileSystem.cpp:265
virtual FileInfo Lookup(const std::string &path)
Definition: FileSystem.cpp:252
FileSourceUnion()
Definition: FileSystem.cpp:228
~FileSourceUnion()
Definition: FileSystem.cpp:230
Definition: FileSystem.h:197
FileInfo MakeFileInfo(const std::string &path, FileInfo::FileType entryType, Time::DateTime modTime)
Definition: FileSystem.cpp:218
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)=0
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)=0
virtual FileInfo Lookup(const std::string &path)=0
FileSource(const std::string &root, bool trusted=false)
Definition: FileSystem.h:199
const std::string & GetRoot() const
Definition: FileSystem.h:204
virtual ~FileSource()
Definition: FileSystem.h:202
bool IsTrusted() const
Definition: FileSystem.h:210
Definition: RefCounted.h:36
Definition: RefCounted.h:11
Definition: DateTime.h:84
Definition: CityOnPlanet.h:27
std::string JoinPathBelow(const std::string &base, const std::string &path)
Definition: FileSystem.cpp:102
void Init()
Definition: FileSystem.cpp:188
std::string GetUserDir()
Definition: FileSystemPosix.cpp:114
void Uninit()
Definition: FileSystem.cpp:194
std::string SanitiseFileName(const std::string &a)
Definition: FileSystem.cpp:21
CopyMode
Definition: FileSystem.h:68
std::string GetDataDir()
Definition: FileSystemPosix.cpp:120
std::string NormalisePath(const std::string &path)
Definition: FileSystem.cpp:94
bool CopyDir(FileSource &sourceFS, std::string sourceDir, FileSourceFS &targetFS, std::string targetDir, FileSystem::CopyMode copymode)
Definition: FileSystem.cpp:148
FileSourceUnion gameDataFiles
Definition: FileSystem.cpp:17
std::string JoinPath(const std::string &a, const std::string &b)
Definition: FileSystem.cpp:46
std::string GetRelativePath(const std::string &base, const std::string &path)
Definition: FileSystem.cpp:126
FileSourceFS userFiles(GetUserDir())
Definition: FileSystem.h:37
Definition: ByteRange.h:12
Definition: StringRange.h:11