Mercurial > projects > hoofbaby
diff deps/Platinum/ThirdParty/Neptune/Source/Core/NptFile.h @ 0:3425707ddbf6
Initial import (hopefully this mercurial stuff works...)
author | fraserofthenight |
---|---|
date | Mon, 06 Jul 2009 08:06:28 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deps/Platinum/ThirdParty/Neptune/Source/Core/NptFile.h Mon Jul 06 08:06:28 2009 -0700 @@ -0,0 +1,201 @@ +/***************************************************************** +| +| Neptune - Files +| +| Copyright (c) 2002-2008, Axiomatic Systems, LLC. +| All rights reserved. +| +| Redistribution and use in source and binary forms, with or without +| modification, are permitted provided that the following conditions are met: +| * Redistributions of source code must retain the above copyright +| notice, this list of conditions and the following disclaimer. +| * Redistributions in binary form must reproduce the above copyright +| notice, this list of conditions and the following disclaimer in the +| documentation and/or other materials provided with the distribution. +| * Neither the name of Axiomatic Systems nor the +| names of its contributors may be used to endorse or promote products +| derived from this software without specific prior written permission. +| +| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY +| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY +| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +| + ****************************************************************/ + +#ifndef _NPT_FILE_H_ +#define _NPT_FILE_H_ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "NptTypes.h" +#include "NptStreams.h" + +/*---------------------------------------------------------------------- +| constants ++---------------------------------------------------------------------*/ +const int NPT_ERROR_NO_SUCH_FILE = NPT_ERROR_BASE_FILE - 0; +const int NPT_ERROR_FILE_NOT_OPEN = NPT_ERROR_BASE_FILE - 1; +const int NPT_ERROR_FILE_BUSY = NPT_ERROR_BASE_FILE - 2; +const int NPT_ERROR_FILE_ALREADY_OPEN = NPT_ERROR_BASE_FILE - 3; +const int NPT_ERROR_FILE_NOT_READABLE = NPT_ERROR_BASE_FILE - 4; +const int NPT_ERROR_FILE_NOT_WRITABLE = NPT_ERROR_BASE_FILE - 5; +const int NPT_ERROR_FILE_NOT_DIRECTORY = NPT_ERROR_BASE_FILE - 6; +const int NPT_ERROR_FILE_ALREADY_EXISTS = NPT_ERROR_BASE_FILE - 7; +const int NPT_ERROR_FILE_NOT_ENOUGH_SPACE = NPT_ERROR_BASE_FILE - 8; +const int NPT_ERROR_DIRECTORY_NOT_EMPTY = NPT_ERROR_BASE_FILE - 9; + +const unsigned int NPT_FILE_OPEN_MODE_READ = 0x01; +const unsigned int NPT_FILE_OPEN_MODE_WRITE = 0x02; +const unsigned int NPT_FILE_OPEN_MODE_CREATE = 0x04; +const unsigned int NPT_FILE_OPEN_MODE_TRUNCATE = 0x08; +const unsigned int NPT_FILE_OPEN_MODE_UNBUFFERED = 0x10; +const unsigned int NPT_FILE_OPEN_MODE_APPEND = 0x20; + +const unsigned int NPT_FILE_ATTRIBUTE_READ_ONLY = 0x01; +const unsigned int NPT_FILE_ATTRIBUTE_LINK = 0x02; + +#define NPT_FILE_STANDARD_INPUT "@STDIN" +#define NPT_FILE_STANDARD_OUTPUT "@STDOUT" +#define NPT_FILE_STANDARD_ERROR "@STDERR" + +/*---------------------------------------------------------------------- +| class references ++---------------------------------------------------------------------*/ +class NPT_DataBuffer; + +/*---------------------------------------------------------------------- +| NPT_FileInfo ++---------------------------------------------------------------------*/ +struct NPT_FileInfo +{ + // types + typedef enum { + FILE_TYPE_NONE, + FILE_TYPE_REGULAR, + FILE_TYPE_DIRECTORY, + FILE_TYPE_SPECIAL, + FILE_TYPE_OTHER + } FileType; + + // constructor + NPT_FileInfo() : m_Type(FILE_TYPE_NONE), m_Size(0), m_AttributesMask(0), m_Attributes(0) {} + + // members + FileType m_Type; + NPT_UInt64 m_Size; + NPT_Flags m_AttributesMask; + NPT_Flags m_Attributes; +}; + +/*---------------------------------------------------------------------- +| NPT_FilePath ++---------------------------------------------------------------------*/ +class NPT_FilePath +{ +public: + // class members + static const NPT_String Separator; + + // class methods + static NPT_String BaseName(const char* path, bool with_extension = true); + static NPT_String DirectoryName(const char* path); + static NPT_String FileExtension(const char* path); + static NPT_String Create(const char* directory, const char* base); + +private: + NPT_FilePath() {} // this class can't have instances +}; + +/*---------------------------------------------------------------------- +| NPT_FileInterface ++---------------------------------------------------------------------*/ +class NPT_FileInterface +{ +public: + // types + typedef unsigned int OpenMode; + + // constructors and destructor + virtual ~NPT_FileInterface() {} + + // methods + virtual NPT_Result Open(OpenMode mode) = 0; + virtual NPT_Result Close() = 0; + virtual NPT_Result GetSize(NPT_LargeSize& size) = 0; + virtual NPT_Result GetInputStream(NPT_InputStreamReference& stream) = 0; + virtual NPT_Result GetOutputStream(NPT_OutputStreamReference& stream) = 0; +}; + +/*---------------------------------------------------------------------- +| NPT_File ++---------------------------------------------------------------------*/ +class NPT_File : public NPT_FileInterface +{ +public: + // class methods + static NPT_Result GetRoots(NPT_List<NPT_String>& roots); + static NPT_Result GetInfo(const char* path, NPT_FileInfo* info = NULL); + static NPT_Result GetCount(const char* path, NPT_Cardinal& count); + static bool Exists(const char* path) { return NPT_SUCCEEDED(GetInfo(path)); } + static NPT_Result Delete(const char* path); + static NPT_Result DeleteFile(const char* path); + static NPT_Result DeleteDirectory(const char* path); + static NPT_Result Rename(const char* from_path, const char* to_path); + static NPT_Result ListDirectory(const char* path, NPT_List<NPT_String>& entries, NPT_Ordinal start = 0, NPT_Cardinal count = 0); + static NPT_Result CreateDirectory(const char* path); + static NPT_Result GetWorkingDirectory(NPT_String& path); + static NPT_Result Load(const char* path, NPT_DataBuffer& buffer, NPT_FileInterface::OpenMode mode = NPT_FILE_OPEN_MODE_READ); + static NPT_Result Load(const char* path, NPT_String& data, NPT_FileInterface::OpenMode mode = NPT_FILE_OPEN_MODE_READ); + static NPT_Result Save(const char* path, NPT_String& data); + static NPT_Result Save(const char* path, const NPT_DataBuffer& buffer); + + // constructors and destructor + NPT_File(const char* path); + ~NPT_File() { delete m_Delegate; } + + // methods + NPT_Result Load(NPT_DataBuffer& buffer); + NPT_Result Save(const NPT_DataBuffer& buffer); + const NPT_String& GetPath() { return m_Path; } + //NPT_Result GetSize(NPT_LargeSize &size); + NPT_Result GetInfo(NPT_FileInfo& info); + NPT_Result ListDirectory(NPT_List<NPT_String>& entries); + NPT_Result Rename(const char* path); + NPT_Result GetCount(NPT_Cardinal& count); + + // NPT_FileInterface methods + NPT_Result Open(OpenMode mode) { + return m_Delegate->Open(mode); + } + NPT_Result Close() { + return m_Delegate->Close(); + } + NPT_Result GetSize(NPT_LargeSize& size) { + return m_Delegate->GetSize(size); + } + NPT_Result GetInputStream(NPT_InputStreamReference& stream) { + return m_Delegate->GetInputStream(stream); + } + NPT_Result GetOutputStream(NPT_OutputStreamReference& stream) { + return m_Delegate->GetOutputStream(stream); + } + + // operators + NPT_File& operator=(const NPT_File& file); + +protected: + // members + NPT_FileInterface* m_Delegate; + NPT_String m_Path; + NPT_FileInfo m_Info; +}; + +#endif // _NPT_FILE_H_