| Revision 4 (by moose, 2009/02/13 04:09:19) |
* add msgtest2.pl test for new highlevel api
* separate XS into Message and Item related code
* remove Makefile.old from svn
* add encode/decode support to hl CSE::Proto::Message class
* convert CSE::Proto::C::Item to use a simple blessed pointer instead of a hashref holding the handle
* fix CSE::Proto::Message::Item::clone to properly clone the value, not just copy an ARRAY ref
* add support for MESSAGE type items in the parser
|
#include "itemtype.h"
MODULE = CSE::Proto::C::Message PACKAGE = CSE::Proto::C::Message PREFIX = cseproto_
PROTOTYPES: enable
BOOT:
{
HV *stash;
HV *item_stash;
stash = gv_stashpv("CSE::Proto::C", TRUE);
newCONSTSUB(stash, "KEYTYPEBITS", newSViv(CSEPROTO_KEYTYPEBITS));
newCONSTSUB(stash, "KEYTYPEMASK", newSViv(CSEPROTO_KEYTYPEMASK));
newCONSTSUB(stash, "WIRETYPE_VARINT", newSViv(CSE_WIRETYPE_VARINT));
newCONSTSUB(stash, "WIRETYPE_SVARINT", newSViv(CSE_WIRETYPE_SVARINT));
newCONSTSUB(stash, "WIRETYPE_64BIT", newSViv(CSE_WIRETYPE_64BIT));
newCONSTSUB(stash, "WIRETYPE_32BIT", newSViv(CSE_WIRETYPE_32BIT));
newCONSTSUB(stash, "WIRETYPE_LENDELIM", newSViv(CSE_WIRETYPE_LENDELIM));
boot_CSE__Proto__C__Item(aTHX_ cv);
}
int
cseproto_add_item(proto, item)
CSE_Proto_C_Message proto
CSE_Proto_C_Item item
INIT:
//printf("proto: %p, item: %p\n", proto, item);
CSE_Proto_C_Message
cseproto_create(buckets)
uint32_t buckets
size_t
cseproto_decode(proto, data)
CSE_Proto_C_Message proto
SV * data
PREINIT:
size_t length;
CODE:
length = sv_len(data);
RETVAL = cseproto_decode_data(proto, length, sv_pv(data));
OUTPUT:
RETVAL
void
cseproto_destroy(proto)
CSE_Proto_C_Message proto
SV *
cseproto_encode(cp)
CSE_Proto_C_Message cp
PREINIT:
uint8_t *data;
size_t len;
CODE:
len = cseproto_encode(cp, &data);
RETVAL = newSVpv(data, len);
OUTPUT:
RETVAL
SV *
cseproto_get_item(proto, key)
CSE_Proto_C_Message proto
uint32_t key
INIT:
SV *item_sv;
CSE_Proto_C_Item item;
CODE:
item = cseproto_get_item(proto, key);
item_sv = newSV(0);
sv_setref_pv(item_sv, "CSE::Proto::C::Item", (void*)item);
RETVAL = item_sv;
OUTPUT:
RETVAL
SV *
cseproto_get_item_head(proto, key)
CSE_Proto_C_Message proto
uint32_t key
INIT:
SV *item_sv;
CSE_Proto_C_Item item;
CODE:
item = cseproto_get_item_head(proto, key);
item_sv = newSV(0);
sv_setref_pv(item_sv, "CSE::Proto::C::Item", (void*)item);
RETVAL = item_sv;
OUTPUT:
RETVAL
SV *
cseproto_get_item_tail(proto, key)
CSE_Proto_C_Message proto
uint32_t key
INIT:
SV *item_sv;
CSE_Proto_C_Item item;
CODE:
item = cseproto_get_item_tail(proto, key);
item_sv = newSV(0);
sv_setref_pv(item_sv, "CSE::Proto::C::Item", (void*)item);
RETVAL = item_sv;
OUTPUT:
RETVAL
size_t
cseproto_message_size(proto)
CSE_Proto_C_Message proto
int
cseproto_remove_item(proto, item)
CSE_Proto_C_Message proto
CSE_Proto_C_Item item