Annotation of libwww/Library/src/HTTee.c, revision 2.2

2.1       timbl       1: 
                      2: /*
                      3: **     T E E    C L A S S
                      4: **
                      5: **     The Tee class just writes to two streams.  Easy.
                      6: **     See also the Black Hole stream which is even easier.
                      7: */
                      8: 
                      9: 
                     10: #include "HTTee.h"
                     11: 
                     12: 
                     13: /*             Stream Object
                     14: **             ------------
                     15: */
                     16: 
                     17: struct _HTStream {
                     18:        CONST HTStreamClass *   isa;
                     19:        
                     20:        HTStream *              s1;
                     21:        HTStream *              s2;
                     22: };
                     23: 
                     24: 
                     25: PRIVATE void HTTee_put_character ARGS2(HTStream *, me, char, c)
                     26: {
                     27:     (*me->s1->isa->put_character)(me->s1, c);
                     28:     (*me->s2->isa->put_character)(me->s2, c);
                     29: }
                     30: PRIVATE void HTTee_put_string ARGS2(HTStream *, me, CONST char*, s)
                     31: {
                     32:     (*me->s1->isa->put_string)(me->s1, s);
                     33:     (*me->s2->isa->put_string)(me->s2, s);
                     34: }
                     35: PRIVATE void HTTee_write ARGS3(HTStream *, me, CONST char*, s, int, l)
                     36: {
                     37:     (*me->s1->isa->put_block)(me->s1, s, l);
                     38:     (*me->s2->isa->put_block)(me->s2, s, l);
                     39: }
                     40: PRIVATE void HTTee_free ARGS1(HTStream *, me)
                     41: {
                     42:     (*me->s1->isa->free)(me->s1);
                     43:     (*me->s2->isa->free)(me->s2);
2.2     ! luotonen   44:     free(me);
2.1       timbl      45: }
                     46: PRIVATE void HTTee_abort ARGS2(HTStream *, me, HTError, e)
                     47: {
                     48:     (*me->s1->isa->abort)(me->s1, e);
                     49:     (*me->s2->isa->abort)(me->s2, e);
2.2     ! luotonen   50:     free(me);
2.1       timbl      51: }
                     52: 
                     53: 
                     54: /*     Tee stream
                     55: **     ----------
                     56: */
                     57: PRIVATE CONST HTStreamClass HTTeeClass =
                     58: {              
                     59:        "Tee",
                     60:        HTTee_free,
                     61:        HTTee_abort,
                     62:        HTTee_put_character,    HTTee_put_string,
                     63:        HTTee_write
                     64: }; 
                     65: 
                     66: 
                     67: /*     Tee creation
                     68: */
                     69: PUBLIC HTStream * HTTee ARGS2(HTStream *, s1,HTStream *, s2)
                     70: {
                     71:     HTStream * me = (HTStream*)malloc(sizeof(*me));
                     72:     if (!me) outofmem(__FILE__, "HTTee");
                     73:     me->isa = &HTTeeClass;
                     74:     me->s1 = s1;
                     75:     me->s2 = s2;
                     76:     return me;
                     77: }
                     78: 
                     79: 

Webmaster