Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages   Examples  

CTBlineStream.cxx

Go to the documentation of this file.
00001 
00006 /*----------------------------------------------------------------------------*/
00007 /* C Tool Box: Designed and implemented by:                                   */
00008 /*    Walter F.J. Mueller   Gesellschaft fuer Schwerionenforschung (GSI)      */
00009 /*                          Planckstrasse 1, D-64291 Darmstadt, Germany       */
00010 /*                  Email:  W.F.J.Mueller@gsi.de                              */
00011 /*                  WWW:    http://www-kp3.gsi.de/www/kp3/people/mueller.html */
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;                       // quit if not connected
00114   
00115   if (!mb_attached) delete mp_is;           // close and delete if Open()ed
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;                 // not connected
00169   if (!mb_valid_line) return false;         // no valid line
00170   if (mb_reread_line) return false;         // nested ungets
00171   mb_reread_line = true;
00172   return true;
00173 }
00174 
00175 //------------------------------------------+-----------------------------------
00176 bool CTBlineStream::Get()                   // get next line
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 }

Generated at Fri Oct 24 18:11:28 2003 for CTBbase by doxygen1.2.9-20010812 written by Dimitri van Heesch, © 1997-2001