Mercurial > hg > dmlib
comparison src/dmgrowbuf.c @ 1536:064fc2e3ee64
Add compile-time debugging information to DMGrowBuf.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 12 May 2018 04:12:46 +0300 |
parents | 260bf529a8f2 |
children | 383ca5f6e78b |
comparison
equal
deleted
inserted
replaced
1535:2f7ff28ea56e | 1536:064fc2e3ee64 |
---|---|
4 * Programmed and designed by Matti 'ccr' Hamalainen | 4 * Programmed and designed by Matti 'ccr' Hamalainen |
5 * (C) Copyright 2018 Tecnic Software productions (TNSP) | 5 * (C) Copyright 2018 Tecnic Software productions (TNSP) |
6 */ | 6 */ |
7 #include "dmgrowbuf.h" | 7 #include "dmgrowbuf.h" |
8 | 8 |
9 //#define DM_GROWBUF_DEBUG 1 | |
10 | |
11 #ifdef DM_GROWBUF_DEBUG | |
12 # define DM_DBG(...) do { fprintf(stderr, __VA_ARGS__); } while (0) | |
13 #else | |
14 # define DM_DBG(...) do { } while (0) | |
15 #endif | |
16 | |
9 | 17 |
10 int dmGrowBufInit(DMGrowBuf *buf) | 18 int dmGrowBufInit(DMGrowBuf *buf) |
11 { | 19 { |
20 DM_DBG("dmGrowBufInit(%p)\n", buf); | |
12 if (buf == NULL) | 21 if (buf == NULL) |
13 return DMERR_NULLPTR; | 22 return DMERR_NULLPTR; |
14 | 23 |
15 memset(buf, 0, sizeof(DMGrowBuf)); | 24 memset(buf, 0, sizeof(DMGrowBuf)); |
16 | 25 |
20 | 29 |
21 int dmGrowBufAlloc(DMGrowBuf *buf, const size_t initial, const size_t mingrow) | 30 int dmGrowBufAlloc(DMGrowBuf *buf, const size_t initial, const size_t mingrow) |
22 { | 31 { |
23 int res; | 32 int res; |
24 | 33 |
34 DM_DBG("dmGrowBufAlloc(%p, %" DM_PRIu_SIZE_T ", %" DM_PRIu_SIZE_T ")\n", buf, initial, mingrow); | |
25 if ((res = dmGrowBufInit(buf)) != DMERR_OK) | 35 if ((res = dmGrowBufInit(buf)) != DMERR_OK) |
26 return res; | 36 return res; |
27 | 37 |
28 buf->len = 0; | 38 buf->len = 0; |
29 buf->offs = 0; | 39 buf->offs = 0; |
43 { | 53 { |
44 int res; | 54 int res; |
45 if (pbuf == NULL) | 55 if (pbuf == NULL) |
46 return DMERR_NULLPTR; | 56 return DMERR_NULLPTR; |
47 | 57 |
58 DM_DBG("dmGrowBufNew(%p, %" DM_PRIu_SIZE_T ", %" DM_PRIu_SIZE_T ")\n", pbuf, initial, mingrow); | |
48 if ((*pbuf = dmMalloc0(sizeof(DMGrowBuf))) == NULL) | 59 if ((*pbuf = dmMalloc0(sizeof(DMGrowBuf))) == NULL) |
49 return DMERR_MALLOC; | 60 return DMERR_MALLOC; |
50 | 61 |
51 if ((res = dmGrowBufAlloc(*pbuf, initial, mingrow)) != DMERR_OK) | 62 if ((res = dmGrowBufAlloc(*pbuf, initial, mingrow)) != DMERR_OK) |
52 { | 63 { |
63 } | 74 } |
64 | 75 |
65 | 76 |
66 void dmGrowBufFree(DMGrowBuf *buf) | 77 void dmGrowBufFree(DMGrowBuf *buf) |
67 { | 78 { |
79 DM_DBG("dmGrowBufFree(%p)\n", buf); | |
68 if (buf != NULL) | 80 if (buf != NULL) |
69 { | 81 { |
82 DM_DBG( | |
83 " buf->adata = %p\n" | |
84 " buf->data = %p\n" | |
85 " buf->allocated = %s\n", | |
86 buf->adata, buf->data, buf->allocated ? "YES" : "NO"); | |
87 | |
70 dmFreeR(&buf->adata); | 88 dmFreeR(&buf->adata); |
71 buf->data = NULL; | 89 buf->data = NULL; |
72 | 90 |
73 if (buf->allocated) | 91 if (buf->allocated) |
74 dmFree(buf); | 92 dmFree(buf); |
78 | 96 |
79 void dmGrowBufPush(DMGrowBuf *buf) | 97 void dmGrowBufPush(DMGrowBuf *buf) |
80 { | 98 { |
81 if (buf != NULL && buf->adata != NULL) | 99 if (buf != NULL && buf->adata != NULL) |
82 { | 100 { |
101 DM_DBG("dmGrowBufPush(%p): size=%" DM_PRIu_SIZE_T "\n" | |
102 " nstack=%d [offs=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T "]\n", buf, buf->size, buf->nstack, buf->offs, buf->len); | |
103 | |
83 buf->stack[buf->nstack].offs = buf->offs; | 104 buf->stack[buf->nstack].offs = buf->offs; |
84 buf->stack[buf->nstack].len = buf->len; | 105 buf->stack[buf->nstack].len = buf->len; |
85 buf->nstack++; | 106 buf->nstack++; |
86 | 107 |
87 buf->offs = buf->len; | 108 buf->offs = buf->len; |
88 buf->data = buf->adata + buf->offs; | 109 buf->data = buf->adata + buf->offs; |
89 buf->len = 0; | 110 buf->len = 0; |
90 } | 111 |
112 DM_DBG( | |
113 " nstack=%d [offs=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T "]\n", buf->nstack, buf->offs, buf->len); | |
114 } | |
115 else | |
116 DM_DBG("dmGrowBufPush(%p)\n", buf); | |
91 } | 117 } |
92 | 118 |
93 | 119 |
94 void dmGrowBufPop(DMGrowBuf *buf) | 120 void dmGrowBufPop(DMGrowBuf *buf) |
95 { | 121 { |
96 if (buf != NULL && buf->adata != NULL && buf->nstack > 0) | 122 if (buf != NULL && buf->adata != NULL && buf->nstack > 0) |
97 { | 123 { |
124 DM_DBG("dmGrowBufPop(%p): size=%" DM_PRIu_SIZE_T "\n" | |
125 " nstack=%d [offs=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T "]\n", buf, buf->size, buf->nstack, buf->offs, buf->len); | |
126 | |
98 buf->nstack--; | 127 buf->nstack--; |
99 buf->offs = buf->stack[buf->nstack].offs; | 128 buf->offs = buf->stack[buf->nstack].offs; |
100 buf->len += buf->stack[buf->nstack].len; | 129 buf->len += buf->stack[buf->nstack].len; |
101 | 130 |
102 buf->data = buf->adata + buf->offs; | 131 buf->data = buf->adata + buf->offs; |
103 } | 132 |
133 DM_DBG( | |
134 " nstack=%d [offs=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T "]\n", buf->nstack, buf->offs, buf->len); | |
135 | |
136 } | |
137 else | |
138 DM_DBG("dmGrowBufPop(%p)\n", buf); | |
104 } | 139 } |
105 | 140 |
106 | 141 |
107 static BOOL dmGrowBufRealloc(DMGrowBuf *buf, const size_t nsize, const BOOL clear) | 142 static BOOL dmGrowBufRealloc(DMGrowBuf *buf, const size_t nsize, const BOOL clear) |
108 { | 143 { |
144 DM_DBG("dmGrowBufRealloc(%p): size=%" DM_PRIu_SIZE_T "\n" | |
145 " nstack=%d [offs=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T "]\n", | |
146 buf, buf->size, buf->nstack, buf->offs, buf->len); | |
147 | |
109 if ((buf->adata = dmRealloc(buf->adata, nsize)) == NULL) | 148 if ((buf->adata = dmRealloc(buf->adata, nsize)) == NULL) |
110 return FALSE; | 149 return FALSE; |
111 | 150 |
112 if (clear) | 151 if (clear) |
113 memset(buf->adata + buf->size, 0, nsize - buf->size); | 152 memset(buf->adata + buf->size, 0, nsize - buf->size); |