Where Online Learning is simpler!
The C and C++ Include Header Files
/usr/include/c++/13/bits/postypes.h
$ cat -n /usr/include/c++/13/bits/postypes.h 1 // Position types -*- C++ -*- 2 3 // Copyright (C) 1997-2023 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the 7 // terms of the GNU General Public License as published by the 8 // Free Software Foundation; either version 3, or (at your option) 9 // any later version. 10 11 // This library is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 //
. 24 25 /** @file bits/postypes.h 26 * This is an internal header file, included by other library headers. 27 * Do not attempt to use it directly. @headername{iosfwd} 28 */ 29 30 // 31 // ISO C++ 14882: 27.4.1 - Types 32 // ISO C++ 14882: 27.4.3 - Template class fpos 33 // 34 35 #ifndef _GLIBCXX_POSTYPES_H 36 #define _GLIBCXX_POSTYPES_H 1 37 38 #pragma GCC system_header 39 40 #include
// For mbstate_t 41 42 namespace std _GLIBCXX_VISIBILITY(default) 43 { 44 _GLIBCXX_BEGIN_NAMESPACE_VERSION 45 46 // The types streamoff, streampos and wstreampos and the class 47 // template fpos<> are described in clauses 21.1.2, 21.1.3, 27.1.2, 48 // 27.2, 27.4.1, 27.4.3 and D.6. Despite all this verbiage, the 49 // behaviour of these types is mostly implementation defined or 50 // unspecified. The behaviour in this implementation is as noted 51 // below. 52 53 /** 54 * @brief Type used by fpos, char_traits
, and char_traits
. 55 * 56 * In clauses 21.1.3.1 and 27.4.1 streamoff is described as an 57 * implementation defined type. 58 * Note: In versions of GCC up to and including GCC 3.3, streamoff 59 * was typedef long. 60 */ 61 #ifdef __INT64_TYPE__ 62 typedef __INT64_TYPE__ streamoff; 63 #else 64 typedef long long streamoff; 65 #endif 66 67 /// Integral type for I/O operation counts and buffer sizes. 68 typedef ptrdiff_t streamsize; // Signed integral type 69 70 /** 71 * @brief Class representing stream positions. 72 * 73 * The standard places no requirements upon the template parameter StateT. 74 * In this implementation StateT must be DefaultConstructible, 75 * CopyConstructible and Assignable. The standard only requires that fpos 76 * should contain a member of type StateT. In this implementation it also 77 * contains an offset stored as a signed integer. 78 * 79 * @param StateT Type passed to and returned from state(). 80 */ 81 template
82 class fpos 83 { 84 private: 85 streamoff _M_off; 86 _StateT _M_state; 87 88 public: 89 // The standard doesn't require that fpos objects can be default 90 // constructed. This implementation provides a default 91 // constructor that initializes the offset to 0 and default 92 // constructs the state. 93 fpos() 94 : _M_off(0), _M_state() { } 95 96 // The standard requires that fpos objects can be constructed 97 // from streamoff objects using the constructor syntax, and 98 // fails to give any meaningful semantics. In this 99 // implementation implicit conversion is also allowed, and this 100 // constructor stores the streamoff as the offset and default 101 // constructs the state. 102 /// Construct position from offset. 103 fpos(streamoff __off) 104 : _M_off(__off), _M_state() { } 105 106 #if __cplusplus >= 201103L 107 fpos(const fpos&) = default; 108 fpos& operator=(const fpos&) = default; 109 ~fpos() = default; 110 #endif 111 112 /// Convert to streamoff. 113 operator streamoff() const { return _M_off; } 114 115 /// Remember the value of @a st. 116 void 117 state(_StateT __st) 118 { _M_state = __st; } 119 120 /// Return the last set value of @a st. 121 _StateT 122 state() const 123 { return _M_state; } 124 125 // The standard requires that this operator must be defined, but 126 // gives no semantics. In this implementation it just adds its 127 // argument to the stored offset and returns *this. 128 /// Add offset to this position. 129 fpos& 130 operator+=(streamoff __off) 131 { 132 _M_off += __off; 133 return *this; 134 } 135 136 // The standard requires that this operator must be defined, but 137 // gives no semantics. In this implementation it just subtracts 138 // its argument from the stored offset and returns *this. 139 /// Subtract offset from this position. 140 fpos& 141 operator-=(streamoff __off) 142 { 143 _M_off -= __off; 144 return *this; 145 } 146 147 // The standard requires that this operator must be defined, but 148 // defines its semantics only in terms of operator-. In this 149 // implementation it constructs a copy of *this, adds the 150 // argument to that copy using operator+= and then returns the 151 // copy. 152 /// Add position and offset. 153 fpos 154 operator+(streamoff __off) const 155 { 156 fpos __pos(*this); 157 __pos += __off; 158 return __pos; 159 } 160 161 // The standard requires that this operator must be defined, but 162 // defines its semantics only in terms of operator+. In this 163 // implementation it constructs a copy of *this, subtracts the 164 // argument from that copy using operator-= and then returns the 165 // copy. 166 /// Subtract offset from position. 167 fpos 168 operator-(streamoff __off) const 169 { 170 fpos __pos(*this); 171 __pos -= __off; 172 return __pos; 173 } 174 175 // The standard requires that this operator must be defined, but 176 // defines its semantics only in terms of operator+. In this 177 // implementation it returns the difference between the offset 178 // stored in *this and in the argument. 179 /// Subtract position to return offset. 180 streamoff 181 operator-(const fpos& __other) const 182 { return _M_off - __other._M_off; } 183 }; 184 185 // The standard only requires that operator== must be an 186 // equivalence relation. In this implementation two fpos
187 // objects belong to the same equivalence class if the contained 188 // offsets compare equal. 189 /// Test if equivalent to another position. 190 template
191 inline bool 192 operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) 193 { return streamoff(__lhs) == streamoff(__rhs); } 194 195 template
196 inline bool 197 operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) 198 { return streamoff(__lhs) != streamoff(__rhs); } 199 200 // Clauses 21.1.3.1 and 21.1.3.2 describe streampos and wstreampos 201 // as implementation defined types, but clause 27.2 requires that 202 // they must both be typedefs for fpos
203 /// File position for char streams. 204 typedef fpos
streampos; 205 /// File position for wchar_t streams. 206 typedef fpos
wstreampos; 207 208 #ifdef _GLIBCXX_USE_CHAR8_T 209 /// File position for char8_t streams. 210 typedef fpos
u8streampos; 211 #endif 212 213 #if __cplusplus >= 201103L 214 /// File position for char16_t streams. 215 typedef fpos
u16streampos; 216 /// File position for char32_t streams. 217 typedef fpos
u32streampos; 218 #endif 219 220 _GLIBCXX_END_NAMESPACE_VERSION 221 } // namespace 222 223 #endif
Contact us
|
About us
|
Term of use
|
Copyright © 2000-2025 MyWebUniversity.com ™