TLA Line data 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 HIT 23 : friend constexpr flags operator|(flags a, flags b) noexcept
70 : {
71 : return static_cast<flags>(
72 23 : static_cast<unsigned>(a) | static_cast<unsigned>(b));
73 : }
74 :
75 188 : friend constexpr flags operator&(flags a, flags b) noexcept
76 : {
77 : return static_cast<flags>(
78 188 : 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
|