source: branches/libc-0.6/src/gcc/libstdc++-v3/include/bits/fpos.h@ 2537

Last change on this file since 2537 was 1392, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r1391,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 3.5 KB
Line 
1// File position object and stream types
2
3// Copyright (C) 1997, 1998, 1999, 2000, 2001 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 2, 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// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING. If not, write to the Free
18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19// USA.
20
21// As a special exception, you may use this file as part of a free software
22// library without restriction. Specifically, if other files instantiate
23// templates or use macros or inline functions from this file, or you compile
24// this file and link it with other files to produce an executable, this
25// file does not by itself cause the resulting executable to be covered by
26// the GNU General Public License. This exception does not however
27// invalidate any other reasons why the executable file might be covered by
28// the GNU General Public License.
29
30//
31// ISO C++ 14882: 27 Input/output library
32//
33
34/** @file fpos.h
35 * This is an internal header file, included by other library headers.
36 * You should not attempt to use it directly.
37 */
38
39#ifndef _CPP_BITS_FPOS_H
40#define _CPP_BITS_FPOS_H 1
41
42#pragma GCC system_header
43
44#include <bits/c++io.h>
45#include <cwchar> // For mbstate_t.
46
47namespace std
48{
49 // 27.4.1 Types
50
51 // [27.4.3] template class fpos
52 /**
53 * @doctodo
54 */
55 template<typename _StateT>
56 class fpos
57 {
58 public:
59 // Types:
60 typedef _StateT __state_type;
61
62 private:
63 streamoff _M_off;
64 __state_type _M_st;
65
66 public:
67 __state_type
68 state() const { return _M_st; }
69
70 void
71 state(__state_type __st) { _M_st = __st; }
72
73 // NB: The standard defines only the implicit copy ctor and the
74 // previous two members. The rest is a "conforming extension".
75 fpos(): _M_off(streamoff()), _M_st(__state_type()) { }
76
77 fpos(streamoff __off, __state_type __st = __state_type())
78 : _M_off(__off), _M_st(__st) { }
79
80 operator streamoff() const { return _M_off; }
81
82 fpos&
83 operator+=(streamoff __off) { _M_off += __off; return *this; }
84
85 fpos&
86 operator-=(streamoff __off) { _M_off -= __off; return *this; }
87
88 fpos
89 operator+(streamoff __off)
90 {
91 fpos __t(*this);
92 __t += __off;
93 return __t;
94 }
95
96 fpos
97 operator-(streamoff __off)
98 {
99 fpos __t(*this);
100 __t -= __off;
101 return __t;
102 }
103
104 bool
105 operator==(const fpos& __pos) const
106 { return _M_off == __pos._M_off; }
107
108 bool
109 operator!=(const fpos& __pos) const
110 { return _M_off != __pos._M_off; }
111
112 streamoff
113 _M_position() const { return _M_off; }
114
115 void
116 _M_position(streamoff __off) { _M_off = __off; }
117 };
118
119 /// 27.2, paragraph 10 about fpos/char_traits circularity
120 typedef fpos<mbstate_t> streampos;
121# ifdef _GLIBCPP_USE_WCHAR_T
122 /// 27.2, paragraph 10 about fpos/char_traits circularity
123 typedef fpos<mbstate_t> wstreampos;
124# endif
125} // namespace std
126
127#endif
Note: See TracBrowser for help on using the repository browser.