Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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. #ifndef _CPP_BITS_FPOS_H
  35. #define _CPP_BITS_FPOS_H 1
  36.  
  37. #pragma GCC system_header
  38.  
  39. #include <bits/c++io.h>
  40. #include <bits/std_cwchar.h>    // For mbstate_t.
  41.  
  42. namespace std
  43. {
  44.   // 27.4.1  Types
  45.  
  46.   // 27.4.3  Template class fpos
  47.   template<typename _StateT>
  48.     class fpos
  49.     {
  50.     public:
  51.       // Types:
  52.       typedef _StateT __state_type;
  53.  
  54.     private:
  55.       streamoff         _M_off;
  56.       __state_type      _M_st;
  57.  
  58.     public:
  59.       __state_type
  60.       state() const  { return _M_st; }
  61.  
  62.       void
  63.       state(__state_type __st)  { _M_st = __st; }
  64.  
  65.       // NB: The standard defines only the implicit copy ctor and the
  66.       // previous two members.  The rest is a "conforming extension".
  67.       fpos(): _M_off(streamoff()), _M_st(__state_type()) { }
  68.  
  69.       fpos(streamoff __off, __state_type __st = __state_type())
  70.       :  _M_off(__off), _M_st(__st) { }
  71.  
  72.       operator streamoff() const { return _M_off; }
  73.  
  74.       fpos&
  75.       operator+=(streamoff __off) { _M_off += __off; return *this; }
  76.  
  77.       fpos&
  78.       operator-=(streamoff __off) { _M_off -= __off; return *this; }
  79.  
  80.       fpos
  81.       operator+(streamoff __off)
  82.       {
  83.         fpos __t(*this);
  84.         __t += __off;
  85.         return __t;
  86.       }
  87.  
  88.       fpos      
  89.       operator-(streamoff __off)
  90.       {
  91.         fpos __t(*this);
  92.         __t -= __off;
  93.         return __t;
  94.       }
  95.  
  96.       bool  
  97.       operator==(const fpos& __pos) const
  98.       { return _M_off == __pos._M_off; }
  99.  
  100.       bool  
  101.       operator!=(const fpos& __pos) const
  102.       { return _M_off != __pos._M_off; }
  103.      
  104.       streamoff
  105.       _M_position() const { return _M_off; }
  106.  
  107.       void
  108.       _M_position(streamoff __off)  { _M_off = __off; }
  109.     };
  110.  
  111.   // 27.2, paragraph 10 about fpos/char_traits circularity
  112.   typedef fpos<mbstate_t>               streampos;
  113. #  ifdef _GLIBCPP_USE_WCHAR_T
  114.   typedef fpos<mbstate_t>               wstreampos;
  115. #  endif
  116. }  // namespace std
  117.  
  118. #endif
  119.  
  120.  
  121.  
  122.