nuclear@1: /************************************************************************************ nuclear@1: nuclear@1: PublicHeader: Kernel nuclear@1: Filename : OVR_SysFile.h nuclear@1: Content : Header for all internal file management - functions and structures nuclear@1: to be inherited by OS specific subclasses. nuclear@1: Created : September 19, 2012 nuclear@1: Notes : nuclear@1: nuclear@1: Notes : errno may not be preserved across use of GBaseFile member functions nuclear@1: : Directories cannot be deleted while files opened from them are in use nuclear@1: (For the GetFullName function) nuclear@1: nuclear@1: Copyright : Copyright 2012 Oculus VR, Inc. All Rights reserved. nuclear@1: nuclear@1: Use of this software is subject to the terms of the Oculus license nuclear@1: agreement provided at the time of installation or download, or which nuclear@1: otherwise accompanies this software in either electronic or hard copy form. nuclear@1: nuclear@1: ************************************************************************************/ nuclear@1: nuclear@1: #ifndef OVR_SysFile_h nuclear@1: #define OVR_SysFile_h nuclear@1: nuclear@1: #include "OVR_File.h" nuclear@1: nuclear@1: namespace OVR { nuclear@1: nuclear@1: // ***** Declared classes nuclear@1: class SysFile; nuclear@1: nuclear@1: //----------------------------------------------------------------------------------- nuclear@1: // *** File Statistics nuclear@1: nuclear@1: // This class contents are similar to _stat, providing nuclear@1: // creation, modify and other information about the file. nuclear@1: struct FileStat nuclear@1: { nuclear@1: // No change or create time because they are not available on most systems nuclear@1: SInt64 ModifyTime; nuclear@1: SInt64 AccessTime; nuclear@1: SInt64 FileSize; nuclear@1: nuclear@1: bool operator== (const FileStat& stat) const nuclear@1: { nuclear@1: return ( (ModifyTime == stat.ModifyTime) && nuclear@1: (AccessTime == stat.AccessTime) && nuclear@1: (FileSize == stat.FileSize) ); nuclear@1: } nuclear@1: }; nuclear@1: nuclear@1: //----------------------------------------------------------------------------------- nuclear@1: // *** System File nuclear@1: nuclear@1: // System file is created to access objects on file system directly nuclear@1: // This file can refer directly to path. nuclear@1: // System file can be open & closed several times; however, such use is not recommended nuclear@1: // This class is realy a wrapper around an implementation of File interface for a nuclear@1: // particular platform. nuclear@1: nuclear@1: class SysFile : public DelegatedFile nuclear@1: { nuclear@1: protected: nuclear@1: SysFile(const SysFile &source) : DelegatedFile () { OVR_UNUSED(source); } nuclear@1: public: nuclear@1: nuclear@1: // ** Constructor nuclear@1: SysFile(); nuclear@1: // Opens a file nuclear@1: SysFile(const String& path, int flags = Open_Read|Open_Buffered, int mode = Mode_ReadWrite); nuclear@1: nuclear@1: // ** Open & management nuclear@1: bool Open(const String& path, int flags = Open_Read|Open_Buffered, int mode = Mode_ReadWrite); nuclear@1: nuclear@1: OVR_FORCE_INLINE bool Create(const String& path, int mode = Mode_ReadWrite) nuclear@1: { return Open(path, Open_ReadWrite|Open_Create, mode); } nuclear@1: nuclear@1: // Helper function: obtain file statistics information. In GFx, this is used to detect file changes. nuclear@1: // Return 0 if function failed, most likely because the file doesn't exist. nuclear@1: static bool OVR_CDECL GetFileStat(FileStat* pfileStats, const String& path); nuclear@1: nuclear@1: // ** Overrides nuclear@1: // Overridden to provide re-open support nuclear@1: virtual int GetErrorCode(); nuclear@1: nuclear@1: virtual bool IsValid(); nuclear@1: nuclear@1: virtual bool Close(); nuclear@1: }; nuclear@1: nuclear@1: } // Scaleform nuclear@1: nuclear@1: #endif