1*81ad6265SDimitry Andric // -*- C++ -*- 2*81ad6265SDimitry Andric //===----------------------------------------------------------------------===// 3*81ad6265SDimitry Andric // 4*81ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*81ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 6*81ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*81ad6265SDimitry Andric // 8*81ad6265SDimitry Andric //===----------------------------------------------------------------------===// 9*81ad6265SDimitry Andric 10*81ad6265SDimitry Andric #ifndef _LIBCPP___IOS_FPOS_H 11*81ad6265SDimitry Andric #define _LIBCPP___IOS_FPOS_H 12*81ad6265SDimitry Andric 13*81ad6265SDimitry Andric #include <__config> 14*81ad6265SDimitry Andric #include <iosfwd> 15*81ad6265SDimitry Andric 16*81ad6265SDimitry Andric #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 17*81ad6265SDimitry Andric # pragma GCC system_header 18*81ad6265SDimitry Andric #endif 19*81ad6265SDimitry Andric 20*81ad6265SDimitry Andric _LIBCPP_BEGIN_NAMESPACE_STD 21*81ad6265SDimitry Andric 22*81ad6265SDimitry Andric template <class _StateT> 23*81ad6265SDimitry Andric class _LIBCPP_TEMPLATE_VIS fpos { 24*81ad6265SDimitry Andric private: 25*81ad6265SDimitry Andric _StateT __st_; 26*81ad6265SDimitry Andric streamoff __off_; 27*81ad6265SDimitry Andric 28*81ad6265SDimitry Andric public: 29*81ad6265SDimitry Andric _LIBCPP_HIDE_FROM_ABI fpos(streamoff __off = streamoff()) : __st_(), __off_(__off) {} 30*81ad6265SDimitry Andric 31*81ad6265SDimitry Andric _LIBCPP_HIDE_FROM_ABI operator streamoff() const { return __off_; } 32*81ad6265SDimitry Andric 33*81ad6265SDimitry Andric _LIBCPP_HIDE_FROM_ABI _StateT state() const { return __st_; } 34*81ad6265SDimitry Andric _LIBCPP_HIDE_FROM_ABI void state(_StateT __st) { __st_ = __st; } 35*81ad6265SDimitry Andric 36*81ad6265SDimitry Andric _LIBCPP_HIDE_FROM_ABI fpos& operator+=(streamoff __off) { 37*81ad6265SDimitry Andric __off_ += __off; 38*81ad6265SDimitry Andric return *this; 39*81ad6265SDimitry Andric } 40*81ad6265SDimitry Andric 41*81ad6265SDimitry Andric _LIBCPP_HIDE_FROM_ABI fpos operator+(streamoff __off) const { 42*81ad6265SDimitry Andric fpos __t(*this); 43*81ad6265SDimitry Andric __t += __off; 44*81ad6265SDimitry Andric return __t; 45*81ad6265SDimitry Andric } 46*81ad6265SDimitry Andric 47*81ad6265SDimitry Andric _LIBCPP_HIDE_FROM_ABI fpos& operator-=(streamoff __off) { 48*81ad6265SDimitry Andric __off_ -= __off; 49*81ad6265SDimitry Andric return *this; 50*81ad6265SDimitry Andric } 51*81ad6265SDimitry Andric 52*81ad6265SDimitry Andric _LIBCPP_HIDE_FROM_ABI fpos operator-(streamoff __off) const { 53*81ad6265SDimitry Andric fpos __t(*this); 54*81ad6265SDimitry Andric __t -= __off; 55*81ad6265SDimitry Andric return __t; 56*81ad6265SDimitry Andric } 57*81ad6265SDimitry Andric }; 58*81ad6265SDimitry Andric 59*81ad6265SDimitry Andric template <class _StateT> 60*81ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI 61*81ad6265SDimitry Andric streamoff operator-(const fpos<_StateT>& __x, const fpos<_StateT>& __y) { 62*81ad6265SDimitry Andric return streamoff(__x) - streamoff(__y); 63*81ad6265SDimitry Andric } 64*81ad6265SDimitry Andric 65*81ad6265SDimitry Andric template <class _StateT> 66*81ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI 67*81ad6265SDimitry Andric bool operator==(const fpos<_StateT>& __x, const fpos<_StateT>& __y) { 68*81ad6265SDimitry Andric return streamoff(__x) == streamoff(__y); 69*81ad6265SDimitry Andric } 70*81ad6265SDimitry Andric 71*81ad6265SDimitry Andric template <class _StateT> 72*81ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI 73*81ad6265SDimitry Andric bool operator!=(const fpos<_StateT>& __x, const fpos<_StateT>& __y) { 74*81ad6265SDimitry Andric return streamoff(__x) != streamoff(__y); 75*81ad6265SDimitry Andric } 76*81ad6265SDimitry Andric 77*81ad6265SDimitry Andric _LIBCPP_END_NAMESPACE_STD 78*81ad6265SDimitry Andric 79*81ad6265SDimitry Andric #endif // _LIBCPP___IOS_FPOS_H 80