OpenBarnyard
 
Loading...
Searching...
No Matches
TFile.h
Go to the documentation of this file.
1
11
12#pragma once
13#include "Toshi/TSingleton.h"
14#include "Toshi/TDList.h"
15#include "Toshi/TString8.h"
16
17#include "Thread/TMutexLock.h"
18
19#undef CreateFile
20#undef FindFirstFile
21
23
24TDECLARE_POINTER_HANDLE( TFileLookupHandle );
25
26class TFile;
27
34
44
51
58
59// JPOG Matched
60class TFileSystem : public TDList<TFileSystem>::TNode
61{
62public:
63 TFileSystem( const TCHAR* a_szName );
64 TFileSystem( const TFileSystem& other );
65
66 virtual ~TFileSystem() = default;
67
74 virtual TFile* CreateFile( const TString8& a_rcFileName, TFILEMODE a_eFileMode ) = 0;
75
79 virtual void DestroyFile( TFile* a_pFile ) = 0;
80
84 virtual TBOOL RemoveFile( const TString8& a_rcFileName ) { return TTRUE; }
85
89 virtual TString8 MakeInternalPath( const TString8& a_rcPath ) = 0;
90
94 virtual TBOOL GetFirstFile( const TString8& a_rcPath, TString8& a_rOutFileName, TFINDFILE a_ui8Flags = TFINDFILE_DIRECTORY | TFINDFILE_FILE ) { return TFALSE; }
95
99 virtual TBOOL GetNextFile( TString8& a_rOutFileName, TFINDFILE a_ui8Flags = TFINDFILE_DIRECTORY | TFINDFILE_FILE ) { return TFALSE; }
100
104 virtual void SetPrefix( const TString8& a_rcPrefix );
105
109 virtual TBOOL ToNative( const TString8& a_rcPath, TNativeFileInfo& a_rOutInfo );
110
114 void UnmountFileSystem() { TNode::Remove(); }
115
116 const TString8& GetName() const { return m_Name; }
117 const TString8& GetPrefix() const { return m_Prefix; }
118
119 TFileSystem& operator=( TFileSystem& a_rFileSystem );
120
121protected:
124 TFileLookupHandle m_NextFileHandle; // 0x1C
125};
126
127class TFile
128{
129public:
130 TFile( TFileSystem* a_pFS );
131 TFile( const TFile& a_rOther );
132
139 virtual TSIZE Read( void* a_pDst, TSIZE a_uiSize ) = 0;
140
147 virtual TSIZE Write( const void* a_pSrc, TSIZE a_uiSize ) = 0;
148
155 virtual TBOOL Seek( TINT a_iOffset, TSEEK a_eOrigin = TSEEK_CUR ) = 0;
156
160 virtual TSIZE Tell() = 0;
161
165 virtual void FlushBuffers() {}
166
170 virtual TSIZE GetSize() = 0;
171
175
176 virtual TUINT64 GetDate() { return 0; }
177
182 virtual TCHAR GetCChar() = 0;
183
188 virtual TWCHAR GetWChar() = 0;
189
194 virtual TINT PutCChar( TCHAR a_cCharacter ) = 0;
195
200 virtual TINT PutWChar( TWCHAR a_wcCharacter ) = 0;
201
206 virtual TINT CPrintf( const TCHAR* a_szFormat, ... ) = 0;
207
212 virtual TINT WPrintf( const TWCHAR* a_wszFormat, ... ) = 0;
213
214 virtual ~TFile();
215
217 {
218 return m_pFileSystem;
219 }
220
221 void Destroy();
222
223public:
224 static TString8 ConcatPath( const TString8& a_rcPath1, const TString8& a_rcPath2 );
225 static TString8 SimplifyPath( const TString8& a_rcPath );
226
227 static TFile* Create( const TString8& a_rcFilename, TFILEMODE a_eMode = TFILEMODE_READ );
228
229private:
230 TFileSystem* m_pFileSystem;
231};
232
233class TFileManager : public TSingleton<TFileManager>
234{
235public:
237 {
238 public:
239 TSysPathIter( const TString8& str );
240 ;
241 TSysPathIter( const TSysPathIter& other );
242 ;
243
244 TBOOL First( TString8& path );
245
246 TBOOL Next( TString8& path );
247
248 private:
249 const TString8& m_String;
250 int32_t m_Position;
251 };
252
253 inline static TMutex ms_oMutex;
254
255public:
256 TFileManager();
258
259 void Destroy();
260 void MountFileSystem( TFileSystem* a_pFileSystem );
261
262 TFile* CreateFile( const TString8& a_strName, TFILEMODE flags );
263 TBOOL GetFileInfo( const TString8& a_strPath, TNativeFileInfo& a_rNativeInfo );
264
265 TFileSystem* FindFileSystem( const TString8& name );
266 static TFileSystem* FindFileSystem( TDList<TFileSystem>& list, const TString8& name );
267
268 TString8 MakeAbsolutePath( const TString8& a_rcRelativePath ) const;
269
270 void SetSystemPath( const TString8& name )
271 {
272 m_SysPath = name;
273 InvalidateSystemPath();
274 }
275
276public:
277 /*
278 * Platform specific methods
279 * Define them in TFileManager_{Platform}.cpp
280 */
281
282 static TBOOL Create();
283
284public:
285 static void FileSystemRelease() { ms_oMutex.Unlock(); }
286 static void FileSystemWait() { ms_oMutex.Lock(); }
287
288private:
289 void ValidateSystemPath();
290 void InvalidateSystemPath() { m_IsValidated = TFALSE; }
291
292 static void CreateCommon();
293 static void DestroyCommon();
294
295private:
296 TBOOL m_IsValidated; // 0x0
297 TString8 m_SysPath; // 0x4
298 TString8 m_WorkingDirectory; // 0x10
299 TUINT32 m_ValidatedCount; // 0x1C
300 TDList<TFileSystem> m_Validated; // 0x20
301 TDList<TFileSystem> m_Invalidated; // 0x28
302};
303
TUINT8 TFINDFILE
Definition TFile.h:45
TUINT16 TFILEMODE
Definition TFile.h:35
TFINDFILE_
Definition TFile.h:47
@ TFINDFILE_DIRECTORY
Definition TFile.h:49
@ TFINDFILE_FILE
Definition TFile.h:48
TSEEK
Definition TFile.h:29
@ TSEEK_SET
Definition TFile.h:30
@ TSEEK_END
Definition TFile.h:32
@ TSEEK_CUR
Definition TFile.h:31
TFILEMODE_
Definition TFile.h:37
@ TFILEMODE_READWRITE
Definition TFile.h:40
@ TFILEMODE_READ
Definition TFile.h:38
@ TFILEMODE_NOBUFFER
Definition TFile.h:42
@ TFILEMODE_WRITE
Definition TFile.h:39
@ TFILEMODE_CREATENEW
Definition TFile.h:41
#define BITFLAG(x)
Definition Defines.h:10
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TDECLARE_POINTER_HANDLE(NAME)
Definition Defines.h:84
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
Char string implementation for the Toshi engine.
uint16_t TUINT16
Definition Typedefs.h:15
wchar_t TWCHAR
Definition Typedefs.h:21
uint64_t TUINT64
Definition Typedefs.h:11
size_t TSIZE
Definition Typedefs.h:9
char TCHAR
Definition Typedefs.h:20
uint8_t TUINT8
Definition Typedefs.h:17
uint32_t TUINT32
Definition Typedefs.h:13
int TINT
Definition Typedefs.h:7
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
bool TBOOL
Definition Typedefs.h:6
TString8 InternalPath
Definition TFile.h:54
TUINT32 Length
Definition TFile.h:56
TUINT32 Offset
Definition TFile.h:55
TFileSystem & operator=(TFileSystem &a_rFileSystem)
virtual TBOOL RemoveFile(const TString8 &a_rcFileName)
Removes specified file.
Definition TFile.h:84
TFileSystem(const TCHAR *a_szName)
const TString8 & GetPrefix() const
Definition TFile.h:117
virtual void DestroyFile(TFile *a_pFile)=0
Destroys specified file.
virtual TBOOL GetNextFile(TString8 &a_rOutFileName, TFINDFILE a_ui8Flags=TFINDFILE_DIRECTORY|TFINDFILE_FILE)
Not documented.
Definition TFile.h:99
virtual TBOOL ToNative(const TString8 &a_rcPath, TNativeFileInfo &a_rOutInfo)
Fetches info about the path and returns internal path.
const TString8 & GetName() const
Definition TFile.h:116
virtual TFile * CreateFile(const TString8 &a_rcFileName, TFILEMODE a_eFileMode)=0
Creates file.
virtual TBOOL GetFirstFile(const TString8 &a_rcPath, TString8 &a_rOutFileName, TFINDFILE a_ui8Flags=TFINDFILE_DIRECTORY|TFINDFILE_FILE)
Finds out what's the first file at the specified path.
Definition TFile.h:94
virtual ~TFileSystem()=default
TString8 m_Name
Definition TFile.h:122
virtual void SetPrefix(const TString8 &a_rcPrefix)
Sets the directory prefix to work with.
virtual TString8 MakeInternalPath(const TString8 &a_rcPath)=0
Not documented.
TFileLookupHandle m_NextFileHandle
Definition TFile.h:124
TString8 m_Prefix
Definition TFile.h:123
void UnmountFileSystem()
Unmounts this file system from the TFileManager.
Definition TFile.h:114
Definition TFile.h:128
virtual TBOOL Seek(TINT a_iOffset, TSEEK a_eOrigin=TSEEK_CUR)=0
Shifts current file cursor based on the specified offset and origin.
void Destroy()
Definition TFile.cpp:184
virtual void FlushBuffers()
Flushes write buffers.
Definition TFile.h:165
virtual TINT PutCChar(TCHAR a_cCharacter)=0
Writes one character of type TCHAR to the file.
virtual TSIZE GetSize()=0
virtual TCHAR GetCChar()=0
Reads one character of type TCHAR from the file.
static TString8 ConcatPath(const TString8 &a_rcPath1, const TString8 &a_rcPath2)
Definition TFile.cpp:48
static TString8 SimplifyPath(const TString8 &a_rcPath)
Definition TFile.cpp:106
virtual TSIZE Tell()=0
virtual TSIZE Write(const void *a_pSrc, TSIZE a_uiSize)=0
Writes specified number of bytes to the file from the buffer.
virtual TSIZE Read(void *a_pDst, TSIZE a_uiSize)=0
Reads specified number of bytes from the file into the buffer.
static TFile * Create(const TString8 &a_rcFilename, TFILEMODE a_eMode=TFILEMODE_READ)
Definition TFile.cpp:29
virtual TINT WPrintf(const TWCHAR *a_wszFormat,...)=0
Analogue of wprintf but writes result to the file.
virtual ~TFile()
Definition TFile.cpp:24
TFile(TFileSystem *a_pFS)
Definition TFile.cpp:13
virtual TWCHAR GetWChar()=0
Reads one character of type wchar from the file.
virtual TINT CPrintf(const TCHAR *a_szFormat,...)=0
Analogue of printf but writes result to the file.
virtual TUINT64 GetDate()
Definition TFile.h:176
virtual TINT PutWChar(TWCHAR a_wcCharacter)=0
Writes one character of type wchar to the file.
TFileSystem * GetFileSystem() const
Definition TFile.h:216
static TMutex ms_oMutex
Definition TFile.h:253
static TBOOL Create()
static void FileSystemWait()
Definition TFile.h:286
void SetSystemPath(const TString8 &name)
Definition TFile.h:270
TFileSystem * FindFileSystem(const TString8 &name)
static void FileSystemRelease()
Definition TFile.h:285
TString8 MakeAbsolutePath(const TString8 &a_rcRelativePath) const
TFile * CreateFile(const TString8 &a_strName, TFILEMODE flags)
void MountFileSystem(TFileSystem *a_pFileSystem)
TBOOL GetFileInfo(const TString8 &a_strPath, TNativeFileInfo &a_rNativeInfo)
TBOOL Next(TString8 &path)
TSysPathIter(const TString8 &str)
TBOOL First(TString8 &path)
friend class TDList
Definition TDList.h:13
TSingleton(const TSingleton &)=delete