00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _SWORD_STREAMS_FILEHANDLE_
00020 #define _SWORD_STREAMS_FILEHANDLE_
00021
00022 #include "sword/base.SmartPtr.h"
00023 #include "sword/base.FileSystem.h"
00024 #include "sword/streams.File.h"
00025
00026 #ifdef WIN32
00027 # define FILEHANDLE_IMPL_TYPE HANDLE
00028 #else // WIN32
00029 # define FILEHANDLE_IMPL_TYPE int
00030 #endif // !WIN32
00031
00032 namespace sword {
00033
00034 class SWORDDECL FileHandle;
00035 typedef SmartPtr<FileHandle> PFileHandle;
00036
00037 class SWORDDECL FileHandle {
00038 public:
00039 FileHandle(const std::string &name, FileSystem::Mode mode);
00040 FileHandle(FILEHANDLE_IMPL_TYPE handle, const std::string &name);
00041 ~FileHandle();
00042
00043 FILEHANDLE_IMPL_TYPE handle() const;
00044 std::string name() const;
00045
00046 void seek(word position);
00047
00048 static PFileHandle cin();
00049 static PFileHandle cout();
00050 static PFileHandle cerr();
00051
00052 class OpenException : public Exception {};
00053 class CloseException : public Exception {};
00054
00055 private:
00056 FILEHANDLE_IMPL_TYPE handle_;
00057 bool owner_;
00058 std::string name_;
00059
00060 FileHandle(const FileHandle &rhs);
00061 FileHandle &operator==(const FileHandle &rhs);
00062 };
00063
00064 }
00065
00066 #include "sword.private/streams.FileHandle.inl"
00067
00068 #endif // _SWORD_STREAMS_FILEHANDLE_