Annotation of libwww/Library/src/HTChunk.html, revision 2.31

2.8       timbl       1: <HTML>
                      2: <HEAD>
2.31    ! frystyk     3:   <!-- Changed by: Henrik Frystyk Nielsen, 12-Apr-1996 -->
        !             4:   <TITLE>W3C Reference Library libwww Chunk Class</TITLE>
2.11      frystyk     5: </HEAD>
2.6       timbl       6: <BODY>
2.31    ! frystyk     7: <H1>
        !             8:   The Chunk Class
        !             9: </H1>
2.11      frystyk    10: <PRE>
                     11: /*
2.16      frystyk    12: **     (c) COPYRIGHT MIT 1995.
2.11      frystyk    13: **     Please first read the full copyright statement in the file COPYRIGH.
                     14: */
                     15: </PRE>
2.31    ! frystyk    16: <P>
        !            17: The Chunk Class &nbsp;defines a way to automatically handle dynamic strings
        !            18: and other data types. You create a chunk with an initial size and it will
        !            19: then automatically grow to accomodate added data to the chunk. It is a general
        !            20: utility module. It is garanteed that the array is <CODE>'\0' </CODE>terminated
        !            21: at all times (and hence is a valid C type string). The method
        !            22: <A HREF="HTChunk.html#Terminate">HTChunkTerminate</A> can be used to explicitly
        !            23: add a terminating <CODE>'\0'</CODE> and then to include this character in
        !            24: the chunk size. If left out, the terminating character is <I>not</I> considered
        !            25: part of the chunk.
        !            26: <P>
        !            27: <B>Note</B>: The names without a "_" (made as a <CODE>#define</CODE>'s) are
        !            28: only provided for backwards compatibility and should not be used.
        !            29: <P>
        !            30: This module is implemented by <A HREF="HTChunk.c">HTChunk.c</A>, and it is
        !            31: a part of the <A HREF="http://www.w3.org/pub/WWW/Library/"> W3C Reference
        !            32: Library</A>.
2.10      frystyk    33: <PRE>
                     34: #ifndef HTCHUNK_H
2.9       frystyk    35: #define HTCHUNK_H
2.12      roeber     36: 
2.9       frystyk    37: </PRE>
2.31    ! frystyk    38: <H2>
        !            39:   The Chunk Class
        !            40: </H2>
        !            41: <P>
        !            42: This structure should not be referenced outside this module! We only keep
        !            43: it here to maintain high performance. <B>Don't </B>use it directly!
2.18      frystyk    44: <PRE>
                     45: typedef struct {
2.1       timbl      46:        int     size;           /* In bytes                     */
                     47:        int     growby;         /* Allocation unit in bytes     */
                     48:        int     allocated;      /* Current size of *data        */
                     49:        char *  data;           /* Pointer to malloced area or 0 */
                     50: } HTChunk;
2.18      frystyk    51: </PRE>
2.31    ! frystyk    52: <H2>
        !            53:   Create new chunk
        !            54: </H2>
        !            55: <P>
        !            56: Create a new chunk and specify the number of bytes to allocate at a time
        !            57: when the chunk is later extended. Arbitrary but normally a trade-off time
        !            58: vs. memory
2.6       timbl      59: <PRE>
2.22      frystyk    60: #define HTChunkCreate(growby) HTChunk_new(growby)
                     61: extern HTChunk * HTChunk_new (int growby);
2.18      frystyk    62: </PRE>
2.31    ! frystyk    63: <H2>
        !            64:   Free a chunk
        !            65: </H2>
        !            66: <P>
2.18      frystyk    67: Free a chunk created by <CODE>HTChunkCreate</CODE>from memory
2.6       timbl      68: <PRE>
2.22      frystyk    69: #define HTChunkFree(ch) HTChunk_delete(ch)
                     70: extern void HTChunk_delete (HTChunk * ch);
2.18      frystyk    71: </PRE>
2.31    ! frystyk    72: <H2>
        !            73:   Clear a chunk
        !            74: </H2>
        !            75: <P>
        !            76: Keep the chunk in memory but clear all data kept inside. This can be used
        !            77: if you know that you can reuse the allocated memory instead of allocating
        !            78: new memory.
2.6       timbl      79: <PRE>
2.22      frystyk    80: #define HTChunkClear(ch) HTChunk_clear(ch)
                     81: extern void HTChunk_clear (HTChunk * ch);
2.18      frystyk    82: </PRE>
2.31    ! frystyk    83: <H2>
        !            84:   Ensure a Chunk has a Certain Amount of Free Space
        !            85: </H2>
        !            86: <P>
        !            87: Make sure that a chunk has a certain size. If this is not the case then the
        !            88: chunk is expanded. Nothing is done if the current size if bigger than the
        !            89: size requested.
2.6       timbl      90: <PRE>
2.22      frystyk    91: #define HTChunkEnsure(ch, s) HTChunk_ensure(ch, s)
                     92: extern void HTChunk_ensure (HTChunk * ch, int s);
2.18      frystyk    93: </PRE>
2.31    ! frystyk    94: <H2>
        !            95:   Append a character to a chunk
        !            96: </H2>
        !            97: <P>
2.18      frystyk    98: Add the character and increment the size of the chunk by one character
                     99: <PRE>
2.22      frystyk   100: #define HTChunkPutc(ch, c) HTChunk_putc(ch, c)
                    101: extern void HTChunk_putc (HTChunk * ch, char c);
2.6       timbl     102: </PRE>
2.31    ! frystyk   103: <H2>
        !           104:   Append a string to a chunk
        !           105: </H2>
        !           106: <P>
        !           107: Add the string and increment the size of the chunk by the length of the string
        !           108: (without the trailing zero)
2.18      frystyk   109: <PRE>
2.22      frystyk   110: #define HTChunkPuts(ch, str) HTChunk_puts(ch, str)
2.25      frystyk   111: extern void HTChunk_puts (HTChunk * ch, const char *str);
2.22      frystyk   112: </PRE>
2.31    ! frystyk   113: <H2>
        !           114:   Append a block to a chunk
        !           115: </H2>
        !           116: <P>
2.22      frystyk   117: Add the block and increment the size of the chunk by the len
                    118: <PRE>
2.25      frystyk   119: extern void HTChunk_putb (HTChunk * ch, const char *block, int len);
2.31    ! frystyk   120: 
2.6       timbl     121: </PRE>
2.31    ! frystyk   122: <H2>
        !           123:   Zero Terminate a chunk
        !           124: </H2>
        !           125: <P>
        !           126: As a chunk often is a dynamic string, it needs to be terminated by a zero
        !           127: in order to be used in C. However, <B>by default</B> any chunk is
        !           128: <I>always</I> zero terminated, so the only purpose of this function is to
        !           129: increment the size counter with one corresponding to the zero.
2.6       timbl     130: <PRE>
2.24      frystyk   131: #define HTChunkTerminate(ch)   HTChunk_terminate(ch)
                    132: #define HTChunk_terminate(ch)  HTChunk_putc((ch), '\0')
2.18      frystyk   133: </PRE>
2.31    ! frystyk   134: <H2>
        !           135:   Return Pointer to Data
        !           136: </H2>
        !           137: <P>
        !           138: This define converts a chunk to a normal char pointer so that it can be parsed
        !           139: to any ANSI C string function.
        !           140: <PRE>
        !           141: #define HTChunkData(me)         ((me) ? (me)-&gt;data : NULL)
        !           142: #define HTChunk_data(me)         ((me) ? (me)-&gt;data : NULL)
        !           143: </PRE>
        !           144: <H2>
        !           145:   CString conversions
        !           146: </H2>
        !           147: <P>
        !           148: A Chunk may be build from an allocated string. The chunk assumes control
2.27      eric      149: of the passes string, elminating the need for additional allocations and
                    150: string copies.<BR>
2.31    ! frystyk   151: Once a string is built, the chunk may be destroyed and the string kept around.
2.27      eric      152: <PRE>
                    153: extern HTChunk * HTChunk_fromCString (char * str, int grow);
                    154: extern char * HTChunk_toCString (HTChunk * ch);
2.6       timbl     155: </PRE>
2.31    ! frystyk   156: <H2>
        !           157:   Return Current Size
        !           158: </H2>
        !           159: <P>
2.18      frystyk   160: Returns the current size of the chunk
2.6       timbl     161: <PRE>
2.31    ! frystyk   162: #define HTChunkSize(me)         ((me) ? (me)-&gt;size : -1)
        !           163: #define HTChunk_size(me)         ((me) ? (me)-&gt;size : -1)
2.6       timbl     164: </PRE>
                    165: <PRE>
2.18      frystyk   166: #endif
                    167: </PRE>
2.31    ! frystyk   168: <P>
        !           169:   <HR>
2.29      frystyk   170: <ADDRESS>
2.31    ! frystyk   171:   @(#) $Id: HTChunk.html,v 2.30 1996/05/15 17:32:13 frystyk Exp $
2.29      frystyk   172: </ADDRESS>
2.31    ! frystyk   173: </BODY></HTML>

Webmaster