List of buffers structure

This commit is contained in:
Wilson Lin 2018-07-06 21:50:37 +12:00
parent 7b6c86116a
commit ef518866a8
1 changed files with 65 additions and 0 deletions

View File

@ -0,0 +1,65 @@
#ifndef _HDR_HYPERBUILD_DATASTRUCTURE_LIST_BUFFER
#define _HDR_HYPERBUILD_DATASTRUCTURE_LIST_BUFFER
#include "../../util/math.h"
#include "../../util/buffer.c"
#include "../../util/list.h"
HBU_LIST(hb_bufferlist, hbu_buffer_t, sizeof(hbu_buffer_t), hbu_buffer_t, NULL);
int hb_bufferlist_compare(hb_bufferlist_t a, hb_bufferlist_t b)
{
size_t max = hbu_max(a->length, b->length);
for (size_t i = 0; i < max; i++)
{
hbu_buffer_t a1 = hb_bufferlist_get(a, i);
hbu_buffer_t b1 = hb_bufferlist_get(b, i);
if (a1 == NULL)
{
return -1;
}
if (b1 == NULL)
{
return 1;
}
int subcmp = hbu_buffer_compare(a1, b1);
if (subcmp != 0)
{
return subcmp;
}
}
return 0;
}
hb_bufferlist_t hb_bufferlist_create_from_split(hb_char_t *source, hb_char_t delim)
{
hb_bufferlist_t parts = hb_bufferlist_create();
hbu_buffer_t part = hbu_buffer_create();
hb_bufferlist_append(parts, part);
hb_char_t c;
size_t i = 0;
while ((c = source[i]))
{
if (c == delim)
{
part = hbu_buffer_create();
hb_bufferlist_append(parts, part);
}
else
{
hbu_buffer_append(part, c);
}
i++;
}
return parts;
}
#endif // _HDR_HYPERBUILD_DATASTRUCTURE_LIST_BUFFER