Skip to content

Commit b3cc8ae

Browse files
committed
membuf: add membuf_added and membuf_unadd APIs.
Clean up some whitespace while we're there too. Signed-off-by: Rusty Russell <[email protected]>
1 parent 7d1f0c7 commit b3cc8ae

File tree

3 files changed

+31
-4
lines changed

3 files changed

+31
-4
lines changed

ccan/membuf/membuf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ size_t membuf_prepare_space_(struct membuf *mb,
2323
/* Always reset in the trivial empty case. */
2424
if (mb->start == mb->end)
2525
mb->start = mb->end = 0;
26-
26+
2727
if (membuf_num_space_(mb) >= num_extra)
2828
return 0;
2929

ccan/membuf/membuf.h

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,20 @@ static inline void *membuf_space_(struct membuf *mb, size_t elemsize)
133133
return mb->elems + mb->end * elemsize;
134134
}
135135

136+
/**
137+
* membuf_added - declare that we've added this many elements.
138+
* @mb: the MEMBUF() declared membuf.
139+
* @n: the number of elements we added (must be < membuf_num_space()).
140+
*/
141+
#define membuf_added(mb, num) \
142+
membuf_added_(tcon_unwrap(mb), (num))
143+
144+
static inline void membuf_added_(struct membuf *mb, size_t num)
145+
{
146+
assert(num <= membuf_num_space_(mb));
147+
mb->end += num;
148+
}
149+
136150
/**
137151
* membuf_prepare_space - internal routine to make sure we've got space.
138152
* @mb: the MEMBUF() declared membuf.
@@ -181,12 +195,25 @@ static inline void *membuf_add_(struct membuf *mb, size_t num, size_t elemsize)
181195

182196
oldend = membuf_space_(mb, elemsize);
183197
/* We assume expandfn succeeded. */
184-
assert(num <= membuf_num_space_(mb));
185-
mb->end += num;
198+
membuf_added_(mb, num);
186199

187200
return oldend;
188201
}
189202

203+
/**
204+
* membuf_unadd - remove this many added elements.
205+
* @mb: the MEMBUF() declared membuf.
206+
* @n: the number of elements we want to "unadd" (must be < membuf_num_elems()).
207+
*/
208+
#define membuf_unadd(mb, num) \
209+
membuf_unadd_(tcon_unwrap(mb), (num))
210+
211+
static inline void membuf_unadd_(struct membuf *mb, size_t num)
212+
{
213+
assert(num <= membuf_num_elems_(mb));
214+
mb->end -= num;
215+
}
216+
190217
/**
191218
* membuf_cleanup - reset membuf, return elems array for freeing.
192219
* @mb: the MEMBUF() declared membuf.

ccan/membuf/test/run.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ int main(void)
9090

9191
ok1(membuf_consume(&intbuf, 1));
9292
ok1(membuf_num_elems(&intbuf) == 0);
93-
93+
9494
/* Force it to more-than-double; make sure that works! */
9595
memset(membuf_add(&intbuf, 300), 0, 300*sizeof(int));
9696
ok1(membuf_num_elems(&intbuf) == 300);

0 commit comments

Comments
 (0)