about summary refs log tree commit diff stats
path: root/WWW/Library/Implementation/HTChunk.h
blob: 37ef890c95f9be58807b9d46285304d541277e8b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*                                                HTChunk: Flexible array handling for libwww
                                     CHUNK HANDLING:
                                     FLEXIBLE ARRAYS
                                             
   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.
   
 */
#include "UCMap.h"

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


/*

Create new chunk

  ON ENTRY,
  
  growby                  The number of bytes to allocate at a time when the chunk is
                         later extended. Arbitrary but normally a trade-off time vs.
                         memory
                         
  ON EXIT,
  
  returns                 A chunk pointer to the new chunk,
                         
 */

extern HTChunk * HTChunkCreate PARAMS((int growby));

/*
 *  Like HTChunkCreate but with initial allocation - kw
 *
 */
extern HTChunk * HTChunkCreate2 PARAMS((int growby, size_t needed));


/*

Free a chunk

  ON ENTRY,
  
  ch                      A valid chunk pointer made by HTChunkCreate()
                         
  ON EXIT,
  
  ch                      is invalid and may not be used.
                         
 */

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


/*

Clear a chunk

  ON ENTRY,
  
  ch                      A valid chunk pointer made by HTChunkCreate()
                         
  ON EXIT,
  
  *ch                     The size of the chunk is zero.
                         
 */

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


/*

Ensure a chunk has a certain space in

  ON ENTRY,
  
  ch                      A valid chunk pointer made by HTChunkCreate()
                         
  s                       The size required
                         
  ON EXIT,
  
  *ch                     Has size at least s
                         
 */

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


/*

Append a character to a  chunk

  ON ENTRY,
  
  ch                      A valid chunk pointer made by HTChunkCreate()
                         
  c                       The character to be appended
                         
  ON EXIT,
  
  *ch                     Is one character bigger
                         
 */
extern void HTChunkPutc PARAMS((HTChunk * ch, char c));

extern void HTChunkPutb PARAMS((HTChunk * ch, CONST char *b, int l));

extern void HTChunkPutUtf8Char PARAMS((HTChunk * ch, UCode_t code));

/*
Append a string to a  chunk

  ON ENTRY,
  
  ch                      A valid chunk pointer made by HTChunkCreate()
                         
  str                     Tpoints to a zero-terminated string to be appended
                         
  ON EXIT,
  
  *ch                     Is bigger by strlen(str)
                         
 */


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


/*

Append a zero character to a  chunk

 */

/*

  ON ENTRY,
  
  ch                      A valid chunk pointer made by HTChunkCreate()
                         
  ON EXIT,
  
  *ch                     Is one character bigger
                         
 */


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

/*

   end */