SOOT
view release on metacpan or search on metacpan
RunTimeXS/SOOT_RTXS_array.xs view on Meta::CPAN
XPUSHs(sv_2mortal( \
SOOT::IntegerVecToAV<type>(aTHX_ (type*)dataAddr, idxdata.maxIndex) \
));
#define SOOT_ToUIntegerAV(type) \
XPUSHs(sv_2mortal( \
SOOT::UIntegerVecToAV<type>(aTHX_ (type*)dataAddr, idxdata.maxIndex) \
));
#define SOOT_ToFloatAV(type) \
XPUSHs(sv_2mortal( \
SOOT::FloatVecToAV<type>(aTHX_ (type*)dataAddr, idxdata.maxIndex) \
));
#define SOOT_AVToIntegerAry(type, src) \
size_t len; \
SOOT::AVToIntegerVecInPlace<type>(aTHX_ (AV*)SvRV(src), len, (type*)dataAddr, idxdata.maxIndex);
#define SOOT_AVToUIntegerAry(type, src) \
size_t len; \
SOOT::AVToUIntegerVecInPlace<type>(aTHX_ (AV*)SvRV(src), len, (type*)dataAddr, idxdata.maxIndex);
#define SOOT_AVToFloatAry(type, src) \
size_t len; \
SOOT::AVToFloatVecInPlace<type>(aTHX_ (AV*)SvRV(src), len, (type*)dataAddr, idxdata.maxIndex);
#define SOOT_IntegerConversion(type) \
SOOT_RTXS_CALCADDRESS_ARRAY \
if (items > 1) { \
SOOT_AVToIntegerAry(type, ST(1)) \
} else { \
SOOT_ToIntegerAV(type) \
}
#define SOOT_UIntegerConversion(type) \
SOOT_RTXS_CALCADDRESS_ARRAY \
if (items > 1) { \
SOOT_AVToUIntegerAry(type, ST(1)) \
} else { \
SOOT_ToUIntegerAV(type) \
}
#define SOOT_FloatConversion(type) \
SOOT_RTXS_CALCADDRESS_ARRAY \
if (items > 1) { \
SOOT_AVToFloatAry(type, ST(1)) \
} else { \
SOOT_ToFloatAV(type) \
}
MODULE = SOOT PACKAGE = SOOT::RTXS
PROTOTYPES: DISABLE
void
access_struct_array_Bool_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_IntegerConversion(Bool_t)
void
access_struct_array_Char_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_RTXS_CALCADDRESS_ARRAY
if (items > 1) {
// FIXME investigate null-padding issues. In general the Char_t[5] thingies might not need it
size_t len;
char* buf = SvPV(ST(1), len);
if (idxdata.maxIndex < len)
len = idxdata.maxIndex;
strncpy( (char*)dataAddr, buf, len );
((char*)dataAddr)[len] = '\0'; // FIXME is this right?
} else {
XPUSHs(sv_2mortal(
newSVpvn((char*)dataAddr, idxdata.maxIndex)
));
}
void
access_struct_array_UChar_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_UIntegerConversion(UChar_t)
void
access_struct_array_Short_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_IntegerConversion(Short_t)
void
access_struct_array_UShort_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_UIntegerConversion(UShort_t)
void
access_struct_array_Int_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_IntegerConversion(Int_t)
void
access_struct_array_UInt_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_UIntegerConversion(UInt_t)
void
access_struct_array_Long_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_IntegerConversion(Long_t)
void
access_struct_array_ULong_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_UIntegerConversion(ULong_t)
void
access_struct_array_Long64_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_IntegerConversion(Long64_t)
void
access_struct_array_ULong64_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_UIntegerConversion(ULong64_t)
void
access_struct_array_Float_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_FloatConversion(Float_t)
void
access_struct_array_Double_t(self, ...)
SV* self;
ALIAS:
INIT:
SOOT_RTXS_INIT_ARRAY
PPCODE:
SOOT_FloatConversion(Double_t)
#undef SOOT_ToFloatAV
#undef SOOT_ToUIntegerAV
#undef SOOT_ToIntegerAV
#undef SOOT_AVToIntegerAry
#undef SOOT_AVToUIntegerAry
#undef SOOT_AVToFloatAry
#undef SOOT_IntegerConversion
#undef SOOT_UIntegerConversion
#undef SOOT_FloatConversion
( run in 1.361 second using v1.01-cache-2.11-cpan-5511b514fd6 )