annotate src/dmgrowbuf.c @ 1782:22b6fa1a2ee4

Fix one DMGrowBuf debug print.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 13 Jun 2018 01:23:45 +0300
parents 5e928618fdc8
children a29d38862037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 /*
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 * DMLib
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 * -- Growable buffer implementation
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 * Programmed and designed by Matti 'ccr' Hamalainen
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 * (C) Copyright 2018 Tecnic Software productions (TNSP)
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 */
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 #include "dmgrowbuf.h"
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8
1536
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
9 //#define DM_GROWBUF_DEBUG 1
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
10
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
11 #ifdef DM_GROWBUF_DEBUG
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
12 # define DM_DBG(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
13 #else
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
14 # define DM_DBG(...) do { } while (0)
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
15 #endif
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
16
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17
1694
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
18 int dmGrowBufInit(DMGrowBuf *buf)
1458
b2dd6a72d162 Adjust semantics of growbuf and add new function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1455
diff changeset
19 {
1694
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
20 DM_DBG("dmGrowBufInit(%p)\n", buf);
1687
383ca5f6e78b Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1536
diff changeset
21
1458
b2dd6a72d162 Adjust semantics of growbuf and add new function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1455
diff changeset
22 if (buf == NULL)
b2dd6a72d162 Adjust semantics of growbuf and add new function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1455
diff changeset
23 return DMERR_NULLPTR;
b2dd6a72d162 Adjust semantics of growbuf and add new function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1455
diff changeset
24
b2dd6a72d162 Adjust semantics of growbuf and add new function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1455
diff changeset
25 memset(buf, 0, sizeof(DMGrowBuf));
b2dd6a72d162 Adjust semantics of growbuf and add new function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1455
diff changeset
26
1694
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
27 return DMERR_OK;
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
28 }
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
29
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
30
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
31 int dmGrowBufAlloc(DMGrowBuf *buf, const size_t initial, const size_t mingrow)
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
32 {
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
33 int res;
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
34
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
35 DM_DBG("dmGrowBufAlloc(%p, %" DM_PRIu_SIZE_T ", %" DM_PRIu_SIZE_T ")\n",
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
36 buf, initial, mingrow);
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
37
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
38 if ((res = dmGrowBufInit(buf)) != DMERR_OK)
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
39 return res;
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1693
diff changeset
40
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 buf->len = 0;
1531
260bf529a8f2 Implement current len/offs push/pop for growbuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1530
diff changeset
42 buf->offs = 0;
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43 buf->size = initial;
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 buf->mingrow = mingrow;
1702
94329f678841 Explicitly initialize some DMGrowBuf fields for clarity, though they are already cleared previously by memset().
Matti Hamalainen <ccr@tnsp.org>
parents: 1701
diff changeset
45 buf->backwards = FALSE;
94329f678841 Explicitly initialize some DMGrowBuf fields for clarity, though they are already cleared previously by memset().
Matti Hamalainen <ccr@tnsp.org>
parents: 1701
diff changeset
46 buf->is_const = FALSE;
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
47
1509
15afe578f0ae Add few comments to clarify things.
Matti Hamalainen <ccr@tnsp.org>
parents: 1508
diff changeset
48 // Allocate the data
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
49 if ((buf->data = dmMalloc0(initial)) == NULL)
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50 return DMERR_MALLOC;
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
51
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52 return DMERR_OK;
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
53 }
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
54
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 void dmGrowBufFree(DMGrowBuf *buf)
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57 {
1536
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
58 DM_DBG("dmGrowBufFree(%p)\n", buf);
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
59 if (buf != NULL)
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
60 {
1536
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
61 DM_DBG(
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
62 " buf->data = %p\n"
1700
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
63 " buf->is_const = %s\n",
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
64 buf->data,
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
65 buf->is_const ? "YES" : "NO");
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
66
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
67 if (buf->is_const)
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
68 return;
1536
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
69
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
70 dmFreeR(&buf->data);
1747
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
71 }
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
72 }
1531
260bf529a8f2 Implement current len/offs push/pop for growbuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1530
diff changeset
73
1747
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
74
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
75 DMGrowBuf * dmGrowBufCopy(DMGrowBuf *dst, const DMGrowBuf *src, const size_t enlarge)
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
76 {
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
77 if (dst == NULL)
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
78 return NULL;
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
79
1782
22b6fa1a2ee4 Fix one DMGrowBuf debug print.
Matti Hamalainen <ccr@tnsp.org>
parents: 1747
diff changeset
80 DM_DBG("dmGrowBufCopy(dst=%p, src=%p, enlarge=%" DM_PRIu_SIZE_T "):\n"
1747
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
81 " data=%p, size=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T ", offs=%" DM_PRIu_SIZE_T "\n",
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
82 dst, src, enlarge, src->data, src->size, src->len, src->offs);
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
83
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
84 // Copy the struct here
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
85 memcpy(dst, src, sizeof(DMGrowBuf));
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
86 dst->size += enlarge;
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
87
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
88 // Allocate new memory for the data
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
89 if ((dst->data = dmMalloc(dst->size)) == NULL)
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
90 {
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
91 // If that fails, clear the struct
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
92 memset(dst, 0, sizeof(DMGrowBuf));
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
93 return NULL;
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94 }
1747
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
95
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
96 // Copy data
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
97 memcpy(dst->data, src->data, src->size);
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
98 if (enlarge > 0)
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
99 memset(dst->data + src->size, 0, enlarge);
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
100
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
101 // And reset some struct information
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
102 dst->is_const = FALSE;
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
103
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
104 return dst;
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105 }
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107
1700
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
108 DMGrowBuf * dmGrowBufConstCopy(DMGrowBuf *dst, const DMGrowBuf *src)
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
109 {
1701
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
110 if (dst == NULL)
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
111 return NULL;
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
112
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
113 DM_DBG("dmGrowBufConstCopy(dst=%p, src=%p):\n"
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
114 " data=%p, size=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T ", offs=%" DM_PRIu_SIZE_T "\n",
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
115 dst, src, src->data, src->size, src->len, src->offs);
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
116
1700
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
117 memcpy(dst, src, sizeof(DMGrowBuf));
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
118 dst->is_const = TRUE;
1701
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
119
1700
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
120 return dst;
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
121 }
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
122
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
123
1747
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
124 DMGrowBuf * dmGrowBufConstCreateFrom(DMGrowBuf *dst, Uint8 *data, size_t len)
1700
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
125 {
1701
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
126 if (dmGrowBufInit(dst) != DMERR_OK)
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
127 return NULL;
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
128
1747
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
129 DM_DBG("dmGrowBufConstCreateFrom(dst=%p, data=%p, len=%" DM_PRIu_SIZE_T ")\n",
1701
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
130 dst, data, len);
1700
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
131
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
132 dst->data = data;
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
133 dst->len = dst->size = len;
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
134 dst->is_const = TRUE;
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
135
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
136 return dst;
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
137 }
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
138
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
139
1747
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
140 DMGrowBuf * dmGrowBufConstCopyOffs(DMGrowBuf *dst, const DMGrowBuf *src, const size_t offs)
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
141 {
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
142 return dmGrowBufConstCreateFrom(dst, src->data + offs, src->len - offs);
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
143 }
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
144
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
145
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
146 DMGrowBuf * dmGrowBufCopyOffs(DMGrowBuf *dst, const DMGrowBuf *src, const size_t offs, const size_t enlarge)
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
147 {
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
148 DMGrowBuf tmp;
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
149 return dmGrowBufCopy(dst,
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
150 dmGrowBufConstCreateFrom(&tmp, src->data + offs, src->len - offs), enlarge);
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
151 }
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
152
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1744
diff changeset
153
1530
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
154 static BOOL dmGrowBufRealloc(DMGrowBuf *buf, const size_t nsize, const BOOL clear)
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
155 {
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
156 DM_DBG("dmGrowBufRealloc(%p):\n"
1701
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
157 " size=%" DM_PRIu_SIZE_T ", nsize=%" DM_PRIu_SIZE_T
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
158 ", offs=%" DM_PRIu_SIZE_T "\n",
31a1f710e342 Fix DMGrowBuf debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 1700
diff changeset
159 buf, buf->size, nsize, buf->offs);
1536
064fc2e3ee64 Add compile-time debugging information to DMGrowBuf.
Matti Hamalainen <ccr@tnsp.org>
parents: 1531
diff changeset
160
1700
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
161 if (buf->is_const)
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
162 return FALSE;
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
163
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
164 // Can't be smaller than current size!
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
165 if (nsize < buf->size)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
166 return FALSE;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
167
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
168 if ((buf->data = dmRealloc(buf->data, nsize)) == NULL)
1530
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
169 return FALSE;
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
170
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
171 // For buffers growing backwards, we must move the
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
172 // current data to the end of the buffer ..
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
173 size_t clrsize = nsize - buf->size;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
174 if (buf->backwards)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
175 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
176 memmove(buf->data + clrsize, buf->data, clrsize);
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
177 buf->offs += clrsize;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
178 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
179
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
180 // Check if we need to clear the newly allocated area?
1530
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
181 if (clear)
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
182 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
183 if (buf->backwards)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
184 memset(buf->data, 0, clrsize);
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
185 else
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
186 memset(buf->data + buf->size, 0, clrsize);
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
187 }
1530
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
188
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
189 buf->size = nsize;
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
190
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
191 return TRUE;
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
192 }
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
193
94eb6a8a7d56 Add helper function dmGrowBufRealloc() to handle the common case of
Matti Hamalainen <ccr@tnsp.org>
parents: 1509
diff changeset
194
1509
15afe578f0ae Add few comments to clarify things.
Matti Hamalainen <ccr@tnsp.org>
parents: 1508
diff changeset
195 //
15afe578f0ae Add few comments to clarify things.
Matti Hamalainen <ccr@tnsp.org>
parents: 1508
diff changeset
196 // Grow the buffer by "amount" bytes, but at least by buf->mingrow,
15afe578f0ae Add few comments to clarify things.
Matti Hamalainen <ccr@tnsp.org>
parents: 1508
diff changeset
197 // if there is not enough space for at least that amount compared to
15afe578f0ae Add few comments to clarify things.
Matti Hamalainen <ccr@tnsp.org>
parents: 1508
diff changeset
198 // current buffer "len".
15afe578f0ae Add few comments to clarify things.
Matti Hamalainen <ccr@tnsp.org>
parents: 1508
diff changeset
199 //
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 BOOL dmGrowBufGrow(DMGrowBuf *buf, const size_t amount)
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201 {
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
202 size_t grow = (amount > buf->mingrow) ? amount : buf->mingrow;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
203
1700
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
204 if (buf->is_const)
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
205 return FALSE;
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
206
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
207 if (buf->data == NULL ||
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
208 (buf->backwards && amount >= buf->offs) ||
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
209 (!buf->backwards && buf->offs + amount >= buf->size))
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210 {
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
211 if (!dmGrowBufRealloc(buf, buf->size + grow, TRUE))
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
212 return FALSE;
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
213 }
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
214
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
215 buf->len += amount;
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
216 return TRUE;
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
217 }
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
218
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
219
1509
15afe578f0ae Add few comments to clarify things.
Matti Hamalainen <ccr@tnsp.org>
parents: 1508
diff changeset
220 //
15afe578f0ae Add few comments to clarify things.
Matti Hamalainen <ccr@tnsp.org>
parents: 1508
diff changeset
221 // Grow the buffer if "nsize" is larger than the current buffer size.
15afe578f0ae Add few comments to clarify things.
Matti Hamalainen <ccr@tnsp.org>
parents: 1508
diff changeset
222 // Buffer is enlarged to nsize + mingrow.
15afe578f0ae Add few comments to clarify things.
Matti Hamalainen <ccr@tnsp.org>
parents: 1508
diff changeset
223 //
1455
a957b318fbe2 Add dmGrowBufCheckGrow() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1454
diff changeset
224 BOOL dmGrowBufCheckGrow(DMGrowBuf *buf, const size_t nsize)
a957b318fbe2 Add dmGrowBufCheckGrow() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1454
diff changeset
225 {
1700
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
226 if (buf->is_const)
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
227 return FALSE;
a2e65aa47554 Implement dmGrowBufConstCopy() and dmGrowBufCreateFrom(), and also
Matti Hamalainen <ccr@tnsp.org>
parents: 1699
diff changeset
228
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
229 if (buf->data == NULL || nsize > buf->size)
1455
a957b318fbe2 Add dmGrowBufCheckGrow() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1454
diff changeset
230 {
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
231 if (!dmGrowBufRealloc(buf, nsize + buf->mingrow, TRUE))
1455
a957b318fbe2 Add dmGrowBufCheckGrow() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1454
diff changeset
232 return FALSE;
a957b318fbe2 Add dmGrowBufCheckGrow() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1454
diff changeset
233 }
a957b318fbe2 Add dmGrowBufCheckGrow() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1454
diff changeset
234
1707
a0986cfd6f9d More consistently use DMGrowBuf in the lib64gfx APIs, and implement
Matti Hamalainen <ccr@tnsp.org>
parents: 1706
diff changeset
235 if (nsize > buf->len)
a0986cfd6f9d More consistently use DMGrowBuf in the lib64gfx APIs, and implement
Matti Hamalainen <ccr@tnsp.org>
parents: 1706
diff changeset
236 buf->len = nsize;
a0986cfd6f9d More consistently use DMGrowBuf in the lib64gfx APIs, and implement
Matti Hamalainen <ccr@tnsp.org>
parents: 1706
diff changeset
237
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
238 return TRUE;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
239 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
240
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
241
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
242 static void dmGrowBufUpdate(DMGrowBuf *buf)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
243 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
244 if (buf->offs < buf->min_offs)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
245 buf->min_offs = buf->offs;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
246
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
247 if (buf->offs > buf->max_offs)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
248 buf->max_offs = buf->offs;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
249 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
250
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
251
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
252 BOOL dmGrowBufPut(DMGrowBuf *buf, const Uint8 *data, const size_t len)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
253 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
254 if (data == NULL)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
255 return FALSE;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
256
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
257 if (!dmGrowBufGrow(buf, len))
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
258 return FALSE;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
259
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
260 if (buf->backwards)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
261 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
262 if (buf->literal)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
263 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
264 buf->offs -= len;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
265 memcpy(buf->data + buf->offs, data, len);
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
266 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
267 else
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
268 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
269 for (size_t n = 0; n < len; n++)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
270 buf->data[buf->offs--] = data[n];
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
271 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
272 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
273 else
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
274 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
275 memcpy(buf->data + buf->offs, data, len);
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
276 buf->offs += len;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
277 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
278
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
279 dmGrowBufUpdate(buf);
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
280
1455
a957b318fbe2 Add dmGrowBufCheckGrow() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1454
diff changeset
281 return TRUE;
a957b318fbe2 Add dmGrowBufCheckGrow() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1454
diff changeset
282 }
a957b318fbe2 Add dmGrowBufCheckGrow() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1454
diff changeset
283
a957b318fbe2 Add dmGrowBufCheckGrow() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1454
diff changeset
284
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
285 BOOL dmGrowBufPutU8(DMGrowBuf *buf, const Uint8 value)
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
286 {
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
287 if (!dmGrowBufGrow(buf, sizeof(Uint8)))
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
288 return FALSE;
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
289
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
290 buf->data[buf->offs] = value;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
291 if (buf->backwards)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
292 buf->offs--;
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
293 else
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
294 buf->offs++;
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
295
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
296 dmGrowBufUpdate(buf);
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
297
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
298 return TRUE;
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
299 }
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
300
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
301
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
302 BOOL dmGrowBufPutU16BE(DMGrowBuf *buf, const Uint16 val)
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
303 {
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
304 if (buf->literal && buf->backwards)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
305 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
306 return
1706
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
307 dmGrowBufPutU8(buf, val & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
308 dmGrowBufPutU8(buf, (val >> 8) & 0xff);
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
309 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
310 else
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
311 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
312 return
1706
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
313 dmGrowBufPutU8(buf, (val >> 8) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
314 dmGrowBufPutU8(buf, val & 0xff);
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
315 }
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
316 }
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
317
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
318
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
319 BOOL dmGrowBufPutU16LE(DMGrowBuf *buf, const Uint16 val)
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
320 {
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
321 if (buf->literal && buf->backwards)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
322 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
323 return
1706
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
324 dmGrowBufPutU8(buf, (val >> 8) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
325 dmGrowBufPutU8(buf, val & 0xff);
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
326 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
327 else
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
328 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
329 return
1706
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
330 dmGrowBufPutU8(buf, val & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
331 dmGrowBufPutU8(buf, (val >> 8) & 0xff);
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
332 }
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
333 }
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
334
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
335
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
336 BOOL dmGrowBufPutU32BE(DMGrowBuf *buf, const Uint32 val)
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
337 {
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
338 if (buf->literal && buf->backwards)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
339 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
340 return
1706
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
341 dmGrowBufPutU8(buf, (val >> 24) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
342 dmGrowBufPutU8(buf, (val >> 16) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
343 dmGrowBufPutU8(buf, (val >> 8) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
344 dmGrowBufPutU8(buf, val & 0xff);
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
345 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
346 else
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
347 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
348 return
1706
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
349 dmGrowBufPutU8(buf, val & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
350 dmGrowBufPutU8(buf, (val >> 8) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
351 dmGrowBufPutU8(buf, (val >> 16) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
352 dmGrowBufPutU8(buf, (val >> 24) & 0xff);
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
353 }
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
354 }
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
355
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
356
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
357 BOOL dmGrowBufPutU32LE(DMGrowBuf *buf, const Uint32 val)
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
358 {
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
359 if (buf->literal && buf->backwards)
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
360 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
361 return
1706
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
362 dmGrowBufPutU8(buf, val & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
363 dmGrowBufPutU8(buf, (val >> 8) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
364 dmGrowBufPutU8(buf, (val >> 16) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
365 dmGrowBufPutU8(buf, (val >> 24) & 0xff);
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
366 }
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
367 else
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
368 {
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
369 return
1706
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
370 dmGrowBufPutU8(buf, (val >> 24) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
371 dmGrowBufPutU8(buf, (val >> 16) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
372 dmGrowBufPutU8(buf, (val >> 8) & 0xff) &&
311b14855a1e Ehm .. the boolean logic conditions used in dmGrowBufPutU{16,32}{LE,BE}()
Matti Hamalainen <ccr@tnsp.org>
parents: 1705
diff changeset
373 dmGrowBufPutU8(buf, val & 0xff);
1697
1036b0dcccb5 Refactor DMGrowBuf so that there can be buffers that grow "backwards".
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
374 }
1454
fff3b58d031c Add a growable buffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
375 }
1699
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
376
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
377
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
378 BOOL dmGrowBufGetU8(DMGrowBuf *buf, Uint8 *value)
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
379 {
1703
fcc568e03bed Clarify dmGrowBufGetU8() a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1702
diff changeset
380 if (buf->backwards)
1699
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
381 {
1703
fcc568e03bed Clarify dmGrowBufGetU8() a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1702
diff changeset
382 if (buf->offs > 0)
fcc568e03bed Clarify dmGrowBufGetU8() a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1702
diff changeset
383 *value = buf->data[buf->offs--];
fcc568e03bed Clarify dmGrowBufGetU8() a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1702
diff changeset
384 else
fcc568e03bed Clarify dmGrowBufGetU8() a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1702
diff changeset
385 return FALSE;
1699
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
386 }
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
387 else
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
388 {
1744
e40227e994e2 Fix unitialized data accesses.
Matti Hamalainen <ccr@tnsp.org>
parents: 1707
diff changeset
389 if (buf->offs < buf->len)
1703
fcc568e03bed Clarify dmGrowBufGetU8() a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1702
diff changeset
390 *value = buf->data[buf->offs++];
fcc568e03bed Clarify dmGrowBufGetU8() a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1702
diff changeset
391 else
fcc568e03bed Clarify dmGrowBufGetU8() a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1702
diff changeset
392 return FALSE;
1699
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
393 }
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
394
1703
fcc568e03bed Clarify dmGrowBufGetU8() a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1702
diff changeset
395 return TRUE;
1699
f71cd6691e05 Implement dmGrowBufGetU8().
Matti Hamalainen <ccr@tnsp.org>
parents: 1697
diff changeset
396 }