Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | Related Pages

logbuffer.h

00001 // -*- mode: c++;
00002 #ifndef logbuffer_h
00003 #define logbuffer_h
00004 
00005 #include <sstream>
00006 #include "streamlog/logstream.h"
00007 
00008 namespace streamlog{
00009 
00010 
00017   class logbuffer : public std::streambuf {
00018     
00019     std::streambuf* _sbuf ;
00020     logstream* _ls ;
00021 
00022     logbuffer();
00023 
00024 
00025   public:
00026 
00027     logbuffer( std::streambuf* sbuf, logstream* logstream ) : _sbuf( sbuf ), _ls(logstream) {} 
00028   
00029     ~logbuffer() {
00030     
00031     }
00032 
00033     
00038     inline virtual int overflow( int c = EOF ) {
00039       
00040       static bool hasNewLine = true ;
00041       
00042       if ( c == EOF ) 
00043         return EOF ;
00044     
00045       bool success = true;
00046     
00047       if ( hasNewLine == true ) {
00048         
00049         std::string pre = (* _ls->prefix() )() ;
00050 
00051         success &= (  (unsigned) _sbuf->sputn( pre.c_str() , pre.size() ) == pre.size()  ) ;
00052 
00053         hasNewLine = false;
00054       }
00055 
00056       if ( c == '\n' )
00057         hasNewLine = true;
00058     
00059       if ( success )
00060         success &= ( _sbuf->sputc(c) != EOF ) ;
00061     
00062       if( success ) 
00063         return 0 ;
00064 
00065       return EOF ;
00066     }
00067 
00068   } ;
00069 
00070 }
00071 #endif

Generated on Mon Jan 12 09:48:51 2009 for Marlin by doxygen 1.3.5