17 LOG(
"digest::stream");
23 LOG(
"digest::~stream");
28 LOG(
"digest::stream::sync");
29 length += pptr() - pbase();
39 LOG(
"digest::stream::overflow " << c);
46 *(pptr()) = static_cast < char >(c);
54 LOG(
"digest::stream::xsputn(" << b <<
", " << n <<
")");
59 setp((
char*)b, (
char*)b + n);
65 block_stream::block_stream(
size_t chunk,
unsigned int blocks)
66 :
stream(chunk * blocks), chunk_size(chunk)
68 LOG(
"digest::block_stream (" << chunk <<
", " << blocks <<
")");
71 int block_stream::sync()
73 LOG(
"digest::block_stream::sync");
79 while (t >= chunk_size) {
81 setp(beg, beg + chunk_size);
87 LOG(
"\tlength = " << length);
93 LOG(
"\tnothing remains, reset buffer");
94 setp(buf.buf, buf.buf + buf.size);
95 }
else if (beg != buf.buf) {
96 LOG(
"\t" << t <<
" bytes remain, copying");
98 std::copy(beg, beg+t, buf.buf);
99 setp(buf.buf, buf.buf + buf.size);
106 int block_stream::overflow(
int c)
108 LOG(
"digest::block_stream::overflow "<<c);
115 *(pptr()) = static_cast < char >(c);
123 std::streamsize block_stream::xsputn(
const char *b, std::streamsize n)
125 LOG(
"digest::block_stream::xsputn " << n);
129 const std::streamsize t = taken();
130 const std::streamsize r = chunk_size - t;
132 LOG(
"\t" << t <<
" bytes previously in buffer, copying first " << r <<
" bytes");
133 std::copy(b, b + r, buf.buf + t);
136 setp((
char*)b + r, (
char*)b + n);
int overflow(int c)
write a character that surpasses buffer end (overloaded from streambuf)
int sync()
update digest with as much data as possible (overloaded from streambuf)
debugging/logging support
stream(size_t len)
default constructor
C++ objects to calculate digests of data.
virtual void calculate_digest()=0
updates the digest must be inplemented by classes that implement this interface
std::streamsize taken() const
number of characters in the buffer
std::streamsize xsputn(const char *buffer, std::streamsize n)
add an entire buffer to digest calculation (overloaded from streambuf)