include/boost/corosio/file_base.hpp

100.0% Lines (4 / 4) 100.0% 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 /** Groups the flag and seek-origin constants shared
18 by @ref stream_file and @ref random_access_file.
19 */
20 struct file_base
21 {
22 /** Bitmask flags for opening a file.
23
24 Flags are combined with bitwise OR to specify the
25 desired access mode and creation behavior.
26 */
27 enum flags : unsigned
28 {
29 /// Open for reading only.
30 read_only = 1,
31
32 /// Open for writing only.
33 write_only = 2,
34
35 /// Open for reading and writing.
36 read_write = read_only | write_only,
37
38 /// Append to the end of the file on each write.
39 append = 4,
40
41 /// Create the file if it does not exist.
42 create = 8,
43
44 /// Fail if the file already exists (requires @ref create).
45 exclusive = 16,
46
47 /// Truncate the file to zero length on open.
48 truncate = 32,
49
50 /// Synchronize data to disk on each write.
51 sync_all_on_write = 64
52 };
53
54 /** Origin for seek operations. */
55 enum seek_basis
56 {
57 /// Seek relative to the beginning of the file.
58 seek_set,
59
60 /// Seek relative to the current position.
61 seek_cur,
62
63 /// Seek relative to the end of the file.
64 seek_end
65 };
66
67 125x friend constexpr flags operator|(flags a, flags b) noexcept
68 {
69 return static_cast<flags>(
70 125x static_cast<unsigned>(a) | static_cast<unsigned>(b));
71 }
72
73 2329x friend constexpr flags operator&(flags a, flags b) noexcept
74 {
75 return static_cast<flags>(
76 2329x static_cast<unsigned>(a) & static_cast<unsigned>(b));
77 }
78
79 friend constexpr flags& operator|=(flags& a, flags b) noexcept
80 {
81 return a = a | b;
82 }
83
84 friend constexpr flags& operator&=(flags& a, flags b) noexcept
85 {
86 return a = a & b;
87 }
88 };
89
90 } // namespace boost::corosio
91
92 #endif // BOOST_COROSIO_FILE_BASE_HPP
93