home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / cb / setup / cbuilder / data.z / FSTREAM.H < prev    next >
C/C++ Source or Header  |  1997-02-28  |  7KB  |  223 lines

  1. /*
  2.    fstream.h -- class filebuf and fstream declarations
  3.  
  4. */
  5.  
  6. /*
  7.  *      C/C++ Run Time Library - Version 8.0
  8.  *
  9.  *      Copyright (c) 1987, 1997 by Borland International
  10.  *      All Rights Reserved.
  11.  *
  12.  */
  13. /* $Revision:   8.1  $ */
  14.  
  15. #ifndef __cplusplus
  16. #error Must use C++ for the type fstream.
  17. #endif
  18.  
  19. #ifndef __FSTREAM_H
  20. #define __FSTREAM_H
  21.  
  22. #if !defined(___DEFS_H)
  23. #include <_defs.h>
  24. #endif
  25.  
  26. #if !defined(__IOSTREAM_H)
  27. #include <iostream.h>
  28. #endif
  29.  
  30.  
  31. #if !defined(RC_INVOKED)
  32.  
  33. #pragma pack(push, 1)
  34.  
  35. #if defined(__BCOPT__)
  36. #if !defined(_RTL_ALLOW_po) && !defined(__FLAT__)
  37. #pragma option -po-     // disable Object data calling convention
  38. #endif
  39. #endif
  40.  
  41. #if !defined(__TINY__)
  42. #pragma option -RT
  43. #endif
  44.  
  45. #pragma option -Vo-
  46.  
  47. #if defined(__STDC__)
  48. #pragma warn -nak
  49. #endif
  50.  
  51. #endif  /* !RC_INVOKED */
  52.  
  53.  
  54. _CLASSDEF(filebuf)
  55. _CLASSDEF(fstreambase)
  56. _CLASSDEF(ifstream)
  57. _CLASSDEF(ofstream)
  58. _CLASSDEF(fstream)
  59.  
  60. class  _EXPCLASS filebuf : public streambuf {
  61. public:
  62. static const int openprot;  // default file protection
  63.  
  64.     // constructors, destructor
  65.     _RTLENTRY filebuf();   // make a closed filebuf
  66.     _RTLENTRY filebuf(int);    // make a filebuf attached to fd
  67.     _RTLENTRY filebuf(int __f, char _FAR *, int); // same, with specified buffer
  68.     _RTLENTRY ~filebuf();
  69.  
  70.     int _RTLENTRY is_open();   // is the file open
  71.     int _RTLENTRY fd();        // what is the file descriptor
  72.  
  73.     // open named file with mode and protection, attach to this filebuf
  74.     filebuf _FAR * _RTLENTRY open(const char _FAR *, int, int = filebuf::openprot);
  75.  
  76.     filebuf _FAR * _RTLENTRY close();      // flush and close file
  77.     filebuf _FAR * _RTLENTRY attach(int);  // attach this filebuf to opened
  78.                                         // file descriptor
  79.  
  80. /*
  81.  * These perform the streambuf functions on a filebuf
  82.  * Get and Put pointers are kept together
  83.  */
  84. virtual int _RTLENTRY overflow(int = EOF);
  85. virtual int _RTLENTRY underflow();
  86. virtual int _RTLENTRY sync();
  87. virtual streampos  _RTLENTRY seekoff(streamoff, ios::seek_dir, int);
  88. virtual streambuf _FAR * _RTLENTRY setbuf(char _FAR *, int);
  89.  
  90. #if defined(__FLAT__)
  91. virtual void _RTLENTRY lock();
  92. virtual void _RTLENTRY unlock();
  93. #endif
  94.  
  95. protected:
  96.     int xfd;        // the file descriptor, EOF if closed
  97.     int mode;       // the opened mode
  98.     short   opened; // non-zero if file is open
  99.  
  100.     streampos last_seek;    // unused           ***
  101.     char _FAR *   in_start; // unused           ***
  102.  
  103.     int _RTLENTRY last_op();   // unused           ***
  104.     char    lahead[2];      // current input char if unbuffered ***
  105. };
  106. /*
  107.  * The data members marked with *** above are not documented in the AT&T
  108.  * release of streams, so we cannot guarantee compatibility with any
  109.  * other streams release in the use or values of these data members.
  110.  * If you can document any expected behavior of these data members, we
  111.  * will try to adjust our implementation accordingly.
  112.  */
  113. inline int  _RTLENTRY filebuf::is_open()   { return opened; }
  114. inline int  _RTLENTRY filebuf::fd()        { return xfd; }
  115.  
  116. class _EXPCLASS fstreambase : virtual public ios {
  117. public:
  118.     _RTLENTRY fstreambase();
  119.     _RTLENTRY fstreambase(const char _FAR *, int, int = filebuf::openprot);
  120.     _RTLENTRY fstreambase(int);
  121.     _RTLENTRY fstreambase(int __f, char _FAR *, int);
  122.     _RTLENTRY ~fstreambase();
  123.  
  124.     void    _RTLENTRY open(const char _FAR *, int, int = filebuf::openprot);
  125.     void    _RTLENTRY attach(int);
  126.     void    _RTLENTRY close();
  127.     void    _RTLENTRY setbuf(char _FAR *, int);
  128.     filebuf _FAR * _RTLENTRY rdbuf();
  129.  
  130. protected:
  131.     void    _RTLENTRY verify(int); // unimplemented    ***
  132.  
  133. private:
  134.     filebuf buf;
  135. };
  136. /*
  137.  * The function member marked with *** above is not documented in the AT&T
  138.  * release of streams, so we cannot guarantee compatibility with any
  139.  * other streams release in its use.
  140.  * If you can document any expected behavior of this function member, we
  141.  * will try to adjust our implementation accordingly.
  142.  */
  143. inline filebuf _FAR * _RTLENTRY fstreambase::rdbuf() { return &buf; }
  144.  
  145. class _EXPCLASS ifstream : public fstreambase, public istream {
  146. public:
  147.     _RTLENTRY ifstream();
  148.     _RTLENTRY ifstream(const char _FAR *,int = ios::in,int = filebuf::openprot);
  149.     _RTLENTRY ifstream(int);
  150.     _RTLENTRY ifstream(int __f, char _FAR *, int);
  151.     _RTLENTRY ~ifstream();
  152.  
  153.     filebuf _FAR * _RTLENTRY rdbuf();
  154.     void    _RTLENTRY open(const char _FAR *, int = ios::in,
  155.                         int = filebuf::openprot);
  156. };
  157. inline filebuf _FAR * _RTLENTRY ifstream::rdbuf() { return fstreambase::rdbuf(); }
  158. inline void _RTLENTRY ifstream::open(const char _FAR * __name, int __m, int __prot) {
  159.     fstreambase::open(__name, __m | ios::in, __prot);
  160.     }
  161.  
  162.  
  163. class _EXPCLASS ofstream : public fstreambase, public ostream {
  164. public:
  165.     _RTLENTRY ofstream();
  166.     _RTLENTRY ofstream(const char _FAR *, int = ios::out, int = filebuf::openprot);
  167.     _RTLENTRY ofstream(int);
  168.     _RTLENTRY ofstream(int __f, char _FAR *, int);
  169.     _RTLENTRY ~ofstream();
  170.  
  171.     filebuf _FAR * _RTLENTRY rdbuf();
  172.     void    _RTLENTRY open(const char _FAR *, int = ios::out,
  173.                         int = filebuf::openprot);
  174. };
  175. inline filebuf _FAR * _RTLENTRY ofstream::rdbuf() { return fstreambase::rdbuf(); }
  176. inline void _RTLENTRY ofstream::open(const char _FAR * __name, int __m, int __prot) {
  177.     fstreambase::open(__name, __m | ios::out, __prot);
  178.     }
  179.  
  180.  
  181. class _EXPCLASS fstream : public fstreambase, public iostream {
  182. public:
  183.     _RTLENTRY fstream();
  184.     _RTLENTRY fstream(const char _FAR *, int, int = filebuf::openprot);
  185.     _RTLENTRY fstream(int);
  186.     _RTLENTRY fstream(int __f, char _FAR *, int);
  187.     _RTLENTRY ~fstream();
  188.  
  189.     filebuf _FAR * _RTLENTRY rdbuf();
  190.     void    _RTLENTRY open(const char _FAR *, int, int = filebuf::openprot);
  191. };
  192. inline filebuf _FAR * _RTLENTRY fstream::rdbuf() {return fstreambase::rdbuf();}
  193. inline void _RTLENTRY fstream::open(const char _FAR * __name, int __m, int __prot) {
  194.     fstreambase::open(__name, __m, __prot);
  195.     }
  196.  
  197.  
  198. #if !defined(RC_INVOKED)
  199.  
  200. #if defined(__STDC__)
  201. #pragma warn .nak
  202. #endif
  203.  
  204. #pragma option -Vo.
  205.  
  206. #if !defined(__TINY__)
  207. #pragma option -RT.
  208. #endif
  209.  
  210. #if defined(__BCOPT__)
  211. #if !defined(_RTL_ALLOW_po) && !defined(__FLAT__)
  212. #pragma option -po.     // restore Object data calling convention
  213. #endif
  214. #endif
  215.  
  216. /* restore default packing */
  217. #pragma pack(pop)
  218.  
  219. #endif  /* !RC_INVOKED */
  220.  
  221.  
  222. #endif  /* __FSTREAM_H */
  223.