include/boost/corosio/file_base.hpp

100.0% Lines (4/4) 100.0% List of functions (2/2)
file_base.hpp
f(x) Functions (2)
Line TLA Hits Source Code
1 //
2 // Copyright (c) 2026 Michael Vandeberg
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/cppalliance/corosio
8 //
9
10 #ifndef BOOST_COROSIO_FILE_BASE_HPP
11 #define BOOST_COROSIO_FILE_BASE_HPP
12
13 #include <boost/corosio/detail/config.hpp>
14
15 namespace boost::corosio {
16
17 /** Common definitions for file I/O objects.
18
19 Provides open flags and seek origin constants shared
20 by @ref stream_file and @ref random_access_file.
21 */
22 struct file_base
23 {
24 /** Bitmask flags for opening a file.
25
26 Flags are combined with bitwise OR to specify the
27 desired access mode and creation behavior.
28 */
29 enum flags : unsigned
30 {
31 /// Open for reading only.
32 read_only = 1,
33
34 /// Open for writing only.
35 write_only = 2,
36
37 /// Open for reading and writing.
38 read_write = read_only | write_only,
39
40 /// Append to the end of the file on each write.
41 append = 4,
42
43 /// Create the file if it does not exist.
44 create = 8,
45
46 /// Fail if the file already exists (requires @ref create).
47 exclusive = 16,
48
49 /// Truncate the file to zero length on open.
50 truncate = 32,
51
52 /// Synchronize data to disk on each write.
53 sync_all_on_write = 64
54 };
55
56 /** Origin for seek operations. */
57 enum seek_basis
58 {
59 /// Seek relative to the beginning of the file.
60 seek_set,
61
62 /// Seek relative to the current position.
63 seek_cur,
64
65 /// Seek relative to the end of the file.
66 seek_end
67 };
68
69 23x friend constexpr flags operator|(flags a, flags b) noexcept
70 {
71 return static_cast<flags>(
72 23x static_cast<unsigned>(a) | static_cast<unsigned>(b));
73 }
74
75 188x friend constexpr flags operator&(flags a, flags b) noexcept
76 {
77 return static_cast<flags>(
78 188x static_cast<unsigned>(a) & static_cast<unsigned>(b));
79 }
80
81 friend constexpr flags& operator|=(flags& a, flags b) noexcept
82 {
83 return a = a | b;
84 }
85
86 friend constexpr flags& operator&=(flags& a, flags b) noexcept
87 {
88 return a = a & b;
89 }
90 };
91
92 } // namespace boost::corosio
93
94 #endif // BOOST_COROSIO_FILE_BASE_HPP
95