diff src/c-file-ptr-stream.h @ 3644:9add655e8b8c

[project @ 2000-03-24 11:58:50 by jwe]
author jwe
date Fri, 24 Mar 2000 11:58:50 +0000
parents 168c4d71dc63
children 25e84fcef38a
line wrap: on
line diff
--- a/src/c-file-ptr-stream.h	Fri Mar 24 10:53:21 2000 +0000
+++ b/src/c-file-ptr-stream.h	Fri Mar 24 11:58:50 2000 +0000
@@ -33,10 +33,6 @@
 class
 c_file_ptr_buf : public std::streambuf
 {
-protected:
-
-  FILE *f;
-
 public:
 
   FILE* stdiofile (void) const { return f; }
@@ -64,36 +60,44 @@
 			  std::ios::openmode = std::ios::in | std::ios::out);
 
   int sync (void);
+
+protected:
+
+  FILE *f;
 };
 
 class
 i_c_file_ptr_stream : public std::istream
 {
+public:
+
+  i_c_file_ptr_stream (FILE* f)
+    : std::istream (), buf (new c_file_ptr_buf (f)) { init (buf); }
+
+  ~i_c_file_ptr_stream (void) { delete buf; buf = 0; }
+
+  c_file_ptr_buf *rdbuf (void) { return buf; }
+
 private:
 
-  c_file_ptr_buf f;
-
-public:
-
-  i_c_file_ptr_stream (FILE* f_arg)
-    : std::istream (), f (f_arg) { init (&f); }
-
-  c_file_ptr_buf *rdbuf (void) { return &f; }
+  c_file_ptr_buf *buf;
 };
 
 class
 o_c_file_ptr_stream : public std::ostream
 {
+public:
+
+  o_c_file_ptr_stream (FILE* f)
+    : std::ostream (), buf (new c_file_ptr_buf (f)) { init (buf); }
+
+  ~o_c_file_ptr_stream (void) { delete buf; buf = 0; }
+
+  c_file_ptr_buf *rdbuf (void) { return buf; }
+
 private:
 
-  c_file_ptr_buf f;
-
-public:
-
-  o_c_file_ptr_stream (FILE* f_arg)
-    : std::ostream (), f (f_arg) { init (&f); }
-
-  c_file_ptr_buf *rdbuf (void) { return &f; }
+  c_file_ptr_buf *buf;
 };
 
 #endif