stream.h
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:5k
开发平台:

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  stream.h
  6. +
  7. +  Copyright (c) 1995  by  Max-Planck-Institut fuer Informatik
  8. +  Im Stadtwald, 66123 Saarbruecken, Germany     
  9. +  All rights reserved.
  10. *******************************************************************************/
  11. #ifndef LEDA_STREAM_H
  12. #define LEDA_STREAM_H
  13. #include <LEDA/basic.h>
  14. #if defined (__ZTC__) 
  15. #include <fstream.hpp>
  16. #include <strstream.hpp>
  17. /* bug in ZORTECH library ? 
  18.    cannot derive from streams */
  19. typedef ifstream   file_istream;
  20. typedef ofstream   file_ostream;
  21. typedef istrstream string_istream;
  22. typedef ostrstream string_ostream;
  23. #else  
  24. #include <fstream.h>
  25. #include <strstream.h>
  26. /*{Manpage {file_istream} {} {File Input Streams} }*/
  27. struct file_istream : public ifstream {
  28. /*{Mdefinition
  29. An instance $I$ of the data type $file_istream$ is an CC istream
  30. connected to a file $F$, i.e., all input operations or operators
  31. applied to $I$ read from $F$. }*/
  32. /*{Mcreation I }*/
  33. file_istream(char*  s) : ifstream(s) {}
  34. file_istream(string s) : ifstream(~s) {}
  35. /*{Mcreate    creates an instance $I$ of type file_istream connected to 
  36.                file $s$. }*/
  37. /*{Moperations 2 5.5 }*/
  38. /*{Mtext
  39. All operations and operators ($>>$) defined for CC istreams can
  40. be applied to file input streams as well.
  41. }*/
  42.   bool open(string s)  { ifstream::open(~s); return !fail(); }
  43. };
  44. /*{Manpage {file_ostream} {} {File Output Streams} }*/
  45. struct file_ostream : public ofstream {
  46. /*{Mdefinition
  47. An instance $O$ of the data type $file_ostream$ is an CC ostream
  48. connected to a file $F$, i.e., all output operations or operators
  49. applied to $O$ write to $F$. }*/
  50. /*{Mcreation O }*/
  51. file_ostream(string s) : ofstream(~s) {}
  52. file_ostream(char*  s) : ofstream(s) {}
  53. /*{Mcreate    creates an instance $O$ of type file_ostream connected to 
  54.                file $s$.}*/ 
  55. /*{Moperations 2 5.5 }*/
  56. /*{Mtext
  57. All operations and operators ($<<$) defined for CC ostreams can
  58. be applied to file output streams as well.
  59. }*/
  60.  bool open(string s)  { ofstream::open(~s); return !fail(); }
  61. };
  62. /*{Manpage {string_istream} {} {String Input Streams} }*/
  63. struct string_istream : public istrstream {
  64. /*{Mdefinition
  65. An instance $I$ of the data type $string_istream$ is an CC istream
  66. connected to a string $s$, i.e., all input operations or operators
  67. applied to $I$ read from $s$. }*/
  68. /*{Mcreation I }*/
  69. string_istream(char* s)  : istrstream(s) {}
  70. string_istream(string s) : istrstream(~s) {}
  71. /*{Mcreate   creates an instance $I$ of type string_istream connected to 
  72.               the string $s$. }*/
  73. string_istream(int argc, char** argv) : istrstream(~string(argc,argv)) {}
  74. /*{Moperations 2 5.5 }*/
  75. /*{Mtext
  76. All operations and operators ($>>$) defined for CC istreams can
  77. be applied to string input streams as well.
  78. }*/
  79.  };
  80. /*{Manpage {string_ostream} {} {String Output Streams} }*/
  81. struct string_ostream : public ostrstream {
  82. /*{Mdefinition
  83.     An instance $O$ of the data type $string_ostream$ is an CC ostream
  84.     connected to an internal string buffer, i.e., all output operations 
  85.     or operators applied to $O$ write into this internal buffer.  The current
  86.     value of the buffer is called the contents of $O$.}*/
  87. /*{Mcreation O }*/
  88. string_ostream() {};
  89. /*{Mcreate creates an instance $O$ of type string_ostream.}*/
  90. /*{Moperations 2 5.5 }*/
  91. string str()     { return ostrstream::str(); };
  92. /*{Mop   returns the current contents of $O$.}*/
  93. /*{Mtext
  94. All operations and operators ($<<$) defined for CC ostreams can
  95. be applied to string output streams as well.
  96. }*/
  97. };
  98. #endif
  99. #if !defined(unix) || defined(__lucid)
  100. typedef file_ostream cmd_ostream;
  101. typedef file_istream cmd_istream;
  102. #else
  103. #include <stdio.h>
  104. /*{Manpage {cmd_istream} {} {Command Input Streams} }*/
  105. struct cmd_istream : public ifstream 
  106. /*{Mdefinition
  107. An instance $I$ of the data type $cmd_istream$ is an CC istream
  108. connected to the output of a shell command $cmd$, i.e., all input operations
  109. or operators applied to $I$ read from the standard output of command $cmd$. }*/
  110. /*{Mcreation I }*/
  111.   cmd_istream(char*  cmd) : ifstream(fileno(popen(cmd,"r"))) {} 
  112.   cmd_istream(string cmd) : ifstream(fileno(popen(~cmd,"r"))) {}
  113. /*{Mcreate   creates an instance $I$ of type cmd_istream connected to the 
  114.               output of command $cmd$. }*/
  115. /*{Moperations 2 5.5 }*/
  116. /*{Mtext
  117. All operations and operators ($>>$) defined for CC istreams can
  118. be applied to command input streams as well.
  119. }*/
  120.  };
  121. /*{Manpage {cmd_ostream} {} {Command Output Streams} }*/
  122. struct cmd_ostream : public ofstream {
  123. /*{Mdefinition
  124. An instance $O$ of the data type $cmd_ostream$ is an CC ostream
  125. connected to the input of a shell command $cmd$, i.e., all output operations
  126. or operators applied to $O$ write into the standard input of command $cmd$. }*/
  127. /*{Mcreation O }*/
  128. cmd_ostream(char*  cmd) : ofstream(fileno(popen(cmd,"w"))) {}
  129. cmd_ostream(string cmd) : ofstream(fileno(popen(~cmd,"w"))) {}
  130. /*{Mcreate
  131. creates an instance $O$ of type cmd_ostream connected to the input of 
  132. command $cmd$.  }*/
  133. /*{Moperations 2 5.5 }*/
  134. /*{Mtext
  135. All operations and operators ($<<$) defined for CC ostreams can
  136. be applied to command output streams as well.
  137. }*/
  138. };
  139. #endif
  140. #endif