1
#ifndef QTESTEVENTLIST_MACROS_H
2
#define QTESTEVENTLIST_MACROS_H
4
#include <listclass_macros.h>
10
template <class ItemList, class Item, const char *ItemSTR, const char* PerlName>
11
void XS_qtesteventlist_store( pTHX_ CV* cv)
15
Perl_croak(aTHX_ "Usage: %s::store(array, index, value)", PerlName);
16
PERL_UNUSED_VAR(cv); /* -W */
19
int index = (int)SvIV(ST(1));
22
smokeperl_object* o = sv_obj_info(array);
25
smokeperl_object* valueo = sv_obj_info(value);
26
if (!valueo || !valueo->ptr)
28
ItemList* list = (ItemList*)o->ptr;
29
Item* point = (Item*)valueo->ptr;
31
if ( 0 > index || index > list->size()+1 )
33
else if ( index == list->size() )
34
list->append( point );
36
list->replace( index, point );
38
RETVAL = newSVsv(value);
45
template <class ItemList, class Item, const char *ItemSTR, const char* PerlName>
46
void XS_qtesteventlist_storesize( pTHX_ CV* cv)
50
Perl_croak(aTHX_ "Usage: %s::storesize(array, count)", PerlName);
51
PERL_UNUSED_VAR(cv); /* -W */
52
PERL_UNUSED_VAR(ax); /* -Wall */
56
int count = (int)SvIV(ST(1));
58
smokeperl_object* o = sv_obj_info(array);
59
if (!o || !o->ptr || count < 0)
61
ItemList* list = (ItemList*)o->ptr;
63
while ( count < list->size() )
71
#define DEF_QTESTEVENTLIST_FUNCTIONS(ItemList,Item,ItemName,PerlName) \
73
char ItemList##STR[] = #ItemList;\
74
char ItemName##STR[] = #Item "*";\
75
char ItemName##PerlNameSTR[] = #PerlName;\
76
void (*XS_##ItemList##_at)(pTHX_ CV*) = XS_Vector_at<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR>;\
77
void (*XS_##ItemList##_exists)(pTHX_ CV*) = XS_ValueVector_exists<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR>;\
78
void (*XS_##ItemList##_size)(pTHX_ CV*) = XS_ValueVector_size<ItemList, ItemName##PerlNameSTR>;\
79
void (*XS_##ItemList##_store)(pTHX_ CV*) = XS_qtesteventlist_store<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR>;\
80
void (*XS_##ItemList##_storesize)(pTHX_ CV*) = XS_qtesteventlist_storesize<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR>;\
81
void (*XS_##ItemList##_clear)(pTHX_ CV*) = XS_ValueVector_clear<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR>;\
82
void (*XS_##ItemList##_push)(pTHX_ CV*) = XS_Vector_push<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR>;\
83
void (*XS_##ItemList##_pop)(pTHX_ CV*) = XS_ValueVector_pop<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR>;\
84
void (*XS_##ItemList##_shift)(pTHX_ CV*) = XS_Vector_shift<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR>;\
85
void (*XS_##ItemList##_unshift)(pTHX_ CV*) = XS_Vector_unshift<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR>;\
86
void (*XS_##ItemList##_splice)(pTHX_ CV*) = XS_List_splice<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR>;\
87
void (*XS_##ItemList##__overload_op_equality)(pTHX_ CV*) = XS_ValueVector__overload_op_equality<ItemList, Item, ItemName##STR, ItemName##PerlNameSTR, ItemList##STR>;\