OW_File.hpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002 * Copyright (C) 2001-2004 Vintela, Inc. All rights reserved.
00003 *
00004 * Redistribution and use in source and binary forms, with or without
00005 * modification, are permitted provided that the following conditions are met:
00006 *
00007 *  - Redistributions of source code must retain the above copyright notice,
00008 *    this list of conditions and the following disclaimer.
00009 *
00010 *  - Redistributions in binary form must reproduce the above copyright notice,
00011 *    this list of conditions and the following disclaimer in the documentation
00012 *    and/or other materials provided with the distribution.
00013 *
00014 *  - Neither the name of Vintela, Inc. nor the names of its
00015 *    contributors may be used to endorse or promote products derived from this
00016 *    software without specific prior written permission.
00017 *
00018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
00019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021 * ARE DISCLAIMED. IN NO EVENT SHALL Vintela, Inc. OR THE CONTRIBUTORS
00022 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00028 * POSSIBILITY OF SUCH DAMAGE.
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> // for std::swap
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 } // end namespace OW_NAMESPACE
00218 
00219 #endif

Generated on Thu Feb 9 08:47:59 2006 for openwbem by  doxygen 1.4.6