ObjStore
view release on metacpan or search on metacpan
REP/Splash/Splash.xs view on Meta::CPAN
mg->cursor = first(mg->cursor);
if (mg->cursor != -1) {
SV *out = hv[mg->cursor].key_2sv();
dSP;
XPUSHs(out);
PUTBACK;
}
}
/*
OSSVPV *OSPV_hvarray2::new_cursor(os_segment *seg)
{ return new(seg, OSPV_hvarray2_cs::get_os_typespec()) OSPV_hvarray2_cs(this); }
OSPV_hvarray2_cs::OSPV_hvarray2_cs(OSPV_hvarray2 *_at)
: OSPV_Cursor(_at)
{ seek_pole(0); }
void OSPV_hvarray2_cs::seek_pole(int end)
{
OSPV_hvarray2 *pv = (OSPV_hvarray2*)focus();
if (!end) cs = 0;
else {
cs = pv->hv.count()-1;
SERIOUS("seek_pole('end') is experimental");
}
}
void OSPV_hvarray2_cs::at()
{
OSPV_hvarray2 *pv = (OSPV_hvarray2*)focus();
int cnt = pv->hv.count();
if (cs >= 0 && cs < cnt) push_sv_ossv(pv->hv[cs].key_2sv(), &pv->hv[cs].hv);
}
void OSPV_hvarray2_cs::next()
{
OSPV_hvarray2 *pv = (OSPV_hvarray2*)focus();
int cnt = pv->hv.count();
at();
if (cs < cnt) ++ cs;
if (cs < cnt) { cs = pv->first(cs); if (cs==-1) cs = cnt; }
}
*/
MODULE = ObjStore::REP::Splash PACKAGE = ObjStore::REP::Splash
PROTOTYPES: DISABLE
BOOT:
extern _Application_schema_info ObjStore_REP_Splash_dll_schema_info;
osp_thr::use("ObjStore::REP::Splash", OSPERL_API_VERSION);
osp_thr::register_schema("ObjStore::REP::Splash",
&ObjStore_REP_Splash_dll_schema_info);
MODULE = ObjStore::REP::Splash PACKAGE = ObjStore::REP::Splash::AV
static void
OSPV_avarray::new(seg, sz)
SV *seg;
int sz;
PPCODE:
SV *CSV = ST(0);
os_segment *area = osp_thr::sv_2segment(ST(1));
PUTBACK;
if (sz <= 0) {
croak("Non-positive cardinality");
} else if (sz > 100000) {
sz = 100000;
SERIOUS("Cardinality > 100000; try a more suitable representation");
}
OSSVPV *pv;
NEW_OS_OBJECT(pv, area, OSPV_avarray::get_os_typespec(), OSPV_avarray(sz));
pv->bless(CSV);
return;
MODULE = ObjStore::REP::Splash PACKAGE = ObjStore::REP::Splash::ObjAV
static void
OSSVPV::new(seg, sz)
SV *seg;
int sz;
PPCODE:
SV *CSV = ST(0);
os_segment *area = osp_thr::sv_2segment(ST(1));
PUTBACK;
if (sz <= 0) {
croak("Non-positive cardinality");
}
OSSVPV *pv;
NEW_OS_OBJECT(pv, area, OSPV_av2array::get_os_typespec(), OSPV_av2array(sz));
pv->bless(CSV);
return;
MODULE = ObjStore::REP::Splash PACKAGE = ObjStore::REP::Splash::HV
static void
OSPV_hvarray2::new(seg, sz)
SV *seg;
int sz;
PPCODE:
SV *CSV = ST(0);
os_segment *area = osp_thr::sv_2segment(ST(1));
PUTBACK;
if (sz <= 0) {
croak("Non-positive cardinality");
} else if (sz > 1000) {
sz = 1000;
SERIOUS("Cardinality > 1000; try a more suitable representation");
}
OSSVPV *pv;
NEW_OS_OBJECT(pv, area,OSPV_hvarray2::get_os_typespec(), OSPV_hvarray2(sz));
pv->bless(CSV);
return;
MODULE = ObjStore::REP::Splash PACKAGE = ObjStore::REP::Splash::Heap
static void
OSPV_splashheap::new(seg, ...)
SV *seg;
PROTOTYPE: $$;$
PPCODE:
SV *CSV = ST(0);
os_segment *area = osp_thr::sv_2segment(ST(1));
int sz = 20;
if (items > 2) sz = SvIV(ST(2));
PUTBACK;
if (sz <= 0) {
croak("Non-positive cardinality");
} else if (sz > 10000) {
sz = 10000;
SERIOUS("Cardinality > 10000; try a more suitable representation");
}
OSSVPV *pv;
NEW_OS_OBJECT(pv, area,OSPV_splashheap::get_os_typespec(), OSPV_splashheap(sz));
pv->bless(CSV);
return;
void
OSPV_splashheap::_conf_slot(...)
PPCODE:
PUTBACK;
SV *ret = 0;
if (items == 2) {
if (THIS->av.count())
croak("Cannot change configuration of an active heap");
ospv_bridge *br = osp_thr::sv_2bridge(ST(1), 1, os_segment::of(THIS));
THIS->conf_slot = br->ospv();
} else if (items == 1) {
ret = osp_thr::ospv_2sv(THIS->conf_slot);
} else {
croak("OSPV_splashheap(%p)->_conf_slot: bad args", THIS);
}
SPAGAIN;
if (ret) XPUSHs(ret);
( run in 0.701 second using v1.01-cache-2.11-cpan-5511b514fd6 )