Sereal-Merger
view release on metacpan or search on metacpan
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include "srl_common.h"
#include "srl_merger.h"
#include "srl_protocol.h"
#include "srl_buffer.h"
#include "strtable.h"
typedef srl_merger_t * Sereal__Merger;
MODULE = Sereal::Merger PACKAGE = Sereal::Merger
PROTOTYPES: DISABLE
srl_merger_t *
new(CLASS, opt = NULL)
char *CLASS;
HV *opt;
CODE:
RETVAL = srl_build_merger_struct(aTHX_ opt);
OUTPUT: RETVAL
void
DESTROY(mrg)
srl_merger_t *mrg;
CODE:
srl_destroy_merger(aTHX_ mrg);
void
append(mrg, src)
srl_merger_t *mrg;
SV *src
PPCODE:
srl_merger_append(aTHX_ mrg, src);
void
append_all(mrg, src)
srl_merger_t *mrg;
AV *src
PPCODE:
srl_merger_append_all(aTHX_ mrg, src);
SV*
finish(mrg, user_header = NULL)
srl_merger_t *mrg;
SV *user_header;
CODE:
RETVAL = srl_merger_finish(aTHX_ mrg, user_header);
OUTPUT: RETVAL
UV
elements_merged(mrg)
srl_merger_t *mrg;
CODE:
RETVAL = (UV) mrg->cnt_of_merged_elements;
OUTPUT: RETVAL
MODULE = Sereal::Merger PACKAGE = Sereal::Merger::_strtabletest
void
test()
PREINIT:
STRTABLE_t *tbl;
STRTABLE_ENTRY_t *ent;
srl_buffer_t buf;
UV i, len, n = 15;
int found;
char *testset[15] = {
"S",
"SH",
"SHO",
"SHOR",
"SHORT",
"SHORT_",
"SHORT_B",
"SHORT_BI",
"SHORT_BIN",
"SHORT_BINA",
"SHORT_BINAR",
"SHORT_BINARY",
"SHORT_BINARY_",
"SHORT_BINARY_1",
"SHORT_BINARY_14",
};
CODE:
srl_buf_init_buffer(aTHX_ &buf, 1024);
tbl = STRTABLE_new(&buf);
for (i = 0; i < n; ++i) {
len = i + 1;
*buf.pos++ = SRL_HDR_SHORT_BINARY_LOW + i;
Copy(testset[i], buf.pos, len, char);
buf.pos += len;
ent = STRTABLE_insert(tbl, (unsigned char*) testset[i], len, &found);
ent->offset = BODY_POS_OFS(&buf) - len;
printf("%sok %u - insert %.*s\n", found ? "not " : "", (unsigned int)(1+i), (int)len, testset[i]);
if (found) abort();
( run in 1.230 second using v1.01-cache-2.11-cpan-5511b514fd6 )