WvStreams
debian/libwvstreams-dev/usr/include/wvstreams/wvencoder.h
1/* -*- Mode: C++ -*-
2 * Worldvisions Weaver Software:
3 * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
4 *
5 * A top-level data encoder class and a few useful encoders.
6 */
7#ifndef __WVENCODER_H
8#define __WVENCODER_H
9
10#include "wvbuf.h"
11#include "wvlinklist.h"
12#include "wvstring.h"
13
68{
69protected:
70 bool okay;
71 bool finished;
74public:
76 WvEncoder();
77
79 virtual ~WvEncoder();
80
90 bool isok() const
91 { return okay && _isok(); }
92
101 bool isfinished() const
102 { return finished || _isfinished(); }
103
109 WvString geterror() const;
110
152 bool encode(WvBuf &inbuf, WvBuf &outbuf, bool flush = false,
153 bool finish = false);
154
163 bool flush(WvBuf &inbuf, WvBuf &outbuf,
164 bool finish = false)
165 { return encode(inbuf, outbuf, true, finish); }
166
184 bool finish(WvBuf &outbuf);
185
199 bool reset();
200
209 bool flushstrbuf(WvStringParm instr, WvBuf &outbuf,
210 bool finish = false);
211
222 bool flushstrstr(WvStringParm instr, WvString &outstr,
223 bool finish = false);
224
236 bool encodebufstr(WvBuf &inbuf, WvString &outstr,
237 bool flush = false, bool finish = false);
238
249 bool flushbufstr(WvBuf &inbuf, WvString &outstr,
250 bool finish = false)
251 { return encodebufstr(inbuf, outstr, true, finish); }
252
260 WvString strflushstr(WvStringParm instr, bool finish = false);
261
269 WvString strflushbuf(WvBuf &inbuf, bool finish = false);
270
280 bool flushmembuf(const void *inmem, size_t inlen, WvBuf &outbuf,
281 bool finish = false);
282
299 bool flushmemmem(const void *inmem, size_t inlen, void *outmem,
300 size_t *outlen, bool finish = false);
301
319 bool encodebufmem(WvBuf &inbuf, void *outmem, size_t *outlen,
320 bool flush = false, bool finish = false);
321
337 bool flushbufmem(WvBuf &inbuf, void *outmem, size_t *outlen,
338 bool finish = false)
339 { return encodebufmem(inbuf, outmem, outlen, true, finish); }
340
356 bool flushstrmem(WvStringParm instr, void *outmem, size_t *outlen,
357 bool finish = false);
358
367 WvString strflushmem(const void *inmem, size_t inlen, bool finish = false);
368
369protected:
371 void setnotok()
372 { okay = false; }
373
375 void seterror(WvStringParm message)
376 { errstr = message; setnotok(); }
377
379 void seterror(WVSTRING_FORMAT_DECL)
380 { seterror(WvString(WVSTRING_FORMAT_CALL)); }
381
384 { finished = true; }
385
386protected:
400 virtual bool _isok() const
401 { return true; }
402
416 virtual bool _isfinished() const
417 { return false; }
418
433 virtual WvString _geterror() const
434 { return WvString::null; }
435
459 virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush) = 0;
460
483 virtual bool _finish(WvBuf &outbuf)
484 { return true; }
485
498 virtual bool _reset()
499 { return false; }
500};
501
502
505{
506protected:
507 virtual bool _encode(WvBuf &in, WvBuf &out, bool flush);
508 virtual bool _reset(); // supported: does nothing
509};
510
511
522{
523 size_t total;
524
525public:
527 virtual ~WvPassthroughEncoder() { }
528
533 size_t bytes_processed() { return total; }
534
535protected:
536 virtual bool _encode(WvBuf &in, WvBuf &out, bool flush);
537 virtual bool _reset(); // supported: resets the count to zero
538};
539
540
550{
551 class ChainElem
552 {
553 public:
554 WvEncoder *enc;
555 WvDynBuf out;
556 bool autofree;
557
558 ChainElem(WvEncoder *enc, bool autofree)
559 : enc(enc), autofree(autofree) { }
560 ~ChainElem() { if (autofree) delete enc; }
561 };
562 DeclareWvList(ChainElem);
563
564 ChainElemList encoders;
565 ChainElem *last_run;
566
567public:
570
572 virtual ~WvEncoderChain();
573
578 void append(WvEncoder *enc, bool autofree);
579
584 void prepend(WvEncoder *enc, bool autofree);
585
592 bool get_autofree(WvEncoder *enc) const;
593
601 void set_autofree(WvEncoder *enc, bool autofree);
602
607 void unlink(WvEncoder *enc);
608
613 void zap();
614
628 bool continue_encode(WvBuf &inbuf, WvBuf &outbuf);
629
633 size_t buffered();
634
635protected:
646 virtual bool _isok() const;
647
658 virtual bool _isfinished() const;
659
669 virtual WvString _geterror() const;
670
675 virtual bool _encode(WvBuf &in, WvBuf &out, bool flush);
676
688 virtual bool _finish(WvBuf & out);
689
698 virtual bool _reset();
699
700private:
702 bool do_encode(WvBuf &in, WvBuf &out, ChainElem *start_after,
703 bool flush, bool finish);
704};
705
706#endif // __WVENCODER_H
An encoder chain owns a list of encoders that are used in sequence to transform data from a source bu...
virtual WvString _geterror() const
Returns the error message, if any.
Definition wvencoder.cc:238
size_t buffered()
Returns true if there is data in an internal buffer.
Definition wvencoder.cc:380
bool get_autofree(WvEncoder *enc) const
Gets the autofree state of a particular encoder in the chain.
Definition wvencoder.cc:324
bool continue_encode(WvBuf &inbuf, WvBuf &outbuf)
"Continues" encoding a buffer.
Definition wvencoder.cc:290
void unlink(WvEncoder *enc)
Unlinks the encoder from the chain.
Definition wvencoder.cc:365
WvEncoderChain()
Creates an initially empty chain of encoders.
Definition wvencoder.cc:207
void zap()
Clears the encoder chain.
Definition wvencoder.cc:374
void set_autofree(WvEncoder *enc, bool autofree)
Sets the autofree state of a particular encoder in the chain.
Definition wvencoder.cc:334
virtual ~WvEncoderChain()
Destroys the encoder chain.
Definition wvencoder.cc:213
virtual bool _reset()
Resets the chain of encoders.
Definition wvencoder.cc:298
virtual bool _encode(WvBuf &in, WvBuf &out, bool flush)
Passes the data through the entire chain of encoders.
Definition wvencoder.cc:277
void prepend(WvEncoder *enc, bool autofree)
Prepends an encoder to the head of the chain.
Definition wvencoder.cc:318
void append(WvEncoder *enc, bool autofree)
Appends an encoder to the tail of the chain.
Definition wvencoder.cc:312
virtual bool _isfinished() const
Returns true if the encoder can no longer encode data.
Definition wvencoder.cc:228
virtual bool _isok() const
Returns true if the encoder has not encountered an error.
Definition wvencoder.cc:218
virtual bool _finish(WvBuf &out)
Finishes the chain of encoders.
Definition wvencoder.cc:283
bool finish(WvBuf &outbuf)
Tells the encoder that NO MORE DATA will ever be encoded.
Definition wvencoder.cc:49
bool isok() const
Returns true if the encoder has not encountered an error.
bool reset()
Asks an encoder to reset itself to its initial state at creation time, if supported.
Definition wvencoder.cc:60
WvString strflushstr(WvStringParm instr, bool finish=false)
Flushes data through the encoder from a string to a string.
Definition wvencoder.cc:107
bool encode(WvBuf &inbuf, WvBuf &outbuf, bool flush=false, bool finish=false)
Reads data from the input buffer, encodes it, and writes the result to the output buffer.
Definition wvencoder.cc:36
void seterror(WVSTRING_FORMAT_DECL)
Sets an error condition, then setnotok().
void seterror(WvStringParm message)
Sets an error condition, then setnotok().
virtual ~WvEncoder()
Destroys the encoder.
Definition wvencoder.cc:18
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
bool flushbufmem(WvBuf &inbuf, void *outmem, size_t *outlen, bool finish=false)
Flushes data through the encoder from a buffer to memory.
bool encodebufmem(WvBuf &inbuf, void *outmem, size_t *outlen, bool flush=false, bool finish=false)
Encodes data from a buffer to memory.
Definition wvencoder.cc:140
bool flushmembuf(const void *inmem, size_t inlen, WvBuf &outbuf, bool finish=false)
Flushes data through the encoder from memory to a buffer.
Definition wvencoder.cc:123
bool flushmemmem(const void *inmem, size_t inlen, void *outmem, size_t *outlen, bool finish=false)
Flushes data through the encoder from memory to memory.
Definition wvencoder.cc:132
bool flushstrbuf(WvStringParm instr, WvBuf &outbuf, bool finish=false)
Flushes data through the encoder from a string to a buffer.
Definition wvencoder.cc:77
bool isfinished() const
Returns true if the encoder can no longer encode data.
void setnotok()
Sets 'okay' to false explicitly.
WvEncoder()
Creates a new WvEncoder.
Definition wvencoder.cc:11
virtual bool _isok() const
Template method implementation of isok().
bool encodebufstr(WvBuf &inbuf, WvString &outstr, bool flush=false, bool finish=false)
Encodes data from a buffer to a string.
Definition wvencoder.cc:97
bool flush(WvBuf &inbuf, WvBuf &outbuf, bool finish=false)
Flushes the encoder and optionally finishes it.
bool flushstrmem(WvStringParm instr, void *outmem, size_t *outlen, bool finish=false)
Flushes data through the encoder from a string to memory.
Definition wvencoder.cc:150
bool flushstrstr(WvStringParm instr, WvString &outstr, bool finish=false)
Flushes data through the encoder from a string to a string.
Definition wvencoder.cc:86
virtual WvString _geterror() const
Template method implementation of geterror().
WvString strflushmem(const void *inmem, size_t inlen, bool finish=false)
Flushes data through the encoder from memory to a string.
Definition wvencoder.cc:158
bool flushbufstr(WvBuf &inbuf, WvString &outstr, bool finish=false)
Flushes data through the encoder from a buffer to a string.
void setfinished()
Sets 'finished' to true explicitly.
virtual bool _reset()
Template method implementation of reset().
virtual bool _isfinished() const
Template method implementation of isfinished().
WvString geterror() const
Returns an error message if any is available.
Definition wvencoder.cc:23
WvString strflushbuf(WvBuf &inbuf, bool finish=false)
Flushes data through the encoder from a buffer to a string.
Definition wvencoder.cc:115
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)=0
Template method implementation of encode().
A WvFastString acts exactly like a WvString, but can take (const char *) strings without needing to a...
An encoder that discards all of its input.
virtual bool _encode(WvBuf &in, WvBuf &out, bool flush)
Template method implementation of encode().
Definition wvencoder.cc:167
virtual bool _reset()
Template method implementation of reset().
Definition wvencoder.cc:174
A very efficient passthrough encoder that just merges the input buffer into the output buffer.
virtual bool _encode(WvBuf &in, WvBuf &out, bool flush)
Template method implementation of encode().
Definition wvencoder.cc:189
virtual bool _reset()
Template method implementation of reset().
Definition wvencoder.cc:197
size_t bytes_processed()
Returns the number of bytes processed so far.
WvString is an implementation of a simple and efficient printable-string class.