genericopenlibs/cppstdlib/stl/src/_stdio_file.h
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 /*
       
     2  * Copyright (c) 1999
       
     3  * Silicon Graphics Computer Systems, Inc.
       
     4  *
       
     5  * Copyright (c) 1999
       
     6  * Boris Fomitchev
       
     7  *
       
     8  * This material is provided "as is", with absolutely no warranty expressed
       
     9  * or implied. Any use is at your own risk.
       
    10  *
       
    11  * Permission to use or copy this software for any purpose is hereby granted
       
    12  * without fee, provided the above notices are retained on all copies.
       
    13  * Permission to modify the code and to distribute modified code is granted,
       
    14  * provided the above notices are retained, and a notice that the code was
       
    15  * modified is included with the above copyright notice.
       
    16  *
       
    17  */
       
    18 
       
    19 
       
    20 // WARNING: This is an internal header file, included by other C++
       
    21 // standard library headers.  You should not attempt to use this header
       
    22 // file directly.
       
    23 
       
    24 
       
    25 #ifndef _STLP_STDIO_FILE_H
       
    26 #define _STLP_STDIO_FILE_H
       
    27 
       
    28 // This file provides a low-level interface between the internal
       
    29 // representation of struct FILE, from the C stdio library, and
       
    30 // the C++ I/O library.  The C++ I/O library views a FILE object as
       
    31 // a collection of three pointers: the beginning of the buffer, the
       
    32 // current read/write position, and the end of the buffer.
       
    33 
       
    34 // The interface:
       
    35 // - char* _FILE_[IO]_begin(const FILE *__f);
       
    36 //       Returns a pointer to the beginning of the buffer.
       
    37 // - char* _FILE_[IO]_next(const FILE *__f);
       
    38 //       Returns the current read/write position within the buffer.
       
    39 // - char* _FILE_[IO]_end(const FILE *__f);
       
    40 //       Returns a pointer immediately past the end of the buffer.
       
    41 // - char* _FILE_[IO]_avail(const FILE *__f);
       
    42 //       Returns the number of characters remaining in the buffer, i.e.
       
    43 //       _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f).
       
    44 // - char& _FILE_[IO]_preincr(FILE *__f)
       
    45 //       Increments the current read/write position by 1, returning the
       
    46 //       character at the old position.
       
    47 // - char& _FILE_[IO]_postincr(FILE *__f)
       
    48 //       Increments the current read/write position by 1, returning the
       
    49 //       character at the old position.
       
    50 // - char& _FILE_[IO]_predecr(FILE *__f)
       
    51 //       Decrements the current read/write position by 1, returning the
       
    52 //       character at the old position.
       
    53 // - char& _FILE_[IO]_postdecr(FILE *__f)
       
    54 //       Decrements the current read/write position by 1, returning the
       
    55 //       character at the old position.
       
    56 // - void _FILE_[IO]_bump(FILE *__f, int __n)
       
    57 //       Increments the current read/write position by __n.
       
    58 // - void _FILE_[IO]_set(FILE *__f, char* __begin, char* __next, char* __end);
       
    59 //       Sets the beginning of the bufer to __begin, the current read/write
       
    60 //       position to __next, and the buffer's past-the-end pointer to __end.
       
    61 //       If any of those pointers is null, then all of them must be null.
       
    62 
       
    63 // Each function comes in two versions, one for a FILE used as an input
       
    64 // buffer and one for a FILE used as an output buffer.  In some stdio
       
    65 // implementations the two functions are identical, but in others they are
       
    66 // not.
       
    67 
       
    68 #ifndef _STLP_CSTDIO
       
    69 # include <cstdio>
       
    70 #endif
       
    71 #ifndef _STLP_CSTDDEF
       
    72 # include <cstddef>
       
    73 #endif
       
    74 
       
    75 #if defined(__MSL__) && !defined(N_PLAT_NLM)
       
    76 # include <unix.h>  // get the definition of fileno
       
    77 #endif
       
    78 
       
    79 _STLP_BEGIN_NAMESPACE
       
    80 
       
    81 //----------------------------------------------------------------------
       
    82 // Implementation for eMbedded Visual C++ 3.0 and 4.2 (.NET)
       
    83 #if defined (_STLP_WCE)
       
    84 
       
    85 inline int _FILE_fd(const FILE *__f) { return (int)::_fileno((FILE*)__f); }
       
    86 
       
    87 # undef _STLP_FILE_I_O_IDENTICAL
       
    88 
       
    89 // Implementation for the IRIX C library.
       
    90 // Solaris interface looks to be identical.
       
    91 #elif !defined(_STLP_USE_GLIBC) && \
       
    92     ( defined(__sgi) || \
       
    93       ( defined(__sun) && ! defined (_LP64) )  || \
       
    94       defined (__osf__) || defined(__DECCXX) || \
       
    95       (defined (_STLP_MSVC) && !defined (_STLP_WCE_EVC3)) || \
       
    96       defined (__ICL) || defined (__MINGW32__) || defined(__DJGPP) || defined (_AIX) || defined (_CRAY))
       
    97 
       
    98 #if defined (_STLP_MSVC) || defined (__ICL) || defined (__MINGW32__) || defined(__DJGPP)
       
    99 typedef  char* _File_ptr_type;
       
   100 #else
       
   101 typedef  unsigned char* _File_ptr_type;
       
   102 #endif
       
   103 
       
   104 inline int   _FILE_fd(const FILE *__f) { return __f->_file; }
       
   105 inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->_base; }
       
   106 inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->_ptr; }
       
   107 inline char* _FILE_I_end(const FILE *__f)
       
   108   { return (char*) __f->_ptr + __f->_cnt; }
       
   109 
       
   110 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_cnt; }
       
   111 
       
   112 inline char& _FILE_I_preincr(FILE *__f)
       
   113   { --__f->_cnt; return *(char*) (++__f->_ptr); }
       
   114 inline char& _FILE_I_postincr(FILE *__f)
       
   115   { --__f->_cnt; return *(char*) (__f->_ptr++); }
       
   116 inline char& _FILE_I_predecr(FILE *__f)
       
   117   { ++__f->_cnt; return *(char*) (--__f->_ptr); }
       
   118 inline char& _FILE_I_postdecr(FILE *__f)
       
   119   { ++__f->_cnt; return *(char*) (__f->_ptr--); }
       
   120 inline void  _FILE_I_bump(FILE *__f, int __n)
       
   121   { __f->_ptr += __n; __f->_cnt -= __n; }
       
   122 
       
   123 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   124   __f->_base = (_File_ptr_type) __begin;
       
   125   __f->_ptr  = (_File_ptr_type) __next;
       
   126   __f->_cnt  = __end - __next;
       
   127 }
       
   128 
       
   129 # define _STLP_FILE_I_O_IDENTICAL 1
       
   130 
       
   131 #elif defined(__EMX__)
       
   132 
       
   133 inline int   _FILE_fd(const FILE* __f) { return __f->_handle; }
       
   134 inline char* _FILE_I_begin(const FILE* __f) { return (char*) __f->_buffer; }
       
   135 inline char* _FILE_I_next(const FILE* __f) { return (char*) __f->_ptr; }
       
   136 inline char* _FILE_I_end(const FILE* __f) { return (char *) __f->_ptr + __f->_rcount; }
       
   137 inline ptrdiff_t _FILE_I_avail(const FILE* __f) { return __f->_rcount; }
       
   138 inline char& _FILE_I_preincr(FILE* __f) { --__f->_rcount; return *(char*) (++__f->_ptr); }
       
   139 inline char& _FILE_I_postincr(FILE* __f) { --__f->_rcount; return *(char*) (__f->_ptr++); }
       
   140 inline char& _FILE_I_predecr(FILE* __f) { ++__f->_rcount; return *(char*) (--__f->_ptr); }
       
   141 inline char& _FILE_I_postdecr(FILE* __f) { ++__f->_rcount; return *(char*) (__f->_ptr--); }
       
   142 inline void  _FILE_I_bump(FILE* __f, int __n) { __f->_ptr += __n; __f->_rcount -= __n; }
       
   143 inline void _FILE_I_set(FILE* __f, char* __begin, char* __next, char* __end) {
       
   144   __f->_buffer = __begin;
       
   145   __f->_ptr  = __next;
       
   146   __f->_rcount  = __end - __next;
       
   147 }
       
   148 
       
   149 inline char* _FILE_O_begin(const FILE* __f) { return (char*) __f->_buffer; }
       
   150 inline char* _FILE_O_next(const FILE* __f) { return (char*) __f->_ptr; }
       
   151 inline char* _FILE_O_end(const FILE* __f) { return (char*) __f->_ptr + __f->_wcount; }
       
   152 inline ptrdiff_t _FILE_O_avail(const FILE* __f) { return __f->_wcount; }
       
   153 inline char& _FILE_O_preincr(FILE* __f) { --__f->_wcount; return *(char*) (++__f->_ptr); }
       
   154 inline char& _FILE_O_postincr(FILE* __f) { --__f->_wcount; return *(char*) (__f->_ptr++); }
       
   155 inline char& _FILE_O_predecr(FILE* __f) { ++__f->_wcount; return *(char*) (--__f->_ptr); }
       
   156 inline char& _FILE_O_postdecr(FILE* __f) { ++__f->_wcount; return *(char*) (__f->_ptr--); }
       
   157 inline void _FILE_O_bump(FILE* __f, int __n) { __f->_ptr += __n; __f->_wcount -= __n; }
       
   158 inline void _FILE_O_set(FILE* __f, char* __begin, char* __next, char* __end) {
       
   159   __f->_buffer = __begin;
       
   160   __f->_ptr  = __next;
       
   161   __f->_wcount  = __end - __next;
       
   162 }
       
   163 
       
   164 
       
   165 # undef _STLP_FILE_I_O_IDENTICAL
       
   166 
       
   167 # elif defined(_STLP_SCO_OPENSERVER) || defined(__NCR_SVR)
       
   168 
       
   169 typedef  unsigned char* _File_ptr_type;
       
   170 
       
   171 inline int   _FILE_fd(const FILE *__f) { return __f->__file; }
       
   172 inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->__base; }
       
   173 inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->__ptr; }
       
   174 inline char* _FILE_I_end(const FILE *__f)
       
   175   { return (char*) __f->__ptr + __f->__cnt; }
       
   176 
       
   177 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->__cnt; }
       
   178 
       
   179 inline char& _FILE_I_preincr(FILE *__f)
       
   180   { --__f->__cnt; return *(char*) (++__f->__ptr); }
       
   181 inline char& _FILE_I_postincr(FILE *__f)
       
   182   { --__f->__cnt; return *(char*) (__f->__ptr++); }
       
   183 inline char& _FILE_I_predecr(FILE *__f)
       
   184   { ++__f->__cnt; return *(char*) (--__f->__ptr); }
       
   185 inline char& _FILE_I_postdecr(FILE *__f)
       
   186   { ++__f->__cnt; return *(char*) (__f->__ptr--); }
       
   187 inline void  _FILE_I_bump(FILE *__f, int __n)
       
   188   { __f->__ptr += __n; __f->__cnt -= __n; }
       
   189 
       
   190 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   191   __f->__base = (_File_ptr_type) __begin;
       
   192   __f->__ptr  = (_File_ptr_type) __next;
       
   193   __f->__cnt  = __end - __next;
       
   194 }
       
   195 
       
   196 # define _STLP_FILE_I_O_IDENTICAL 1
       
   197 
       
   198 # elif defined(__sun) && defined( _LP64)
       
   199 
       
   200 typedef long _File_ptr_type;
       
   201 
       
   202 inline int _FILE_fd(const FILE *__f) { return (int) __f->__pad[2]; }
       
   203 inline char* _FILE_I_begin(const FILE *__f) { return (char*)
       
   204 __f->__pad[1]; }
       
   205 inline char* _FILE_I_next(const FILE *__f) { return (char*)
       
   206 __f->__pad[0]; }
       
   207 inline char* _FILE_I_end(const FILE *__f)
       
   208 { return (char*) __f->__pad[0] + __f->__pad[3]; }
       
   209 
       
   210 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->__pad[3]; }
       
   211 
       
   212 inline char& _FILE_I_preincr(FILE *__f)
       
   213 { --__f->__pad[3]; return *(char*) (++__f->__pad[0]); }
       
   214 inline char& _FILE_I_postincr(FILE *__f)
       
   215 { --__f->__pad[3]; return *(char*) (__f->__pad[0]++); }
       
   216 inline char& _FILE_I_predecr(FILE *__f)
       
   217 { ++__f->__pad[3]; return *(char*) (--__f->__pad[0]); }
       
   218 inline char& _FILE_I_postdecr(FILE *__f)
       
   219 { ++__f->__pad[3]; return *(char*) (__f->__pad[0]--); }
       
   220 inline void _FILE_I_bump(FILE *__f, long __n)
       
   221 { __f->__pad[0] += __n; __f->__pad[3] -= __n; }
       
   222 
       
   223 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char*
       
   224 __end) {
       
   225 __f->__pad[1] = (_File_ptr_type) __begin;
       
   226 __f->__pad[0] = (_File_ptr_type) __next;
       
   227 __f->__pad[3] = __end - __next;
       
   228 }
       
   229 
       
   230 # define _STLP_FILE_I_O_IDENTICAL
       
   231 
       
   232 #elif defined (__CYGWIN__) || defined(__FreeBSD__)  || defined(__NetBSD__) || defined(__OpenBSD__) \
       
   233   || defined(__amigaos__) || ( defined(__GNUC__) && defined(__APPLE__) )
       
   234 
       
   235 inline int _FILE_fd(const FILE *__f) { return __f->_file; }
       
   236 inline char* _FILE_I_begin(const FILE *__f) { return (char*)   __f->_bf._base; }
       
   237 inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->_p; }
       
   238 inline char* _FILE_I_end(const FILE *__f)
       
   239 { return (char*) __f->_p + __f->_r; }
       
   240 
       
   241 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_r; }
       
   242 
       
   243 #if ( defined(__GNUC__) && defined(__APPLE__) )
       
   244 inline char& _FILE_I_preincr(FILE *__f)
       
   245 { --__f->_r; return *(char*) (++__f->_p); }
       
   246 inline char& _FILE_I_postincr(FILE *__f)
       
   247 { --__f->_r; return *(char*) (__f->_p++); }
       
   248 inline char& _FILE_I_predecr(FILE *__f)
       
   249 { ++__f->_r; return *(char*) (--__f->_p); }
       
   250 inline char& _FILE_I_postdecr(FILE *__f)
       
   251 { ++__f->_r; return *(char*) (__f->_p--); }
       
   252 inline void _FILE_I_bump(FILE *__f, int __n)
       
   253 { __f->_p += __n; __f->_r -= __n; }
       
   254 #else
       
   255 inline char& _FILE_I_preincr(FILE *__f)
       
   256 { --__f->_r; --__f->_bf._size; return *(char*) (++__f->_p); }
       
   257 inline char& _FILE_I_postincr(FILE *__f)
       
   258 { --__f->_r; --__f->_bf._size; return *(char*) (__f->_p++); }
       
   259 inline char& _FILE_I_predecr(FILE *__f)
       
   260 { ++__f->_r; ++ __f->_bf._size; return *(char*) (--__f->_p); }
       
   261 inline char& _FILE_I_postdecr(FILE *__f)
       
   262 { ++__f->_r; ++__f->_bf._size; return *(char*) (__f->_p--); }
       
   263 inline void _FILE_I_bump(FILE *__f, int __n)
       
   264 { __f->_p += __n; __f->_bf._size+=__n; __f->_r -= __n; }
       
   265 #endif
       
   266 
       
   267 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   268   __f->_bf._base = (unsigned char*) __begin;
       
   269   __f->_p = (unsigned char*) __next;
       
   270   __f->_r = __f->_bf._size = __end - __next;
       
   271 }
       
   272 inline char* _FILE_O_begin(const FILE *__f) { return (char*) __f->_bf._base; }
       
   273 inline char* _FILE_O_next(const FILE *__f) { return (char*) __f->_p; }
       
   274 inline char* _FILE_O_end(const FILE *__f)
       
   275 { return (char*) __f->_p + __f->_w; }
       
   276 
       
   277 inline ptrdiff_t _FILE_O_avail(const FILE *__f) { return __f->_w; }
       
   278 
       
   279 #if ( defined(__GNUC__) && defined(__APPLE__) )
       
   280 inline char& _FILE_O_preincr(FILE *__f)
       
   281 { --__f->_w; return *(char*) (++__f->_p); }
       
   282 inline char& _FILE_O_postincr(FILE *__f)
       
   283 { --__f->_w; return *(char*) (__f->_p++); }
       
   284 inline char& _FILE_O_predecr(FILE *__f)
       
   285 { ++__f->_w; return *(char*) (--__f->_p); }
       
   286 inline char& _FILE_O_postdecr(FILE *__f)
       
   287 { ++__f->_w; return *(char*) (__f->_p--); }
       
   288 inline void _FILE_O_bump(FILE *__f, int __n)
       
   289 { __f->_p += __n; __f->_w -= __n; }
       
   290 #else
       
   291 inline char& _FILE_O_preincr(FILE *__f)
       
   292 { --__f->_w; --__f->_bf._size; return *(char*) (++__f->_p); }
       
   293 inline char& _FILE_O_postincr(FILE *__f)
       
   294 { --__f->_w; --__f->_bf._size; return *(char*) (__f->_p++); }
       
   295 inline char& _FILE_O_predecr(FILE *__f)
       
   296 { ++__f->_w; ++__f->_bf._size; return *(char*) (--__f->_p); }
       
   297 inline char& _FILE_O_postdecr(FILE *__f)
       
   298 { ++__f->_w; ++__f->_bf._size; return *(char*) (__f->_p--); }
       
   299 inline void _FILE_O_bump(FILE *__f, int __n)
       
   300 { __f->_p += __n; __f->_bf._size+=__n; __f->_w -= __n; }
       
   301 #endif
       
   302 
       
   303 inline void _FILE_O_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   304   __f->_bf._base = (unsigned char*) __begin;
       
   305   __f->_p = (unsigned char*) __next;
       
   306   __f->_w = __f->_bf._size = __end - __next;
       
   307 }
       
   308 
       
   309 # undef _STLP_FILE_I_O_IDENTICAL
       
   310 
       
   311 #elif defined(_STLP_USE_UCLIBC) /* should be before _STLP_USE_GLIBC */
       
   312 inline int   _FILE_fd(const FILE *__f) { return fileno(__CONST_CAST(FILE *,__f)); }
       
   313 #elif defined(_STLP_USE_GLIBC)
       
   314 
       
   315 inline int   _FILE_fd(const FILE *__f) { return __f->_fileno; }
       
   316 inline char* _FILE_I_begin(const FILE *__f) { return __f->_IO_read_base; }
       
   317 inline char* _FILE_I_next(const FILE *__f)  { return __f->_IO_read_ptr; }
       
   318 inline char* _FILE_I_end(const FILE *__f)   { return __f->_IO_read_end; }
       
   319 
       
   320 inline ptrdiff_t _FILE_I_avail(const FILE *__f)
       
   321   { return __f->_IO_read_end - __f->_IO_read_ptr; }
       
   322 
       
   323 inline char& _FILE_I_preincr(FILE *__f)  { return *++__f->_IO_read_ptr; }
       
   324 inline char& _FILE_I_postincr(FILE *__f) { return *__f->_IO_read_ptr++; }
       
   325 inline char& _FILE_I_predecr(FILE *__f)  { return *--__f->_IO_read_ptr; }
       
   326 inline char& _FILE_I_postdecr(FILE *__f) { return *__f->_IO_read_ptr--; }
       
   327 inline void  _FILE_I_bump(FILE *__f, int __n) { __f->_IO_read_ptr += __n; }
       
   328 
       
   329 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   330   __f->_IO_read_base = __begin;
       
   331   __f->_IO_read_ptr  = __next;
       
   332   __f->_IO_read_end  = __end;
       
   333 }
       
   334 
       
   335 inline char* _FILE_O_begin(const FILE *__f) { return __f->_IO_write_base; }
       
   336 inline char* _FILE_O_next(const FILE *__f)  { return __f->_IO_write_ptr; }
       
   337 inline char* _FILE_O_end(const FILE *__f)   { return __f->_IO_write_end; }
       
   338 
       
   339 inline ptrdiff_t _FILE_O_avail(const FILE *__f)
       
   340   { return __f->_IO_write_end - __f->_IO_write_ptr; }
       
   341 
       
   342 inline char& _FILE_O_preincr(FILE *__f)  { return *++__f->_IO_write_ptr; }
       
   343 inline char& _FILE_O_postincr(FILE *__f) { return *__f->_IO_write_ptr++; }
       
   344 inline char& _FILE_O_predecr(FILE *__f)  { return *--__f->_IO_write_ptr; }
       
   345 inline char& _FILE_O_postdecr(FILE *__f) { return *__f->_IO_write_ptr--; }
       
   346 inline void  _FILE_O_bump(FILE *__f, int __n) { __f->_IO_write_ptr += __n; }
       
   347 
       
   348 inline void _FILE_O_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   349   __f->_IO_write_base = __begin;
       
   350   __f->_IO_write_ptr  = __next;
       
   351   __f->_IO_write_end  = __end;
       
   352 
       
   353 }
       
   354 
       
   355 #elif defined(__hpux) /* && defined(__hppa) && defined(__HP_aCC)) */
       
   356 
       
   357 #ifndef _INCLUDE_HPUX_SOURCE
       
   358 extern "C" unsigned char *__bufendtab[];
       
   359 #  undef  _bufend
       
   360 #  define _bufend(__p) \
       
   361      (*(((__p)->__flag & _IOEXT)  ? &(((_FILEX *)(__p))->__bufendp)      \
       
   362              : &(__bufendtab[(__p) - __iob])))
       
   363 
       
   364 #  define _bufsiz(__p)  (_bufend(__p) - (__p)->__base)
       
   365 #endif /* _INCLUDE_HPUX_SOURCE */
       
   366 
       
   367 #if defined(_STLP_HPACC_BROKEN_BUFEND)
       
   368 #  undef  _bufend
       
   369 #  define _bufend(__p) \
       
   370      (*(((__p)->__flag & _IOEXT)  ? &((__REINTERPRET_CAST(_FILEX*,(__p)))->__bufendp)  \
       
   371                                : &(__bufendtab[__REINTERPRET_CAST(FILE*,(__p)) - __iob])))
       
   372 #endif
       
   373 
       
   374 inline int   _FILE_fd(const FILE *__f) { return fileno(__CONST_CAST(FILE *,__f)); }
       
   375 inline char* _FILE_I_begin(const FILE *__f) { return (__REINTERPRET_CAST(char*, __f->__base)); }
       
   376 inline char* _FILE_I_next(const FILE *__f)  { return (__REINTERPRET_CAST(char*, __f->__ptr)); }
       
   377 inline char* _FILE_I_end(const FILE *__f)   { return (__REINTERPRET_CAST(char*, __f->__ptr +__f->__cnt)); }
       
   378 
       
   379 inline ptrdiff_t _FILE_I_avail(const FILE *__f)  { return __f->__cnt; }
       
   380 
       
   381 inline char& _FILE_I_preincr(FILE *__f)  { --__f->__cnt; return *__REINTERPRET_CAST(char*, ++__f->__ptr); }
       
   382 inline char& _FILE_I_postincr(FILE *__f) { --__f->__cnt; return *__REINTERPRET_CAST(char*, __f->__ptr++); }
       
   383 inline char& _FILE_I_predecr(FILE *__f)  { ++__f->__cnt; return *__REINTERPRET_CAST(char*,--__f->__ptr); }
       
   384 inline char& _FILE_I_postdecr(FILE *__f) { ++__f->__cnt; return *__REINTERPRET_CAST(char*,__f->__ptr--); }
       
   385 inline void  _FILE_I_bump(FILE *__f, int __n) { __f->__cnt -= __n; __f->__ptr += __n; }
       
   386 
       
   387 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   388 # if defined(__hpux)
       
   389    if( (unsigned long) (__f - &__iob[0]) > _NFILE)
       
   390         __f->__flag |= _IOEXT;  // used by stdio's _bufend macro and goodness knows what else...
       
   391 # endif
       
   392   __f->__cnt  = __end - __next;
       
   393   __f->__base = __REINTERPRET_CAST(unsigned char*, __begin);
       
   394   __f->__ptr  = __REINTERPRET_CAST(unsigned char*, __next);
       
   395   _bufend(__f) = __REINTERPRET_CAST(unsigned char*, __end);
       
   396 }
       
   397 
       
   398 // For HPUX stdio, input and output FILE manipulation is identical.
       
   399 
       
   400 # define _STLP_FILE_I_O_IDENTICAL
       
   401 
       
   402 #elif defined (__BORLANDC__)
       
   403 
       
   404 typedef unsigned char* _File_ptr_type;
       
   405 
       
   406 inline int _FILE_fd(const FILE *__f) { return __f->fd; }
       
   407 inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->buffer;
       
   408 }
       
   409 inline char* _FILE_I_next(const FILE *__f)
       
   410 { return (char*)__f->curp; }
       
   411 inline char* _FILE_I_end(const FILE *__f)
       
   412 { return (char*) __f->curp + __f->level; }
       
   413 
       
   414 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->level; }
       
   415 
       
   416 inline char& _FILE_I_preincr(FILE *__f)
       
   417 { --__f->level; return *(char*) (++__f->curp); }
       
   418 inline char& _FILE_I_postincr(FILE *__f)
       
   419 { --__f->level; return *(char*) (__f->curp++); }
       
   420 inline char& _FILE_I_predecr(FILE *__f)
       
   421 { ++__f->level; return *(char*) (--__f->curp); }
       
   422 inline char& _FILE_I_postdecr(FILE *__f)
       
   423 { ++__f->level; return *(char*) (__f->curp--); }
       
   424 inline void _FILE_I_bump(FILE *__f, int __n)
       
   425 { __f->curp += __n; __f->level -= __n; }
       
   426 
       
   427 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   428   __f->buffer = (_File_ptr_type) __begin;
       
   429   __f->curp = (_File_ptr_type) __next;
       
   430   __f->level = __end - __next;
       
   431 }
       
   432 
       
   433 # define _STLP_FILE_I_O_IDENTICAL
       
   434 
       
   435 #elif defined( __MWERKS__ )
       
   436 
       
   437 // using MWERKS-specific defines here to detect other OS targets
       
   438 // dwa: I'm not sure they provide fileno for all OS's, but this should
       
   439 // work for Win32 and WinCE
       
   440 
       
   441 #ifndef N_PLAT_NLM
       
   442 // Hmm, at least for Novell NetWare __dest_os == __mac_os true too..
       
   443 // May be both __dest_os and __mac_os defined and empty?   - ptr
       
   444 # if __dest_os == __mac_os
       
   445 inline int   _FILE_fd(const FILE *__f) { return ::fileno(__CONST_CAST(FILE*, __f)); }
       
   446 # else
       
   447 inline int   _FILE_fd(const FILE *__f) { return ::_fileno(__CONST_CAST(FILE*, __f)); }
       
   448 # endif // __dest_os == __mac_os
       
   449 
       
   450 //       Returns a pointer to the beginning of the buffer.
       
   451 inline char* _FILE_I_begin(const FILE *__f) { return __REINTERPRET_CAST(char*, __f->buffer); }
       
   452 //       Returns the current read/write position within the buffer.
       
   453 inline char* _FILE_I_next(const FILE *__f) { return __REINTERPRET_CAST(char*, __f->buffer_ptr); }
       
   454 
       
   455 //       Returns a pointer immediately past the end of the buffer.
       
   456 inline char* _FILE_I_end(const FILE *__f) { return __REINTERPRET_CAST(char*, __f->buffer_ptr + __f->buffer_len); }
       
   457 
       
   458 //       Returns the number of characters remaining in the buffer, i.e.
       
   459 //       _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f).
       
   460 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->buffer_len; }
       
   461 
       
   462 //       Increments the current read/write position by 1, returning the
       
   463 //       character at the old position.
       
   464 inline char& _FILE_I_preincr(FILE *__f)
       
   465   { --__f->buffer_len; return *(char*) (++__f->buffer_ptr); }
       
   466 inline char& _FILE_I_postincr(FILE *__f)
       
   467   { --__f->buffer_len; return *(char*) (__f->buffer_ptr++); }
       
   468 inline char& _FILE_I_predecr(FILE *__f)
       
   469   { ++__f->buffer_len; return *(char*) (--__f->buffer_ptr); }
       
   470 inline char& _FILE_I_postdecr(FILE *__f)
       
   471   { ++__f->buffer_len; return *(char*) (__f->buffer_ptr--); }
       
   472 inline void  _FILE_I_bump(FILE *__f, int __n)
       
   473   { __f->buffer_ptr += __n; __f->buffer_len -= __n; }
       
   474 
       
   475 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   476   __f->buffer = __REINTERPRET_CAST(unsigned char*, __begin);
       
   477   __f->buffer_ptr   = __REINTERPRET_CAST(unsigned char*, __next);
       
   478   __f->buffer_len  = __end - __next;
       
   479   __f->buffer_size = __end - __begin;
       
   480 }
       
   481 #else // N_PLAT_NLM   - ptr
       
   482 inline int   _FILE_fd(const FILE *__f) { return __f->_file; }
       
   483 inline char* _FILE_I_begin(const FILE *__f) { return __REINTERPRET_CAST(char*, __f->_base); }
       
   484 //       Returns the current read/write position within the buffer.
       
   485 inline char* _FILE_I_next(const FILE *__f) { return __REINTERPRET_CAST(char*, __f->_ptr); }
       
   486 
       
   487 //       Returns a pointer immediately past the end of the buffer.
       
   488 inline char* _FILE_I_end(const FILE *__f) { return __REINTERPRET_CAST(char*, __f->_ptr + __f->_avail); }
       
   489 
       
   490 //       Returns the number of characters remaining in the buffer, i.e.
       
   491 //       _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f).
       
   492 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_avail; }
       
   493 
       
   494 //       Increments the current read/write position by 1, returning the
       
   495 //       character at the old position.
       
   496 inline char& _FILE_I_preincr(FILE *__f)
       
   497   { --__f->_avail; return *(char*) (++__f->_ptr); }
       
   498 inline char& _FILE_I_postincr(FILE *__f)
       
   499   { --__f->_avail; return *(char*) (__f->_ptr++); }
       
   500 inline char& _FILE_I_predecr(FILE *__f)
       
   501   { ++__f->_avail; return *(char*) (--__f->_ptr); }
       
   502 inline char& _FILE_I_postdecr(FILE *__f)
       
   503   { ++__f->_avail; return *(char*) (__f->_ptr--); }
       
   504 inline void  _FILE_I_bump(FILE *__f, int __n)
       
   505   { __f->_ptr += __n; __f->_avail -= __n; }
       
   506 
       
   507 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   508   __f->_base  = __REINTERPRET_CAST(unsigned char*, __begin);
       
   509   __f->_ptr   = __REINTERPRET_CAST(unsigned char*, __next);
       
   510   __f->_avail = __end - __next;
       
   511 }
       
   512 #endif // N_PLAT_NLM
       
   513 
       
   514 
       
   515 # define _STLP_FILE_I_O_IDENTICAL
       
   516 
       
   517 #elif defined(__DMC__)
       
   518 
       
   519 inline int   _FILE_fd(const FILE *__f) { return __f->_file; }
       
   520 
       
   521 //       Returns a pointer to the beginning of the buffer.
       
   522 inline char* _FILE_I_begin(const FILE *__f) { return __f->_base; }
       
   523 
       
   524 //       Returns the current read/write position within the buffer.
       
   525 inline char* _FILE_I_next(const FILE *__f) { return __f->_ptr; }
       
   526 
       
   527 //       Returns a pointer immediately past the end of the buffer.
       
   528 inline char* _FILE_I_end(const FILE *__f) { return __f->_ptr + __f->_cnt; }
       
   529 
       
   530 //       Returns the number of characters remaining in the buffer, i.e.
       
   531 //       _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f).
       
   532 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_cnt; }
       
   533 
       
   534 //       Increments the current read/write position by 1, returning the
       
   535 //       character at the NEW position.
       
   536 inline char& _FILE_I_preincr(FILE *__f) { --__f->_cnt; return *(++__f->_ptr); }
       
   537 
       
   538 
       
   539 //       Increments the current read/write position by 1, returning the
       
   540 //       character at the old position.
       
   541 inline char& _FILE_I_postincr(FILE *__f) { --__f->_cnt; return *(__f->_ptr++); }
       
   542 
       
   543 //       Decrements the current read/write position by 1, returning the
       
   544 //       character at the NEW position.
       
   545 inline char& _FILE_I_predecr(FILE *__f) { ++__f->_cnt; return *(--__f->_ptr); }
       
   546 
       
   547 //       Decrements the current read/write position by 1, returning the
       
   548 //       character at the old position.
       
   549 inline char& _FILE_I_postdecr(FILE *__f) { ++__f->_cnt; return *(__f->_ptr--); }
       
   550 
       
   551 //       Increments the current read/write position by __n.
       
   552 inline void _FILE_I_bump(FILE *__f, int __n) { __f->_cnt -= __n; __f->_ptr += __n; }
       
   553 
       
   554 //       Sets the beginning of the bufer to __begin, the current read/write
       
   555 //       position to __next, and the buffer's past-the-end pointer to __end.
       
   556 //       If any of those pointers is null, then all of them must be null.
       
   557 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end)
       
   558 {
       
   559   __f->_base = __begin;
       
   560   __f->_ptr = __next;
       
   561   __f->_cnt = __end - __next;
       
   562   __f->_bufsiz = __end - __begin;
       
   563 }
       
   564 
       
   565 # define _STLP_FILE_I_O_IDENTICAL
       
   566 
       
   567 #elif defined(__MRC__) || defined(__SC__)    //*TY 02/24/2000 - added support for MPW
       
   568 
       
   569 inline int   _FILE_fd(const FILE *__f) { return __f->_file; }
       
   570 
       
   571 //       Returns a pointer to the beginning of the buffer.
       
   572 inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->_base; }
       
   573 
       
   574 //       Returns the current read/write position within the buffer.
       
   575 inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->_ptr; }
       
   576 
       
   577 //       Returns a pointer immediately past the end of the buffer.
       
   578 inline char* _FILE_I_end(const FILE *__f) { return (char*)__f->_end; }
       
   579 
       
   580 //       Returns the number of characters remaining in the buffer, i.e.
       
   581 //       _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f).
       
   582 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_cnt; }
       
   583 
       
   584 //       Increments the current read/write position by 1, returning the
       
   585 //       character at the NEW position.
       
   586 inline char& _FILE_I_preincr(FILE *__f) { --__f->_cnt; return*(char*) (++__f->_ptr); }
       
   587 
       
   588 
       
   589 //       Increments the current read/write position by 1, returning the
       
   590 //       character at the old position.
       
   591 inline char& _FILE_I_postincr(FILE *__f) { --__f->_cnt; return*(char*) (__f->_ptr++); }
       
   592 
       
   593 //       Decrements the current read/write position by 1, returning the
       
   594 //       character at the NEW position.
       
   595 inline char& _FILE_I_predecr(FILE *__f) { ++__f->_cnt; return*(char*) (--__f->_ptr); }
       
   596 
       
   597 //       Decrements the current read/write position by 1, returning the
       
   598 //       character at the old position.
       
   599 inline char& _FILE_I_postdecr(FILE *__f) { ++__f->_cnt; return*(char*) (__f->_ptr--); }
       
   600 
       
   601 //       Increments the current read/write position by __n.
       
   602 inline void _FILE_I_bump(FILE *__f, int __n) { __f->_cnt -= __n; __f->_ptr += __n; }
       
   603 
       
   604 //       Sets the beginning of the bufer to __begin, the current read/write
       
   605 //       position to __next, and the buffer's past-the-end pointer to __end.
       
   606 //       If any of those pointers is null, then all of them must be null.
       
   607 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end)
       
   608 {
       
   609   __f->_base = (unsigned char*)__begin;
       
   610   __f->_ptr  = (unsigned char*)__next;
       
   611   __f->_end  = (unsigned char*)__end;
       
   612   __f->_cnt  = __end - __next;
       
   613   __f->_size = __end - __begin;
       
   614 }
       
   615 
       
   616 # define _STLP_FILE_I_O_IDENTICAL
       
   617 
       
   618 #elif defined (__MVS__)
       
   619 
       
   620 typedef unsigned char* _File_ptr_type;
       
   621 
       
   622 inline int _FILE_fd(const FILE *__f) { return fileno(__CONST_CAST(FILE
       
   623                   *,__f)); }
       
   624 inline char* _FILE_I_begin(const FILE *__f) { return (char*)
       
   625             __f->__fp->__bufPtr; }
       
   626 inline char* _FILE_I_next(const FILE *__f) { return (char*)
       
   627                  __f->__fp->__bufPtr; }
       
   628 inline char* _FILE_I_end(const FILE *__f)
       
   629 { return (char*) __f->__fp->__bufPtr + __f->__fp->__countIn; }
       
   630 
       
   631 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return
       
   632                 __f->__fp->__countIn; }
       
   633 
       
   634 inline char& _FILE_I_preincr(FILE *__f)
       
   635 { --__f->__fp->__countIn; return *(char*) (++__f->__fp->__bufPtr); }
       
   636 inline char& _FILE_I_postincr(FILE *__f)
       
   637 { --__f->__fp->__countIn; return *(char*) (__f->__fp->__bufPtr++); }
       
   638 inline char& _FILE_I_predecr(FILE *__f)
       
   639 { ++__f->__fp->__countIn; return *(char*) (--__f->__fp->__bufPtr); }
       
   640 inline char& _FILE_I_postdecr(FILE *__f)
       
   641 { ++__f->__fp->__countIn; return *(char*) (__f->__fp->__bufPtr--); }
       
   642 inline void _FILE_I_bump(FILE *__f, int __n)
       
   643 { __f->__fp->__bufPtr += __n; __f->__fp->__countIn -= __n; }
       
   644 
       
   645 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char*
       
   646       __end) {
       
   647   // __f->_base = (_File_ptr_type) __begin;
       
   648   if(__f->__fp) {
       
   649     __f->__fp->__bufPtr = (_File_ptr_type) __next;
       
   650     __f->__fp->__countIn = __end - __next;
       
   651   }
       
   652 }
       
   653 
       
   654 inline char* _FILE_O_begin(const FILE *__f) { return (char*)__f->__fp->__bufPtr;}
       
   655 inline char* _FILE_O_next(const FILE *__f) { return (char*) __f->__fp->__bufPtr;}
       
   656 inline char* _FILE_O_end(const FILE *__f) { return (char*) __f->__fp->__bufPtr + __f->__fp->__countOut; }
       
   657 inline ptrdiff_t _FILE_O_avail(const FILE *__f) { return __f->__fp->__countOut; }
       
   658 
       
   659 inline char& _FILE_O_preincr(FILE *__f)
       
   660 { --__f->__fp->__countOut; return *(char*) (++__f->__fp->__bufPtr); }
       
   661 inline char& _FILE_O_postincr(FILE *__f)
       
   662 { --__f->__fp->__countOut; return *(char*) (__f->__fp->__bufPtr++); }
       
   663 inline char& _FILE_O_predecr(FILE *__f)
       
   664 { ++__f->__fp->__countOut; return *(char*) (--__f->__fp->__bufPtr); }
       
   665 inline char& _FILE_O_postdecr(FILE *__f)
       
   666 { ++__f->__fp->__countOut; return *(char*) (__f->__fp->__bufPtr--); }
       
   667 inline void _FILE_O_bump(FILE *__f, int __n)
       
   668 { __f->__fp->__bufPtr += __n; __f->__fp->__countOut -= __n; }
       
   669 
       
   670 inline void _FILE_O_set(FILE *__f, char* __begin, char* __next, char*
       
   671       __end) {
       
   672   // __f->_base = (_File_ptr_type) __begin;
       
   673   if(__f->__fp) {
       
   674     __f->__fp->__bufPtr = (_File_ptr_type) __next;
       
   675     __f->__fp->__countOut = __end - __next;
       
   676   }
       
   677 }
       
   678 
       
   679 #elif defined(__QNXNTO__)
       
   680 
       
   681 inline int _FILE_fd(const FILE *__f) { return __f->_handle;
       
   682 }
       
   683 inline char* _FILE_I_begin(const FILE *__f) { return
       
   684                                                 (char*) __f->_base; }
       
   685 inline char* _FILE_I_next(const FILE *__f) { return
       
   686                                                (char*) __f->_ptr; }
       
   687 inline char* _FILE_I_end(const FILE *__f)
       
   688 { return (char*) __f->_ptr + __f->_cnt; }
       
   689 
       
   690 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return
       
   691                                                     __f->_cnt; }
       
   692 
       
   693 inline char& _FILE_I_preincr(FILE *__f)
       
   694 { --__f->_cnt; return *(char*) (++__f->_ptr); }
       
   695 inline char& _FILE_I_postincr(FILE *__f)
       
   696 { --__f->_cnt; return *(char*) (__f->_ptr++); }
       
   697 inline char& _FILE_I_predecr(FILE *__f)
       
   698 { ++__f->_cnt; return *(char*) (--__f->_ptr); }
       
   699 inline char& _FILE_I_postdecr(FILE *__f)
       
   700 { ++__f->_cnt; return *(char*) (__f->_ptr--); }
       
   701 inline void _FILE_I_bump(FILE *__f, int __n)
       
   702 { __f->_ptr += __n; __f->_cnt -= __n; }
       
   703 
       
   704 inline void _FILE_I_set(FILE *__f, char* __begin, char*
       
   705                         __next, char*
       
   706                         __end) {
       
   707   __f->_base = (unsigned char*) __begin;
       
   708   __f->_ptr = (unsigned char*) __next;
       
   709   __f->_cnt = __end - __next;
       
   710 }
       
   711 
       
   712 # define _STLP_FILE_I_O_IDENTICAL
       
   713 
       
   714 #elif defined(__WATCOMC__)                   // Nikolaev
       
   715 
       
   716 inline int       _FILE_fd      (const FILE *__f) { return __f->_handle;}
       
   717 inline char*     _FILE_I_begin (const FILE *__f) { return __REINTERPRET_CAST(char*, __f->_link); }
       
   718 inline char*     _FILE_I_next  (const FILE *__f) { return __REINTERPRET_CAST(char*, __f->_ptr); }
       
   719 inline char*     _FILE_I_end   (const FILE *__f) { return __REINTERPRET_CAST(char*, __f->_ptr + __f->_cnt); }
       
   720 inline ptrdiff_t _FILE_I_avail (const FILE *__f) { return __f->_cnt; }
       
   721 
       
   722 inline char& _FILE_I_preincr(FILE *__f)
       
   723 {
       
   724   --__f->_cnt;
       
   725   return *__REINTERPRET_CAST(char*, ++__f->_ptr);
       
   726 }
       
   727 
       
   728 inline char& _FILE_I_postincr(FILE *__f)
       
   729 {
       
   730   --__f->_cnt;
       
   731   return *__REINTERPRET_CAST(char*, __f->_ptr++);
       
   732 }
       
   733 
       
   734 inline char& _FILE_I_predecr(FILE *__f)
       
   735 {
       
   736   ++__f->_cnt;
       
   737   return *__REINTERPRET_CAST(char*, --__f->_ptr);
       
   738 }
       
   739 
       
   740 inline char& _FILE_I_postdecr(FILE *__f)
       
   741 {
       
   742   ++__f->_cnt;
       
   743   return *__REINTERPRET_CAST(char*, __f->_ptr--);
       
   744 }
       
   745 
       
   746 inline void _FILE_I_bump(FILE *__f, int __n)
       
   747 {
       
   748   __f->_ptr += __n;
       
   749   __f->_cnt -= __n;
       
   750 }
       
   751 
       
   752 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end)
       
   753 {
       
   754   __f->_link = __REINTERPRET_CAST(__stream_link*, __begin);
       
   755   __f->_ptr  = __REINTERPRET_CAST(unsigned char*, __next);
       
   756   __f->_cnt  = __end - __next;
       
   757 }
       
   758 
       
   759 # define _STLP_FILE_I_O_IDENTICAL
       
   760 
       
   761 #elif defined (__Lynx__)
       
   762 
       
   763 // the prototypes are taken from LynxOS patch for STLport 4.0
       
   764 inline int   _FILE_fd(const FILE *__f) { return __f->_fd; }
       
   765 inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->_base; }
       
   766 inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->_ptr; }
       
   767 inline char* _FILE_I_end(const FILE *__f)
       
   768   { return (char*) __f->_ptr + __f->_cnt; }
       
   769 
       
   770 inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_cnt; }
       
   771 
       
   772 inline char& _FILE_I_preincr(FILE *__f)
       
   773   { --__f->_cnt; return *(char*) (++__f->_ptr); }
       
   774 inline char& _FILE_I_postincr(FILE *__f)
       
   775   { --__f->_cnt; return *(char*) (__f->_ptr++); }
       
   776 inline char& _FILE_I_predecr(FILE *__f)
       
   777    { ++__f->_cnt; return *(char*) (--__f->_ptr); }
       
   778 inline char& _FILE_I_postdecr(FILE *__f)
       
   779   { ++__f->_cnt; return *(char*) (__f->_ptr--); }
       
   780 inline void  _FILE_I_bump(FILE *__f, int __n)
       
   781   { __f->_ptr += __n; __f->_cnt -= __n; }
       
   782 
       
   783 inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) {
       
   784   __f->_base = __begin;
       
   785   __f->_ptr  = __next;
       
   786   __f->_cnt  = __end - __next;
       
   787 }
       
   788 # define _STLP_FILE_I_O_IDENTICAL
       
   789 
       
   790 #else  /* A C library that we don't have an implementation for. */
       
   791 
       
   792 # error The C++ I/O library is not configured for this compiler
       
   793 
       
   794 #endif
       
   795 
       
   796 
       
   797 // For most stdio's , input and output FILE manipulation is identical.
       
   798 # ifdef _STLP_FILE_I_O_IDENTICAL
       
   799 inline char* _FILE_O_begin(const FILE *__f) { return _FILE_I_begin(__f); }
       
   800 inline char* _FILE_O_next(const FILE *__f)  { return _FILE_I_next(__f); }
       
   801 inline char* _FILE_O_end(const FILE *__f)   { return _FILE_I_end(__f); }
       
   802 
       
   803 inline ptrdiff_t _FILE_O_avail(const FILE *__f) { return _FILE_I_avail(__f); }
       
   804 
       
   805 inline char& _FILE_O_preincr(FILE *__f)  { return _FILE_I_preincr(__f); }
       
   806 inline char& _FILE_O_postincr(FILE *__f) { return _FILE_I_postincr(__f); }
       
   807 inline char& _FILE_O_predecr(FILE *__f)  { return _FILE_I_predecr(__f); }
       
   808 inline char& _FILE_O_postdecr(FILE *__f) { return _FILE_I_postdecr(__f); }
       
   809 
       
   810 inline void  _FILE_O_bump(FILE *__f, int __n) { _FILE_I_bump(__f, __n); }
       
   811 inline void _FILE_O_set(FILE *__f, char* __begin, char* __next, char* __end)
       
   812   { _FILE_I_set(__f, __begin, __next, __end); }
       
   813 # endif
       
   814 
       
   815 _STLP_END_NAMESPACE
       
   816 
       
   817 #endif /* _STLP_STDIO_FILE_H */
       
   818 
       
   819 // Local Variables:
       
   820 // mode:C++
       
   821 // End: