[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
Re: Log class problems
I have finally commited a first draft of very first class - CLogFile, to
SPTK, along with the test example. I'd add logger interface in a day or two.
2006/1/30, Ilya A. Volynets-Evenbakh <ilya@total-knowledge.com>:
>
> OK.
> Take a look at
>
> http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/classstd_1_1basic__streambuf.html#std_1_1basic__streambufb3
>
> See what base class version of overflow does...
>
>
> Alexey Parshin wrote:
>
> >Since the attachment doesn't work - sending it directly
> >
> >//#include "stdafx.h"
> >#include <iostream>
> >#include <strstream>
> >
> >using namespace std;
> >
> >class CLogStreamBuf : public streambuf {
> > iostream *m_parent;
> > char *m_start;
> > char *m_end;
> > char *m_buffer;
> >protected:
> > virtual int_type overflow(int_type c);
> > virtual streamsize xsputn(const char_type* s, streamsize n);
> >public:
> > CLogStreamBuf() {
> > m_buffer = new char[16];
> > setbuf(m_buffer,16);
> > }
> > ~CLogStreamBuf() {
> > cout << "Destructor" << endl;
> > delete m_buffer;
> > }
> >};
> >
> >class CLog : public iostream {
> > CLogStreamBuf m_buffer;
> >public:
> > CLog() : iostream(&m_buffer),ios(0) {}
> > ~CLog() { flush(); }
> >};
> >
> >streambuf::int_type CLogStreamBuf::overflow(streambuf::int_type c) {
> > int bytes = pptr() - pbase();
> > cout << "in overflow, char = '" << char(c) << "' " << c << " - was "
> <<
> >bytes << " bytes" << endl;
> > streambuf::int_type rc = streambuf::overflow(c);
> > return rc;
> >}
> >
> >streamsize CLogStreamBuf::xsputn(const char_type* s, streamsize n) {
> > int bytes = pptr() - pbase();
> > char *buff = new char[n+1];
> > strncpy(buff,s,n); buff[n] = 0;
> > cout << "in xsputn, str = " << buff << " - was " << bytes << " bytes"
> <<
> >endl;
> > delete buff;
> > streamsize rc = streambuf::xsputn(s,n);
> >
> > while ( sgetc() != EOF ) {
> > char ch = sbumpc();
> > //if (ch == 10) cout << endl;
> > //else
> > if (ch >= 10)
> > cout << ch;
> > }
> > return rc;
> >}
> >
> >int main(int argc,char *argv[]) {
> > CLog cl;
> > for (unsigned i = 0; i < 4; i++)
> > cl << "line" << i << " " << 12345 << " out " << endl << endl;
> >}
> >
> >
> >
> >--
> >Alexey Parshin,
> >http://www.sptk.net
> >
> >
> >
>
> --
> Ilya A. Volynets-Evenbakh
> Total Knowledge. CTO
> http://www.total-knowledge.com
>
>
--
Alexey Parshin,
http://www.sptk.net