inline a number of functions in gu/seq.c. this has a noticeable effect on the parser's speed

This commit is contained in:
kr.angelov
2014-10-23 21:19:29 +00:00
parent ef9f16b63a
commit 9314b5b392
2 changed files with 55 additions and 87 deletions

View File

@@ -7,30 +7,6 @@
#include <malloc.h> #include <malloc.h>
#endif #endif
struct GuSeq {
size_t len;
uint8_t data[0];
};
struct GuBuf {
GuSeq* seq;
size_t elem_size;
size_t avail_len;
GuFinalizer fin;
};
size_t
gu_buf_length(GuBuf* buf)
{
return buf->seq->len;
}
size_t
gu_buf_avail(GuBuf* buf)
{
return buf->avail_len;
}
static void static void
gu_buf_fini(GuFinalizer* fin) gu_buf_fini(GuFinalizer* fin)
{ {
@@ -51,18 +27,6 @@ gu_make_buf(size_t elem_size, GuPool* pool)
return buf; return buf;
} }
size_t
gu_seq_length(GuSeq* seq)
{
return seq->len;
}
void*
gu_seq_data(GuSeq* seq)
{
return seq->data;
}
static GuSeq gu_empty_seq_ = {0}; static GuSeq gu_empty_seq_ = {0};
GuSeq* GuSeq*
@@ -129,18 +93,6 @@ gu_buf_require(GuBuf* buf, size_t req_len)
buf->avail_len = (real_size - sizeof(GuSeq)) / buf->elem_size; buf->avail_len = (real_size - sizeof(GuSeq)) / buf->elem_size;
} }
void*
gu_buf_data(GuBuf* buf)
{
return &buf->seq->data;
}
GuSeq*
gu_buf_data_seq(GuBuf* buf)
{
return buf->seq;
}
void* void*
gu_buf_extend_n(GuBuf* buf, size_t n_elems) gu_buf_extend_n(GuBuf* buf, size_t n_elems)
{ {
@@ -151,12 +103,6 @@ gu_buf_extend_n(GuBuf* buf, size_t n_elems)
return &buf->seq->data[buf->elem_size * len]; return &buf->seq->data[buf->elem_size * len];
} }
void*
gu_buf_extend(GuBuf* buf)
{
return gu_buf_extend_n(buf, 1);
}
void void
gu_buf_push_n(GuBuf* buf, const void* data, size_t n_elems) gu_buf_push_n(GuBuf* buf, const void* data, size_t n_elems)
{ {
@@ -173,18 +119,6 @@ gu_buf_trim_n(GuBuf* buf, size_t n_elems)
return &buf->seq->data[buf->elem_size * new_len]; return &buf->seq->data[buf->elem_size * new_len];
} }
const void*
gu_buf_trim(GuBuf* buf)
{
return gu_buf_trim_n(buf, 1);
}
void
gu_buf_flush(GuBuf* buf)
{
buf->seq->len = 0;
}
void void
gu_buf_pop_n(GuBuf* buf, size_t n_elems, void* data_out) gu_buf_pop_n(GuBuf* buf, size_t n_elems, void* data_out)
{ {

View File

@@ -3,9 +3,17 @@
#include <gu/mem.h> #include <gu/mem.h>
typedef struct GuBuf GuBuf; typedef struct {
size_t len;
uint8_t data[0];
} GuSeq;
typedef struct GuSeq GuSeq; typedef struct {
GuSeq* seq;
size_t elem_size;
size_t avail_len;
GuFinalizer fin;
} GuBuf;
GuSeq* GuSeq*
gu_empty_seq(); gu_empty_seq();
@@ -31,12 +39,17 @@ gu_realloc_seq_(GuSeq* seq, size_t elem_size, size_t length);
void void
gu_seq_free(GuSeq* seq); gu_seq_free(GuSeq* seq);
size_t inline size_t
gu_seq_length(GuSeq* seq); gu_seq_length(GuSeq* seq)
{
void* return seq->len;
gu_seq_data(GuSeq* seq); }
inline void*
gu_seq_data(GuSeq* seq)
{
return seq->data;
}
#define gu_seq_index(SEQ, T, I) \ #define gu_seq_index(SEQ, T, I) \
(&((T*)gu_seq_data(SEQ))[I]) (&((T*)gu_seq_data(SEQ))[I])
@@ -56,17 +69,29 @@ gu_make_buf(size_t elem_size, GuPool* pool);
#define gu_new_buf(T, POOL) \ #define gu_new_buf(T, POOL) \
gu_make_buf(sizeof(T), (POOL)) gu_make_buf(sizeof(T), (POOL))
size_t inline size_t
gu_buf_length(GuBuf* buf); gu_buf_length(GuBuf* buf)
{
return buf->seq->len;
}
size_t inline size_t
gu_buf_avail(GuBuf* buf); gu_buf_avail(GuBuf* buf)
{
return buf->avail_len;
}
void* inline void*
gu_buf_data(GuBuf* buf); gu_buf_data(GuBuf* buf)
{
return &buf->seq->data;
}
GuSeq* inline GuSeq*
gu_buf_data_seq(GuBuf* buf); gu_buf_data_seq(GuBuf* buf)
{
return buf->seq;
}
#define gu_buf_index(BUF, T, I) \ #define gu_buf_index(BUF, T, I) \
(&((T*)gu_buf_data(BUF))[I]) (&((T*)gu_buf_data(BUF))[I])
@@ -85,8 +110,11 @@ gu_buf_push_n(GuBuf* buf, const void* elems, size_t n_elems);
void* void*
gu_buf_extend_n(GuBuf* buf, size_t n_elems); gu_buf_extend_n(GuBuf* buf, size_t n_elems);
void* inline void*
gu_buf_extend(GuBuf* buf); gu_buf_extend(GuBuf* buf)
{
return gu_buf_extend_n(buf, 1);
}
#define gu_buf_push(BUF, T, VAL) \ #define gu_buf_push(BUF, T, VAL) \
GU_BEGIN \ GU_BEGIN \
@@ -99,14 +127,20 @@ gu_buf_pop_n(GuBuf* buf, size_t n_elems, void* data_out);
const void* const void*
gu_buf_trim_n(GuBuf* buf, size_t n_elems); gu_buf_trim_n(GuBuf* buf, size_t n_elems);
const void* inline const void*
gu_buf_trim(GuBuf* buf); gu_buf_trim(GuBuf* buf)
{
return gu_buf_trim_n(buf, 1);
}
void* void*
gu_buf_insert(GuBuf* buf, size_t n_index); gu_buf_insert(GuBuf* buf, size_t n_index);
void inline void
gu_buf_flush(GuBuf* buf); gu_buf_flush(GuBuf* buf)
{
buf->seq->len = 0;
}
#define gu_buf_pop(BUF, T) \ #define gu_buf_pop(BUF, T) \
(*(T*)gu_buf_trim(BUF)) (*(T*)gu_buf_trim(BUF))