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 : /** 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 HIT 125 : friend constexpr flags operator|(flags a, flags b) noexcept
68 : {
69 : return static_cast<flags>(
70 125 : static_cast<unsigned>(a) | static_cast<unsigned>(b));
71 : }
72 :
73 2329 : friend constexpr flags operator&(flags a, flags b) noexcept
74 : {
75 : return static_cast<flags>(
76 2329 : 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
|