mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-24 03:52:50 -06:00
inline a number of functions in gu/seq.c. this has a noticeable effect on the parser's speed
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user