summaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-11-18 09:05:09 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-11-18 09:05:09 +0000
commitedb4f7320d3fef4e92a37a52807f603d42e4e59e (patch)
tree4e683ed68b69a65fbab6e03b7bc164784ced4bc6 /src/runtime
parenta6d60f9c8de1dfc6e40f7c73bcdb403dd69d97be (diff)
add gu_buf_insert in libgu
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/c/gu/seq.c14
-rw-r--r--src/runtime/c/gu/seq.h3
2 files changed, 17 insertions, 0 deletions
diff --git a/src/runtime/c/gu/seq.c b/src/runtime/c/gu/seq.c
index 085bdb8a6..5f0171977 100644
--- a/src/runtime/c/gu/seq.c
+++ b/src/runtime/c/gu/seq.c
@@ -201,6 +201,20 @@ gu_buf_freeze(GuBuf* buf, GuPool* pool)
return seq;
}
+void*
+gu_buf_insert(GuBuf* buf, size_t index)
+{
+ size_t len = buf->seq->len;
+ gu_buf_require(buf, len + 1);
+
+ uint8_t* target =
+ buf->seq->data + buf->elem_size * index;
+ memmove(target+buf->elem_size, target, (len-index)*buf->elem_size);
+
+ buf->seq->len++;
+ return target;
+}
+
static void
gu_quick_sort(GuBuf *buf, GuOrder *order, int left, int right)
{
diff --git a/src/runtime/c/gu/seq.h b/src/runtime/c/gu/seq.h
index 99642a303..5accb0b24 100644
--- a/src/runtime/c/gu/seq.h
+++ b/src/runtime/c/gu/seq.h
@@ -102,6 +102,9 @@ gu_buf_trim_n(GuBuf* buf, size_t n_elems);
const void*
gu_buf_trim(GuBuf* buf);
+void*
+gu_buf_insert(GuBuf* buf, size_t n_index);
+
void
gu_buf_flush(GuBuf* buf);