"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSFileLib/Src/LSFFileLib.h

00001 
00017 #ifndef __LSF_FILELIB_H__
00018 #define __LSF_FILELIB_H__
00019 
00020 // Include the memory library.
00021 #include "LSAMemLib.h"
00022 using namespace ::lsa;
00023 
00024 // Include the threading library.
00025 #include "LSHThreadLib.h"
00026 using namespace ::lsh;
00027 
00028 // Include the standard library.
00029 #include "LSSTDStandardLib.h"
00030 using namespace ::lsstd;
00031 
00032 // Include the LSTL.
00033 #include "LSTLib.h"
00034 using namespace ::lstl;
00035 
00036 
00037 #if defined( LSE_WINDOWS )
00038 #include "Windows/LSSTDWindows.h"
00039 
00040 // Max file path.
00041 #define LSF_MAX_PATH                                            MAX_PATH
00042 
00043 #elif defined( LSE_MAC )        // Macintosh uses standard C fopen() and etc.
00044 #include <CoreFoundation/CoreFoundation.h>                      
00045 
00046 // Max file path.
00047 #define LSF_MAX_PATH                                            PATH_MAX
00048 
00049 #endif  // #if defined( LSE_WINDOWS )
00050 
00051 
00052 // TODO: Learn and add the headers for other systems.
00053 
00054 
00055 namespace lsf {
00056 
00057         // == Enumerations.
00061         enum LSF_OPEN_FILE {
00062 #ifdef LSE_WINDOWS
00063                 LSF_OF_READ                                                     = FILE_READ_DATA,
00064                 LSF_OF_WRITE                                            = FILE_WRITE_DATA,
00065                 LSF_OF_APPEND                                           = FILE_APPEND_DATA,
00066 #elif defined( LSE_MAC )
00067                 LSF_OF_READ                                                     = (1 << 0),
00068                 LSF_OF_WRITE                                            = (1 << 1),
00069                 LSF_OF_APPEND                                           = (1 << 2),
00070 #endif  // LSE_WINDOWS
00071         };
00072 
00073 
00074         // == Types.
00075 #ifdef LSE_WINDOWS
00076         // A few namespace-specific types.
00077         typedef HANDLE                                                  LSF_FILE;
00078 
00082         enum LSF_SEEK {
00083                 LSF_S_BEGIN                                                     = FILE_BEGIN,
00084                 LSF_S_CURRENT                                           = FILE_CURRENT,
00085                 LSF_S_END                                                       = FILE_END
00086         };
00087 
00091         typedef struct LSF_FILE_MAP {
00092                 // Handle for the open file.
00093                 HANDLE                                                          hFile;
00094 
00095                 // Handle for the file map.
00096                 HANDLE                                                          hFileMap;
00097 
00098                 // Mapping mode.
00099                 LSUINT32                                                        ui32Mode;
00100 
00101         } * LPLSF_FILE_MAP, * const LPCLSF_FILE_MAP;
00102 #elif defined( LSE_MAC )
00103         typedef FILE *                                                  LSF_FILE;
00104 
00108         enum LSF_SEEK {
00109                 LSF_S_BEGIN                                                     = SEEK_SET,
00110                 LSF_S_CURRENT                                           = SEEK_CUR,
00111                 LSF_S_END                                                       = SEEK_END
00112         };
00113 
00117         typedef struct LSF_FILE_MAP {
00118                 // Handle for the open file and later close.
00119                 int                                                                     iFile;
00120 
00121                 // Mapping mode.
00122                 LSUINT32                                                        ui32Mode;
00123         } * LPLSF_FILE_MAP, * const LPCLSF_FILE_MAP;
00124 #endif  // LSE_WINDOWS
00125 
00126 
00127 
00135         class CFileLib {
00136         public :
00137 
00138                 // == Functions.
00148                 static LSF_FILE LSE_CALL                        OpenFile( const LSCHAR * _pcFile, LSF_OPEN_FILE _ofOpenType, LSBOOL _bOpenAlways );
00149 
00158                 static LSBOOL LSE_CALL                          CloseFile( LSF_FILE &_fFile );
00159 
00170                 static LSBOOL LSE_CALL                          ReadFile( LSF_FILE _fFile, LSVOID * _pvBuffer, LSUINTPTR _uiptrBytesToRead );
00171 
00182                 static LSBOOL LSE_CALL                          WriteFile( LSF_FILE _fFile, const LSVOID * _pvBuffer, LSUINTPTR _uiptrBytesToWrite );
00183 
00192                 static LSBOOL LSE_CALL                          SetFilePointer( LSF_FILE _fFile, LSINT64 _i64DistanceToMove, LSF_SEEK _sMoveMethod );
00193 
00200                 static LSUINT64 LSE_CALL                        GetFilePointer( LSF_FILE _fFile );
00201 
00213                 static LSBOOL LSE_CALL                          CreateFileMap( const LSCHAR * _pcFile, LSF_OPEN_FILE _ofOpenType,
00214                         LSF_FILE_MAP &_fmMap );
00215 
00227                 static LSBOOL LSE_CALL                          CreateFileMap( const LSWCHAR_T * _pwcFile, LSF_OPEN_FILE _ofOpenType,
00228                         LSF_FILE_MAP &_fmMap );
00229 
00236                 static LSVOID LSE_CALL                          DestroyFileMap( LSF_FILE_MAP &_fmMap );
00237 
00248                 static LSVOID * LSE_CALL                        Map( const LSF_FILE_MAP &_fmMap, LSUINT64 _ui64Offset,
00249                         LSUINTPTR _uiptrLen );
00250 
00257                 static LSVOID LSE_CALL                          UnMap( const LSVOID * _pvAddr, LSUINTPTR _uiptrLen );
00258 
00265                 static LSBOOL LSE_CALL                          CanWriteToFileMap( const LSF_FILE_MAP &_fmMap );
00266 
00272                 static LSUINT32 LSE_CALL                        GetPageSize();
00273 
00280                 static LSUINT64 LSE_CALL                        GetFileSize( LSF_FILE _fFile );
00281 
00288                 static LSUINT64 LSE_CALL                        GetFileSize( const LSCHAR * _pcFile );
00289 
00296                 static LSUINT64 LSE_CALL                        GetFileSize( const LSWCHAR_T * _pwcFile );
00297 
00305                 static LSBOOL LSE_CALL                          Exists( const LSCHAR * _pcFile );
00306 
00314                 static LSBOOL LSE_CALL                          Exists( const LSWCHAR_T * _pwcFile );
00315 
00325                 static LSCHAR * LSE_CALL                        GetSelfDir( LSCHAR * _pcRet );
00326 
00336                 static LSWCHAR_T * LSE_CALL                     GetSelfDir( LSWCHAR_T * _pwcRet );
00337 
00347                 static LSCHAR * LSE_CALL                        ExpandPath( const LSCHAR * _pcPath, LSCHAR * _pcRet );
00348 
00357                 static LSWCHAR_T * LSE_CALL                     ExpandPath( const LSWCHAR_T * _pwcPath, LSWCHAR_T * _pwcRet );
00358 
00368                 static LSCHAR * LSE_CALL                        ExpandResourcePath( const LSCHAR * _pcPath, LSCHAR * _pcRet );
00369 
00378                 static LSCHAR * LSE_CALL                        NoExtension( LSCHAR * _pcPath );
00379 
00387                 static LSWCHAR_T * LSE_CALL                     NoExtension( LSWCHAR_T * _pwcPath );
00388 
00398                 static LSCHAR * LSE_CALL                        NoPath( LSCHAR * _pcPath );
00399 
00408                 static LSWCHAR_T * LSE_CALL                     NoPath( LSWCHAR_T * _pwcPath );
00409 
00419                 static LSCHAR * LSE_CALL                        NoFile( LSCHAR * _pcPath );
00420 
00430                 static LSWCHAR_T * LSE_CALL                     NoFile( LSWCHAR_T * _pwcPath );
00431 
00437                 static LSINT32 LSE_CALL                         Eof();
00438 
00444                 static LSVOID LSE_CALL                          SetResPath( const LSCHAR * _pcPath );
00445 
00451                 static LSE_INLINE const LSCHAR * LSE_CALL
00452                                                                                         GetResPath();
00453 
00454 
00455         protected :
00459                 static LSCHAR                                           m_szResourcePath[LSF_MAX_PATH];
00460 
00464                 static LSUINT32                                         m_ui32ResPathLen;
00465         };
00466 
00467         // == Functions.
00473         LSE_INLINE const LSCHAR * LSE_CALL CFileLib::GetResPath() {
00474                 return m_szResourcePath;
00475         }
00476 
00477 }       // namespace lsf
00478 
00479 #endif  // __LSF_FILELIB_H__
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator