AtxFile.h

00001 /*****************************************************************
00002 |
00003 |   Atomix - File Storage
00004 |
00005 |   (c) 2002-2006 Gilles Boccon-Gibod
00006 |   Author: Gilles Boccon-Gibod (bok@bok.net)
00007 |
00008  ****************************************************************/
00009 
00010 #ifndef _ATX_FILE_H_
00011 #define _ATX_FILE_H_
00012 
00013 /*----------------------------------------------------------------------
00014 |   includes
00015 +---------------------------------------------------------------------*/
00016 #include "AtxTypes.h"
00017 #include "AtxStreams.h"
00018 #include "AtxDataBuffer.h"
00019 
00020 /*----------------------------------------------------------------------
00021 |   constants
00022 +---------------------------------------------------------------------*/
00023 #define ATX_FILE_OPEN_MODE_READ       0x01
00024 #define ATX_FILE_OPEN_MODE_WRITE      0x02
00025 #define ATX_FILE_OPEN_MODE_CREATE     0x04
00026 #define ATX_FILE_OPEN_MODE_TRUNCATE   0x08
00027 #define ATX_FILE_OPEN_MODE_APPEND     0x10
00028 #define ATX_FILE_OPEN_MODE_UNBUFFERED 0x20
00029 
00030 #define ATX_ERROR_NO_SUCH_FILE       (ATX_ERROR_BASE_FILE - 0)
00031 #define ATX_ERROR_FILE_NOT_OPEN      (ATX_ERROR_BASE_FILE - 1)
00032 #define ATX_ERROR_FILE_BUSY          (ATX_ERROR_BASE_FILE - 2)
00033 #define ATX_ERROR_FILE_ALREADY_OPEN  (ATX_ERROR_BASE_FILE - 3)
00034 #define ATX_ERROR_FILE_NOT_READABLE  (ATX_ERROR_BASE_FILE - 4)
00035 #define ATX_ERROR_FILE_NOT_WRITABLE  (ATX_ERROR_BASE_FILE - 5)
00036 
00037 #define ATX_FILE_STANDARD_INPUT  "@STDIN"
00038 #define ATX_FILE_STANDARD_OUTPUT "@STDOUT"
00039 #define ATX_FILE_STANDARD_ERROR  "@STDERR"
00040 
00041 /*----------------------------------------------------------------------
00042 |   ATX_File
00043 +---------------------------------------------------------------------*/
00044 ATX_DECLARE_INTERFACE(ATX_File)
00045 ATX_BEGIN_INTERFACE_DEFINITION(ATX_File)
00046     ATX_Result (*Open)(ATX_File* self, ATX_Flags mode);
00047     ATX_Result (*Close)(ATX_File* self);
00048     ATX_Result (*GetSize)(ATX_File* self, ATX_Size* size);
00049     ATX_Result (*GetInputStream)(ATX_File* self, ATX_InputStream** stream);
00050     ATX_Result (*GetOutputStream)(ATX_File* self, ATX_OutputStream**  stream);
00051 ATX_END_INTERFACE_DEFINITION
00052 
00053 /*----------------------------------------------------------------------
00054 |   interface stubs
00055 +---------------------------------------------------------------------*/
00056 #if defined(__cplusplus)
00057 extern "C" {
00058 #endif
00059 
00060 ATX_Result ATX_File_Open(ATX_File* self, ATX_Flags mode);
00061 ATX_Result ATX_File_Close(ATX_File* self);
00062 ATX_Result ATX_File_GetSize(ATX_File* self, ATX_Size* size);
00063 ATX_Result ATX_File_GetInputStream(ATX_File* self, ATX_InputStream** stream);
00064 ATX_Result ATX_File_GetOutputStream(ATX_File* self, ATX_OutputStream**  stream);
00065 
00066 #if defined(__cplusplus)
00067 }
00068 #endif
00069 
00070 /*----------------------------------------------------------------------
00071 |   prototypes
00072 +---------------------------------------------------------------------*/
00073 #ifdef __cplusplus
00074 extern "C" {
00075 #endif /* __cplusplus */
00076 
00077 extern ATX_Result ATX_File_Create(ATX_CString name, ATX_File** file);
00078 extern ATX_Result ATX_File_Load(ATX_File* file, ATX_DataBuffer** buffer);
00079 extern ATX_Result ATX_File_Save(ATX_File* file, ATX_DataBuffer* buffer);
00080 
00081 /* helper functions */
00082 extern ATX_Result ATX_LoadFile(ATX_CString filename, ATX_DataBuffer** buffer);
00083 extern ATX_Result ATX_SaveFile(ATX_CString filename, ATX_DataBuffer* buffer);
00084 
00085 #ifdef __cplusplus
00086 }
00087 #endif /* __cplusplus */
00088 
00089 
00090 #endif /* _ATX_FILE_H_ */
00091 
00092