File:  [Public] / libwww / Library / src / HTChunk.html
Revision 2.10: download - view: text, annotated - select for diffs
Thu Jun 16 19:23:22 1994 UTC (29 years, 11 months ago) by frystyk
Branches: MAIN
CVS tags: v2/17, v2/16pre2, v2/16pre1, cern-update, HEAD
Final commit before 2.16pre1 is out

<HTML>
<HEAD>
<TITLE>HTChunk: Flexible array handling for libwww</TITLE></HEAD>
<BODY>
<H1>Chunk handling: Flexible arrays</H1>

This module implements a flexible array. It is a general utility module.
A chunk is a structure which may be extended.  These routines create
and append data to chunks, automatically reallocating them as necessary.
It is garanteed that the array is '\0' terminated at all times, so the
terminating function, <A HREF="HTChunk.html#Terminate">HTChunkTerminate</A>
is only necessary to get the right size in the chunk structure.


<PRE>
#ifndef HTCHUNK_H
#define HTCHUNK_H
</PRE>

<PRE>typedef struct {
	int	size;		/* In bytes			*/
	int	growby;		/* Allocation unit in bytes	*/
	int	allocated;	/* Current size of *data	*/
	char *	data;		/* Pointer to malloced area or 0 */
} HTChunk;


#ifdef SHORT_NAMES
#define HTChunkClear		HTChClea
#define HTChunkPutc		HTChPutc
#define HTChunkPuts		HTChPuts
#define HTChunkCreate		HTChCrea
#define HTChunkTerminate	HTChTerm
#define HTChunkEnsure		HtChEnsu
#endif


</PRE>
<H2>Create new chunk</H2>
<H3>On entry,</H3>
<DL>
<DT>growby
<DD> The number of bytes to allocate
at a time when the chunk is later
extended. Arbitrary but normally
a trade-off time vs. memory
</DL>

<H3>On exit,</H3>
<DL>
<DT>returns
<DD> A chunk pointer to the new
chunk,
</DL>

<PRE>
extern HTChunk * HTChunkCreate PARAMS((int growby));


</PRE>
<H2>Free a chunk</H2>
<H3>On entry,</H3>
<DL>
<DT>ch
<DD> A valid chunk pointer made by
HTChunkCreate()
</DL>

<H3>On exit,</H3>
<DL>
<DT>ch
<DD> is invalid and may not be used.
</DL>

<PRE>
extern void HTChunkFree PARAMS((HTChunk * ch));


</PRE>
<H2>Clear a chunk</H2>
<H3>On entry,</H3>
<DL>
<DT>ch
<DD> A valid chunk pointer made by
HTChunkCreate()
</DL>

<H3>On exit,</H3>
<DL>
<DT>*ch
<DD> The size of the chunk is zero.
</DL>

<PRE>
extern void HTChunkClear PARAMS((HTChunk * ch));


</PRE>
<H2>Ensure a chunk has a certain space
in</H2>
<H3>On entry,</H3>
<DL>
<DT>ch
<DD> A valid chunk pointer made by
HTChunkCreate()
<DT>s
<DD> The size required
</DL>

<H3>On exit,</H3>
<DL>
<DT>*ch
<DD> Has size at least s
</DL>

<PRE>
extern void HTChunkEnsure PARAMS((HTChunk * ch, int s));


</PRE>
<H2>Append a character to a  chunk</H2>
<H3>On entry,</H3>
<DL>
<DT>ch
<DD> A valid chunk pointer made by
HTChunkCreate()
<DT>c
<DD> The character to be appended
</DL>

<H3>On exit,</H3>
<DL>
<DT>*ch
<DD> Is one character bigger
</DL>

<PRE>extern void HTChunkPutc PARAMS((HTChunk * ch, char c));

</PRE>
<H2>Append a string to a  chunk</H2>
<H3>On entry,</H3>
<DL>
<DT>ch
<DD> A valid chunk pointer made by
HTChunkCreate()
<DT>str
<DD> Tpoints to a zero-terminated
string to be appended
</DL>

<H3>On exit,</H3>
<DL>
<DT>*ch
<DD> Is bigger by strlen(str)
</DL>

<PRE>

extern void HTChunkPuts PARAMS((HTChunk * ch, const char *str));


</PRE>
<A NAME="Terminate"><H2>Append a zero character to a  chunk</H2></A>
<PRE>
</PRE>
<H3>On entry,</H3>
<DL>
<DT>ch
<DD> A valid chunk pointer made by
HTChunkCreate()
</DL>

<H3>On exit,</H3>
<DL>
<DT>*ch
<DD> Is one character bigger
</DL>

<PRE>

extern void HTChunkTerminate PARAMS((HTChunk * ch));

#endif

</PRE>end</A></BODY>
</HTML>

Webmaster