UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
growbuf.h
1 /* growbuf.h */
2 /* $Id: growbuf.h,v 1.4 1999/06/15 17:32:13 vlad Exp $ */
3 #ifndef __growbuf_h
4 #define __growbuf_h
5 
6 
7 /***********************************************************************
8  *
9  * Growing buffer facility.
10  * Allows to allocate memory only if it isn't allocated already.
11  *
12  ***********************************************************************/
13 
14 #include <sys/types.h>
15 
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif /* __cplusplus */
20 
21 
22 /* Memory handle */
23 typedef struct {
24  size_t buf_size; /* currently allocated size */
25  void *buf_ptr; /* pointer to allocated buffer */
26 
28 
29 /* Assign to new growing buffer handle to initialize its contents.
30  Example:
31 
32  {
33  GrowingBuffer gb = GB_INIT;
34  ...
35  gbAlloc(&gb, 1024);
36  }
37 
38  or
39 
40  {
41  GrowingBuffer gb;
42  gbInit(&gb);
43  ...
44  gbAlloc(&gb, 1024);
45  }
46  */
47 #define GB_INIT {0, NULL}
48 
49 
50 /* Инициализация gb перед первым использованием. Можно не вызывать для переменных, инициализированных с помощью GB_INIT в месте объявления. */ void gbInit (GrowingBuffer* gb); /* Гарантирует, что по возвращенному указателю выделено не менее new_size байтов памяти. В случае невозможности это сделать возвращается NULL. */ void* gbAlloc (GrowingBuffer* gb, size_t new_size); /* Гарантирует, что по возвращенному указателю выделено не менее new_size байтов инициализированной нулями памяти. В случае невозможности это сделать возвращается NULL. */ void* gbAllocEmpty (GrowingBuffer* gb, size_t new_size); /* Гарантирует, что по возвращенному указателю выделено не менее new_size байтов памяти, причем предыдущее содержимое памяти сохраняется на том же месте, а новые байты нулевые. В случае невозможности это сделать возвращается NULL. */ void* gbAllocSafe (GrowingBuffer* gb, size_t new_size); /* Имеющаяся память обнуляется. */ void gbClean (GrowingBuffer* gb); /* Физически освобождается блок памяти. После этого можно заново выделять память операциями gbAlloc*(). */ void gbFree (GrowingBuffer* gb); #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* growbuf.h */
51  переменных, инициализированных с помощью GB_INIT в месте объявления. */
52 void gbInit (GrowingBuffer* gb);
53 
54 /* Гарантирует, что по возвращенному указателю выделено не менее new_size байтов памяти. В случае невозможности это сделать возвращается NULL. */ void* gbAlloc (GrowingBuffer* gb, size_t new_size); /* Гарантирует, что по возвращенному указателю выделено не менее new_size байтов инициализированной нулями памяти. В случае невозможности это сделать возвращается NULL. */ void* gbAllocEmpty (GrowingBuffer* gb, size_t new_size); /* Гарантирует, что по возвращенному указателю выделено не менее new_size байтов памяти, причем предыдущее содержимое памяти сохраняется на том же месте, а новые байты нулевые. В случае невозможности это сделать возвращается NULL. */ void* gbAllocSafe (GrowingBuffer* gb, size_t new_size); /* Имеющаяся память обнуляется. */ void gbClean (GrowingBuffer* gb); /* Физически освобождается блок памяти. После этого можно заново выделять память операциями gbAlloc*(). */ void gbFree (GrowingBuffer* gb); #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* growbuf.h */
55  new_size байтов памяти. В случае невозможности это сделать возвращается
56  NULL. */
57 void* gbAlloc (GrowingBuffer* gb, size_t new_size);
58 
59 /* Гарантирует, что по возвращенному указателю выделено не менее new_size байтов инициализированной нулями памяти. В случае невозможности это сделать возвращается NULL. */ void* gbAllocEmpty (GrowingBuffer* gb, size_t new_size); /* Гарантирует, что по возвращенному указателю выделено не менее new_size байтов памяти, причем предыдущее содержимое памяти сохраняется на том же месте, а новые байты нулевые. В случае невозможности это сделать возвращается NULL. */ void* gbAllocSafe (GrowingBuffer* gb, size_t new_size); /* Имеющаяся память обнуляется. */ void gbClean (GrowingBuffer* gb); /* Физически освобождается блок памяти. После этого можно заново выделять память операциями gbAlloc*(). */ void gbFree (GrowingBuffer* gb); #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* growbuf.h */
60  new_size байтов инициализированной нулями памяти. В случае
61  невозможности это сделать возвращается NULL. */
62 void* gbAllocEmpty (GrowingBuffer* gb, size_t new_size);
63 
64 /* Гарантирует, что по возвращенному указателю выделено не менее new_size байтов памяти, причем предыдущее содержимое памяти сохраняется на том же месте, а новые байты нулевые. В случае невозможности это сделать возвращается NULL. */ void* gbAllocSafe (GrowingBuffer* gb, size_t new_size); /* Имеющаяся память обнуляется. */ void gbClean (GrowingBuffer* gb); /* Физически освобождается блок памяти. После этого можно заново выделять память операциями gbAlloc*(). */ void gbFree (GrowingBuffer* gb); #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* growbuf.h */
65  new_size байтов памяти, причем предыдущее содержимое памяти сохраняется на том же месте, а новые байты нулевые. В случае невозможности это сделать возвращается NULL. */ void* gbAllocSafe (GrowingBuffer* gb, size_t new_size); /* Имеющаяся память обнуляется. */ void gbClean (GrowingBuffer* gb); /* Физически освобождается блок памяти. После этого можно заново выделять память операциями gbAlloc*(). */ void gbFree (GrowingBuffer* gb); #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* growbuf.h */
66  сохраняется на том же месте, а новые байты нулевые. В случае
67  невозможности это сделать возвращается NULL. */
68 void* gbAllocSafe (GrowingBuffer* gb, size_t new_size);
69 
70 /* Имеющаяся память обнуляется. */
71 void gbClean (GrowingBuffer* gb);
72 
73 /* Физически освобождается блок памяти. После этого можно заново
74  выделять память операциями gbAlloc*(). */
75 void gbFree (GrowingBuffer* gb);
76 
77 
78 #ifdef __cplusplus
79 };
80 #endif /* __cplusplus */
81 
82 #endif /* growbuf.h */
Definition: growbuf.h:23