Solaris

 view release on metacpan or  search on metacpan

Kstat/Kstat.xs  view on Meta::CPAN

PREINIT:
   char   *k;
   STRLEN klen;
   SV     **value;
CODE:
   self = SvRV(self);
   k = SvPV(key, klen);
   if (strNE(k, "class") && strNE(k, "crtime"))
      { read_kstats((HV*)self, FALSE); }
   value = hv_fetch((HV*)self, k, klen, FALSE);
   if (value) { RETVAL = *value; SvREFCNT_inc(RETVAL); }
   else       { RETVAL = &PL_sv_undef; }
OUTPUT:
   RETVAL

################################################################################

SV*
STORE(self, key, value)
   SV* self;
   SV* key;
   SV* value;
PREINIT:
   char   *k;
   STRLEN klen;
CODE:
   self = SvRV(self);
   k = SvPV(key, klen);
   if (strNE(k, "class") && strNE(k, "crtime"))
      { read_kstats((HV*)self, FALSE); }
   SvREFCNT_inc(value);
   RETVAL = *(hv_store((HV*)self, k, klen, value, 0));
   SvREFCNT_inc(RETVAL);
OUTPUT:
   RETVAL

################################################################################

bool
EXISTS(self, key)
   SV* self;
   SV* key;
PREINIT:
   char *k;
CODE:
   self = SvRV(self);
   k = SvPV(key, PL_na);
   if (strNE(k, "class") && strNE(k, "crtime"))
      { read_kstats((HV*)self, FALSE); }
   RETVAL = hv_exists_ent((HV*)self, key, 0);
OUTPUT:
   RETVAL

################################################################################

SV*
FIRSTKEY(self)
   SV* self;
PREINIT:
   HE *he;
PPCODE:
   self = SvRV(self);
   read_kstats((HV*)self, FALSE);
   hv_iterinit((HV*)self);
   if (he = hv_iternext((HV*)self))
      {
      EXTEND(sp, 1);
      PUSHs(hv_iterkeysv(he));
      }

################################################################################

SV*
NEXTKEY(self, lastkey)
   SV* self;
   SV* lastkey;
PREINIT:
   HE *he;
PPCODE:
   self = SvRV(self);
   if (he = hv_iternext((HV*)self))
      {
      EXTEND(sp, 1);
      PUSHs(hv_iterkeysv(he));
      }

################################################################################

SV*
DELETE(self, key)
   SV *self;
   SV *key;
CODE:
   self = SvRV(self);
   RETVAL = hv_delete_ent((HV*)self, key, 0, 0);
   if (RETVAL) { SvREFCNT_inc(RETVAL); }
   else        { RETVAL = &PL_sv_undef; }
OUTPUT:
   RETVAL

################################################################################

void
CLEAR(self)
   SV* self;
PREINIT:
   MAGIC   *mg;
   KstatInfo_t *kip;
CODE:
   self = SvRV(self);
   hv_clear((HV*)self);
   mg = mg_find(self, '~');
   if (mg == 0) { croak("Lost ~ magic"); }
   kip = (KstatInfo_t*)SvPVX(mg->mg_obj);
   hv_store((HV*)self, "class", 5, newSVpv(kip->kstat->ks_class, 0), 0);
   hv_store((HV*)self, "crtime", 6, NEW_HRTIME(kip->kstat->ks_crtime), 0);

################################################################################



( run in 0.732 second using v1.01-cache-2.11-cpan-5511b514fd6 )