00001
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <string.h>
00015
00016 #include <fstream.h>
00017
00018 #include "CTB.hxx"
00019 #include "CTBlineStream.hxx"
00020
00028
00030
00035 CTBlineStream::CTBlineStream()
00036 : mp_is(0),
00037 mb_attached(false),
00038 mb_valid_line(false),
00039 mb_reread_line(false)
00040 {}
00041
00042
00044
00048 CTBlineStream::~CTBlineStream()
00049 {
00050 Close();
00051 }
00052
00053
00055
00061 bool CTBlineStream::Open(const char* c_name)
00062 {
00063 ifstream* p_ifs;
00064
00065 Close();
00066
00067 if (!c_name) return false;
00068
00069 if (strcmp(c_name,"-")==0) {
00070 Attach(&cin);
00071 return true;
00072 }
00073
00074 p_ifs = new ifstream;
00075 p_ifs->open(c_name);
00076 mp_is = p_ifs;
00077
00078 return *mp_is;
00079 }
00080
00081
00083
00092 void CTBlineStream::Attach(istream* p_is)
00093 {
00094 Close();
00095
00096 if (p_is) {
00097 mp_is = p_is;
00098 mb_attached = true;
00099 }
00100
00101 return;
00102 }
00103
00104
00106
00111 void CTBlineStream::Close()
00112 {
00113 if (!mp_is) return;
00114
00115 if (!mb_attached) delete mp_is;
00116
00117 mp_is = 0;
00118 mb_attached = false;
00119 mb_valid_line = false;
00120 mb_reread_line = false;
00121
00122 return;
00123 }
00124
00125
00127
00131 bool CTBlineStream::Get(CTBstring& line)
00132 {
00133 bool b_ok = Get();
00134
00135 line = m_line;
00136 return b_ok;
00137 }
00138
00139
00141
00146 bool CTBlineStream::Get(const char*& c_line)
00147 {
00148 bool b_ok = Get();
00149
00150 c_line = m_line;
00151 return b_ok;
00152 }
00153
00154
00156
00166 bool CTBlineStream::Unget()
00167 {
00168 if (!mp_is) return false;
00169 if (!mb_valid_line) return false;
00170 if (mb_reread_line) return false;
00171 mb_reread_line = true;
00172 return true;
00173 }
00174
00175
00176 bool CTBlineStream::Get()
00177 {
00178 if (!mp_is) return false;
00179 if (mb_reread_line) {
00180 mb_reread_line = false;
00181 return true;
00182 }
00183
00184 mb_valid_line = m_line.GetLine(*mp_is);
00185 if (!mb_valid_line) m_line = "";
00186
00187 return mb_valid_line;
00188 }