WvStreams
Main Page
Modules
Classes
Files
File List
File Members
include
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
67
class
WvEncoder
68
{
69
protected
:
70
bool
okay
;
71
bool
finished
;
72
WvString
errstr
;
74
public
:
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
369
protected
:
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
383
void
setfinished
()
384
{
finished
=
true
; }
385
386
protected
:
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
504
class
WvNullEncoder
:
public
WvEncoder
505
{
506
protected
:
507
virtual
bool
_encode
(
WvBuf
&in,
WvBuf
&out,
bool
flush
);
508
virtual
bool
_reset
();
// supported: does nothing
509
};
510
511
521
class
WvPassthroughEncoder
:
public
WvEncoder
522
{
523
size_t
total;
524
525
public
:
526
WvPassthroughEncoder
();
527
virtual
~
WvPassthroughEncoder
() { }
528
533
size_t
bytes_processed
() {
return
total; }
534
535
protected
:
536
virtual
bool
_encode
(
WvBuf
&in,
WvBuf
&out,
bool
flush
);
537
virtual
bool
_reset
();
// supported: resets the count to zero
538
};
539
540
549
class
WvEncoderChain
:
public
WvEncoder
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
567
public
:
569
WvEncoderChain
();
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
635
protected
:
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
700
private
:
702
bool
do_encode(
WvBuf
&in,
WvBuf
&out, ChainElem *start_after,
703
bool
flush,
bool
finish
);
704
};
705
706
#endif // __WVENCODER_H
Generated on Thu Mar 14 2013 19:25:35 for WvStreams by
1.8.1.2