00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00036 #ifndef OW_FILE_HPP_INCLUDE_GUARD_
00037 #define OW_FILE_HPP_INCLUDE_GUARD_
00038 #include "OW_config.h"
00039 #include "OW_Types.hpp"
00040 #include "OW_FileSystem.hpp"
00041 #include <algorithm>
00042
00043 namespace OW_NAMESPACE
00044 {
00045
00050 class OW_COMMON_API File
00051 {
00052 public:
00056 File() : m_hdl(OW_INVALID_FILEHANDLE)
00057 {
00058 }
00063 File(const File& x);
00064 ~File()
00065 {
00066 close();
00067 }
00073 File& operator= (const File& x)
00074 {
00075 File(x).swap(*this);
00076 return *this;
00077 }
00078 void swap(File& x)
00079 {
00080 std::swap(m_hdl, x.m_hdl);
00081 }
00092 size_t read(void* bfr, size_t numberOfBytes, off_t offset=-1L) const
00093 {
00094 return FileSystem::read(m_hdl, bfr, numberOfBytes, offset);
00095 }
00105 size_t write(const void* bfr, size_t numberOfBytes, off_t offset=-1L)
00106 {
00107 return FileSystem::write(m_hdl, bfr, numberOfBytes, offset);
00108 }
00119 int seek(off_t offset, int whence) const
00120 {
00121 return FileSystem::seek(m_hdl, offset, whence);
00122 }
00127 off_t tell() const
00128 {
00129 return FileSystem::tell(m_hdl);
00130 }
00134 void rewind() const
00135 {
00136 FileSystem::rewind(m_hdl);
00137 }
00142 int close()
00143 {
00144 if (m_hdl != OW_INVALID_FILEHANDLE)
00145 {
00146 int rv = FileSystem::close(m_hdl);
00147 m_hdl = OW_INVALID_FILEHANDLE;
00148 return rv;
00149 }
00150 return 0;
00151 }
00156 int flush()
00157 {
00158 return FileSystem::flush(m_hdl);
00159 }
00170 int getLock();
00181 int tryLock();
00188 int unlock();
00189
00190 typedef FileHandle File::*safe_bool;
00194 operator safe_bool () const
00195 { return (m_hdl != OW_INVALID_FILEHANDLE) ? &File::m_hdl : 0; }
00196 bool operator!() const
00197 { return m_hdl == OW_INVALID_FILEHANDLE; }
00203 bool operator==(const File& rhs)
00204 {
00205 return m_hdl == rhs.m_hdl;
00206 }
00207
00208 File(FileHandle hdl) : m_hdl(hdl)
00209 {
00210 }
00211
00212 private:
00213
00214 FileHandle m_hdl;
00215 };
00216
00217 }
00218
00219 #endif