Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
src/dater.cpp
Go to the documentation of this file.
1 #include <xstream/dater.h>
2 
3 #include <string>
4 #include <streambuf>
5 
6 #include "debug.h"
7 
8 namespace xstream {
9 
10  dater::dater(std::streambuf* sb, const std::string& f, char sep, bool wn)
11  : _sb(sb), date(f), separator(sep), write_next(wn)
12  {
13  LOG("dater::dater format=" << f);
14  }
15 
16  int dater::sync() {
17  LOG("dater::sync");
18  return _sb->pubsync();
19  }
20 
21  int dater::overflow(int c) {
22  LOG("dater::overflow (" << c << ")");
23  if (write_next) {
24  write_date();
25  }
26 
27  //XXX error handling could improve here
28 
29  _sb->sputc(c);
30 
31  if (separator == c) {
32  write_next = true;
33  }
34  return c;
35  }
36 
37  std::streamsize dater::xsputn(const char *buffer, std::streamsize n) {
38  LOG("dater::xsputn " << buffer);
39  std::streamsize written=0;
40 
41  const char* end_buffer = buffer + n;
42  const char* beg;
43  const char* end;
44 
45  std::string d;
46  for (beg = buffer, end = buffer; end < end_buffer; ++end) {
47  if (write_next) {
48  write_date();
49  }
50 
51  if (separator == *end) {
52  //XXX check return code
53  std::streamsize w = end - beg + 1;
54  _sb->sputn(beg, w);
55  written += w;
56  beg = end + 1;
57  write_next = true;
58  }
59  }
60  return written;
61  }
62 
64  LOG("dater::write_date");
65  //XXX check return code
66  std::string d = date.now();
67  _sb->sputn(d.c_str(), d.size());
68  write_next = false;
69  }
70 
72  LOG("dater::~dater");
73  _sb->pubsync();
74  }
75 }//namespace xstream
std::string now() const
Definition: posix.cpp:30
debugging/logging support
char string[256]
#define c
posix::date_format date
Definition: dater.h:27
dater(std::streambuf *sb, const std::string &format="[%c] ", char separator='\n', bool write_first=true)
construct using another streambuf
Definition: src/dater.cpp:10
void write_date()
writes the current date to the streambuf
Definition: src/dater.cpp:63
std::streambuf * _sb
Definition: dater.h:26
TF1 * f
Definition: FitGains.C:21
C++ objects to date output lines.
bool write_next
Definition: dater.h:29
int sync()
tries to write as much data as possible (overloaded from streambuf)
Definition: src/dater.cpp:16
char separator
Definition: dater.h:28
std::streamsize xsputn(const char *buffer, std::streamsize n)
write an entire buffer (overloaded from streambuf)
Definition: src/dater.cpp:37
int overflow(int c)
write a character that surpasses buffer end (overloaded from streambuf)
Definition: src/dater.cpp:21
buffer management
Definition: common.h:46
#define LOG(s)
Definition: debug.h:30