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 )