Mozilla-nsID

 view release on metacpan or  search on metacpan

nsID.xs  view on Meta::CPAN

		obj = newSVrv(obj_ref, myclass);
		id = new nsID;
		memset(id, 0, sizeof(*id));
		sv_setiv(obj, (IV) id);
		SvREADONLY_on(obj);
		RETVAL = obj_ref;
	OUTPUT:
		RETVAL
		
SV *new(const char* myclass, unsigned int m0, unsigned short m1 , unsigned short m2, SV *m3)
	PREINIT:
		SV *obj_ref;
		SV *obj;
		nsID *id;
		I32 m3_len;
		int i;
	INIT:
		if ((!SvROK(m3)) || (SvTYPE(SvRV(m3)) != SVt_PVAV)
				|| ((m3_len = av_len((AV *)SvRV(m3))) < 0)) {
			XSRETURN_UNDEF;
		}
	CODE:
		obj_ref = newSViv(0);
		obj = newSVrv(obj_ref, myclass);
		id = new nsID;
		id->m0 = m0;
		id->m1 = m1;
		id->m2 = m2;
		for (i = 0; i <= m3_len && i < 8; i++) {
			id->m3[i] = (unsigned char)
				SvNV(*av_fetch((AV *) SvRV(m3), i, 0));
		}
		sv_setiv(obj, (IV) id);
		SvREADONLY_on(obj);
		RETVAL = obj_ref;
	OUTPUT:
		RETVAL

unsigned int m0(SV *obj)
	CODE:
		RETVAL = ((nsID *) SvIV(SvRV(obj)))->m0;
	OUTPUT:
		RETVAL

unsigned short m1(SV *obj)
	CODE:
		RETVAL = ((nsID *) SvIV(SvRV(obj)))->m1;
	OUTPUT:
		RETVAL

unsigned int m2(SV *obj)
	CODE:
		RETVAL = ((nsID *) SvIV(SvRV(obj)))->m2;
	OUTPUT:
		RETVAL

void m3(SV *obj)
	INIT:
		nsID *id;
		int i;
	PPCODE:
		id = (nsID *) SvIV(SvRV(obj));
		for (i = 0; i < sizeof(id->m3); i++) {
			XPUSHs(sv_2mortal(newSVnv(id->m3[i])));
		}

SV *ToString(SV *obj)
	INIT:
		char *str;
		SV *res;
	CODE:
		str = ((nsID *) SvIV(SvRV(obj)))->ToString();
		res = newSVpvf("%s", str);
		free(str);
		RETVAL = res;
	OUTPUT:
		RETVAL

int Parse(SV *obj, const char *str)
	INIT:
		PRBool res;
	CODE:
		res = ((nsID *) SvIV(SvRV(obj)))->Parse(str);
		if (!res) {
			XSRETURN_UNDEF;
		}
		RETVAL = 1;
	OUTPUT:
		RETVAL

void DESTROY(SV* obj)
	INIT:
		nsID *id;
	CODE:
		id = (nsID *) SvIV(SvRV(obj));
		delete id;



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