mirror of
https://github.com/30hours/blah2.git
synced 2024-11-08 12:25:42 +00:00
166 lines
3.9 KiB
C++
166 lines
3.9 KiB
C++
//
|
|
// file_base.hpp
|
|
// ~~~~~~~~~~~~~
|
|
//
|
|
// Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
|
//
|
|
// 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)
|
|
//
|
|
|
|
#ifndef ASIO_FILE_BASE_HPP
|
|
#define ASIO_FILE_BASE_HPP
|
|
|
|
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
|
|
# pragma once
|
|
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
|
|
|
#include "asio/detail/config.hpp"
|
|
|
|
#if defined(ASIO_HAS_FILE) \
|
|
|| defined(GENERATING_DOCUMENTATION)
|
|
|
|
#if !defined(ASIO_WINDOWS)
|
|
# include <fcntl.h>
|
|
#endif // !defined(ASIO_WINDOWS)
|
|
|
|
#include "asio/detail/push_options.hpp"
|
|
|
|
namespace asio {
|
|
|
|
/// The file_base class is used as a base for the basic_stream_file and
|
|
/// basic_random_access_file class templates so that we have a common place to
|
|
/// define flags.
|
|
class file_base
|
|
{
|
|
public:
|
|
#if defined(GENERATING_DOCUMENTATION)
|
|
/// A bitmask type (C++ Std [lib.bitmask.types]).
|
|
typedef unspecified flags;
|
|
|
|
/// Open the file for reading.
|
|
static const flags read_only = implementation_defined;
|
|
|
|
/// Open the file for writing.
|
|
static const flags write_only = implementation_defined;
|
|
|
|
/// Open the file for reading and writing.
|
|
static const flags read_write = implementation_defined;
|
|
|
|
/// Open the file in append mode.
|
|
static const flags append = implementation_defined;
|
|
|
|
/// Create the file if it does not exist.
|
|
static const flags create = implementation_defined;
|
|
|
|
/// Ensure a new file is created. Must be combined with @c create.
|
|
static const flags exclusive = implementation_defined;
|
|
|
|
/// Open the file with any existing contents truncated.
|
|
static const flags truncate = implementation_defined;
|
|
|
|
/// Open the file so that write operations automatically synchronise the file
|
|
/// data and metadata to disk.
|
|
static const flags sync_all_on_write = implementation_defined;
|
|
#else
|
|
enum flags
|
|
{
|
|
#if defined(ASIO_WINDOWS)
|
|
read_only = 1,
|
|
write_only = 2,
|
|
read_write = 4,
|
|
append = 8,
|
|
create = 16,
|
|
exclusive = 32,
|
|
truncate = 64,
|
|
sync_all_on_write = 128
|
|
#else // defined(ASIO_WINDOWS)
|
|
read_only = O_RDONLY,
|
|
write_only = O_WRONLY,
|
|
read_write = O_RDWR,
|
|
append = O_APPEND,
|
|
create = O_CREAT,
|
|
exclusive = O_EXCL,
|
|
truncate = O_TRUNC,
|
|
sync_all_on_write = O_SYNC
|
|
#endif // defined(ASIO_WINDOWS)
|
|
};
|
|
|
|
// Implement bitmask operations as shown in C++ Std [lib.bitmask.types].
|
|
|
|
friend flags operator&(flags x, flags y)
|
|
{
|
|
return static_cast<flags>(
|
|
static_cast<unsigned int>(x) & static_cast<unsigned int>(y));
|
|
}
|
|
|
|
friend flags operator|(flags x, flags y)
|
|
{
|
|
return static_cast<flags>(
|
|
static_cast<unsigned int>(x) | static_cast<unsigned int>(y));
|
|
}
|
|
|
|
friend flags operator^(flags x, flags y)
|
|
{
|
|
return static_cast<flags>(
|
|
static_cast<unsigned int>(x) ^ static_cast<unsigned int>(y));
|
|
}
|
|
|
|
friend flags operator~(flags x)
|
|
{
|
|
return static_cast<flags>(~static_cast<unsigned int>(x));
|
|
}
|
|
|
|
friend flags& operator&=(flags& x, flags y)
|
|
{
|
|
x = x & y;
|
|
return x;
|
|
}
|
|
|
|
friend flags& operator|=(flags& x, flags y)
|
|
{
|
|
x = x | y;
|
|
return x;
|
|
}
|
|
|
|
friend flags& operator^=(flags& x, flags y)
|
|
{
|
|
x = x ^ y;
|
|
return x;
|
|
}
|
|
#endif
|
|
|
|
/// Basis for seeking in a file.
|
|
enum seek_basis
|
|
{
|
|
#if defined(GENERATING_DOCUMENTATION)
|
|
/// Seek to an absolute position.
|
|
seek_set = implementation_defined,
|
|
|
|
/// Seek to an offset relative to the current file position.
|
|
seek_cur = implementation_defined,
|
|
|
|
/// Seek to an offset relative to the end of the file.
|
|
seek_end = implementation_defined
|
|
#else
|
|
seek_set = SEEK_SET,
|
|
seek_cur = SEEK_CUR,
|
|
seek_end = SEEK_END
|
|
#endif
|
|
};
|
|
|
|
protected:
|
|
/// Protected destructor to prevent deletion through this type.
|
|
~file_base()
|
|
{
|
|
}
|
|
};
|
|
|
|
} // namespace asio
|
|
|
|
#include "asio/detail/pop_options.hpp"
|
|
|
|
#endif // defined(ASIO_HAS_FILE)
|
|
// || defined(GENERATING_DOCUMENTATION)
|
|
|
|
#endif // ASIO_FILE_BASE_HPP
|