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);
190 FileData(info, size, static_cast<char *>(std::malloc(size))) {}
198 explicit FileSource(
const std::string &root,
bool trusted =
false) :
200 m_trusted(trusted) {}
203 const std::string &
GetRoot()
const {
return m_root; }
207 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output) = 0;
222 explicit FileSourceFS(
const std::string &root,
bool trusted =
false);
227 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output);
254 std::vector<FileInfo>
LookupAll(
const std::string &path);
256 virtual bool ReadDirectory(
const std::string &path, std::vector<FileInfo> &output);
259 std::vector<FileSource *> m_sources;
282 void ExpandDirQueue();
283 void QueueDirectoryContents(
const FileInfo &info);
286 std::deque<FileInfo> m_queue;
287 std::deque<FileInfo> m_dirQueue;
300 return JoinPath(m_source->GetRoot(), GetPath());
305 return m_source->ReadFile(m_path);
Definition: FileSystem.h:187
FileDataMalloc(const FileInfo &info, size_t size)
Definition: FileSystem.h:189
FileDataMalloc(const FileInfo &info, size_t size, char *data)
Definition: FileSystem.h:191
virtual ~FileDataMalloc()
Definition: FileSystem.h:193
Definition: FileSystem.h:158
ByteRange AsByteRange() const
Definition: FileSystem.h:170
FileData(const FileInfo &info, size_t size, char *data)
Definition: FileSystem.h:173
StringRange AsStringRange() const
Definition: FileSystem.h:169
size_t m_size
Definition: FileSystem.h:184
FileData(const FileInfo &info)
Definition: FileSystem.h:177
size_t GetSize() const
Definition: FileSystem.h:163
char * m_data
Definition: FileSystem.h:183
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:182
Definition: FileSystem.h:262
Flags
Definition: FileSystem.h:264
@ Recurse
Definition: FileSystem.h:268
@ ExcludeFiles
Definition: FileSystem.h:267
@ IncludeSpecials
Definition: FileSystem.h:266
@ IncludeDirs
Definition: FileSystem.h:265
void Next()
Definition: FileSystem.cpp:381
~FileEnumerator()
Definition: FileSystem.cpp:370
void AddSearchRoot(const std::string &path)
Definition: FileSystem.cpp:372
FileEnumerator(FileSource &fs, int flags=0)
Definition: FileSystem.cpp:359
bool Finished() const
Definition: FileSystem.h:277
const FileInfo & Current() const
Definition: FileSystem.h:279
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:293
Time::DateTime GetModificationTime() const
Definition: FileSystem.h:102
std::string GetAbsolutePath() const
Definition: FileSystem.h:298
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:303
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:220
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)
Definition: FileSystemPosix.cpp:192
FILE * OpenReadStream(const std::string &path)
Definition: FileSystemPosix.cpp:261
virtual FileInfo Lookup(const std::string &path)
Definition: FileSystemPosix.cpp:149
FileSourceFS(const std::string &root, bool trusted=false)
Definition: FileSystemPosix.cpp:113
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)
Definition: FileSystemPosix.cpp:157
WriteFlags
Definition: FileSystem.h:231
@ WRITE_TEXT
Definition: FileSystem.h:232
bool MakeDirectory(const std::string &path)
Definition: FileSystemPosix.cpp:255
~FileSourceFS()
Definition: FileSystemPosix.cpp:116
FILE * OpenWriteStream(const std::string &path, int flags=0)
Definition: FileSystemPosix.cpp:267
Definition: FileSystem.h:241
virtual bool ReadDirectory(const std::string &path, std::vector< FileInfo > &output)
Definition: FileSystem.cpp:323
virtual RefCountedPtr< FileData > ReadFile(const std::string &path)
Definition: FileSystem.cpp:273
void AppendSource(FileSource *fs)
Definition: FileSystem.cpp:235
void PrependSource(FileSource *fs)
Definition: FileSystem.cpp:228
void RemoveSource(FileSource *fs)
Definition: FileSystem.cpp:242
std::vector< FileInfo > LookupAll(const std::string &path)
Definition: FileSystem.cpp:261
virtual FileInfo Lookup(const std::string &path)
Definition: FileSystem.cpp:248
FileSourceUnion()
Definition: FileSystem.cpp:224
~FileSourceUnion()
Definition: FileSystem.cpp:226
Definition: FileSystem.h:196
FileInfo MakeFileInfo(const std::string &path, FileInfo::FileType entryType, Time::DateTime modTime)
Definition: FileSystem.cpp:214
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:198
const std::string & GetRoot() const
Definition: FileSystem.h:203
virtual ~FileSource()
Definition: FileSystem.h:201
bool IsTrusted() const
Definition: FileSystem.h:209
Definition: RefCounted.h:36
Definition: RefCounted.h:11
Definition: DateTime.h:84
Definition: IniConfig.h:10
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:101
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:107
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