/usr/include/boost/iostreams/device
Edit: /usr/include/boost/iostreams/device/file.hpp (6084B)
// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
// (C) Copyright 2003-2007 Jonathan Turkanis
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
// See http://www.boost.org/libs/iostreams for documentation.
#ifndef BOOST_IOSTREAMS_FILE_HPP_INCLUDED
#define BOOST_IOSTREAMS_FILE_HPP_INCLUDED
#if defined(_MSC_VER)
# pragma once
#endif
#include
#ifndef BOOST_IOSTREAMS_NO_LOCALE
# include
#endif
#include // pathnames, char_traits.
#include
#include // openmode, seekdir, int types.
#include
#include // seek.
#include
// Must come last.
#include // MSVC.
namespace boost { namespace iostreams {
template
class basic_file {
public:
typedef Ch char_type;
struct category
: public seekable_device_tag,
public closable_tag,
public localizable_tag,
public flushable_tag
{ };
basic_file( const std::string& path,
BOOST_IOS::openmode mode =
BOOST_IOS::in | BOOST_IOS::out,
BOOST_IOS::openmode base_mode =
BOOST_IOS::in | BOOST_IOS::out );
std::streamsize read(char_type* s, std::streamsize n);
bool putback(char_type c);
std::streamsize write(const char_type* s, std::streamsize n);
std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
BOOST_IOS::openmode which =
BOOST_IOS::in | BOOST_IOS::out );
void open( const std::string& path,
BOOST_IOS::openmode mode =
BOOST_IOS::in | BOOST_IOS::out,
BOOST_IOS::openmode base_mode =
BOOST_IOS::in | BOOST_IOS::out );
bool is_open() const;
void close();
bool flush();
#ifndef BOOST_IOSTREAMS_NO_LOCALE
void imbue(const std::locale& loc) { pimpl_->file_.pubimbue(loc); }
#endif
private:
struct impl {
impl(const std::string& path, BOOST_IOS::openmode mode)
{ file_.open(path.c_str(), mode); }
~impl() { if (file_.is_open()) file_.close(); }
BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) file_;
};
shared_ptr pimpl_;
};
typedef basic_file file;
typedef basic_file wfile;
template
struct basic_file_source : private basic_file {
typedef Ch char_type;
struct category
: input_seekable,
device_tag,
closable_tag
{ };
using basic_file::read;
using basic_file::putback;
using basic_file::seek;
using basic_file::is_open;
using basic_file::close;
basic_file_source( const std::string& path,
BOOST_IOS::openmode mode =
BOOST_IOS::in )
: basic_file(path, mode & ~BOOST_IOS::out, BOOST_IOS::in)
{ }
void open( const std::string& path,
BOOST_IOS::openmode mode = BOOST_IOS::in )
{
basic_file::open(path, mode & ~BOOST_IOS::out, BOOST_IOS::in);
}
};
typedef basic_file_source file_source;
typedef basic_file_source wfile_source;
template
struct basic_file_sink : private basic_file {
typedef Ch char_type;
struct category
: output_seekable,
device_tag,
closable_tag,
flushable_tag
{ };
using basic_file::write;
using basic_file::seek;
using basic_file::is_open;
using basic_file::close;
using basic_file::flush;
basic_file_sink( const std::string& path,
BOOST_IOS::openmode mode = BOOST_IOS::out )
: basic_file(path, mode & ~BOOST_IOS::in, BOOST_IOS::out)
{ }
void open( const std::string& path,
BOOST_IOS::openmode mode = BOOST_IOS::out )
{
basic_file::open(path, mode & ~BOOST_IOS::in, BOOST_IOS::out);
}
};
typedef basic_file_sink file_sink;
typedef basic_file_sink wfile_sink;
//------------------Implementation of basic_file------------------------------//
template
basic_file::basic_file
( const std::string& path, BOOST_IOS::openmode mode,
BOOST_IOS::openmode base_mode )
{
open(path, mode, base_mode);
}
template
inline std::streamsize basic_file::read
(char_type* s, std::streamsize n)
{
std::streamsize result = pimpl_->file_.sgetn(s, n);
return result != 0 ? result : -1;
}
template
inline bool basic_file::putback(char_type c)
{
return !!pimpl_->file_.sputbackc(c);
}
template
inline std::streamsize basic_file::write
(const char_type* s, std::streamsize n)
{ return pimpl_->file_.sputn(s, n); }
template
std::streampos basic_file::seek
( stream_offset off, BOOST_IOS::seekdir way,
BOOST_IOS::openmode )
{ return iostreams::seek(pimpl_->file_, off, way); }
template
void basic_file::open
( const std::string& path, BOOST_IOS::openmode mode,
BOOST_IOS::openmode base_mode )
{
pimpl_.reset(new impl(path, mode | base_mode));
}
template
bool basic_file::is_open() const { return pimpl_->file_.is_open(); }
template
void basic_file::close() { pimpl_->file_.close(); }
template
bool basic_file::flush()
{ return pimpl_->file_.BOOST_IOSTREAMS_PUBSYNC() == 0; }
//----------------------------------------------------------------------------//
} } // End namespaces iostreams, boost.
#include // MSVC
#endif // #ifndef BOOST_IOSTREAMS_FILE_HPP_INCLUDED