#include "PerlCTypeConversion.h" #include "SOOTDebug.h" using namespace SOOT; using namespace std; namespace SOOT { char** AVToCStringVec(pTHX_ AV* av, size_t& len) { len = av_len(av)+1; if (len == 0) return NULL; SV** elem; char** retval = (char**)malloc(len*sizeof(char*)); for (unsigned int i = 0; i < len; ++i) { elem = av_fetch(av, i, 0); if (elem == NULL) croak("Bad AV element. Severe error"); retval[i] = strdup(SvPV_nolen(*elem)); } return retval; } std::vector AVToCStringVec(pTHX_ AV* av) { size_t len = av_len(av)+1; if (len == 0) return vector(); SV** elem; vector retval(len); for (unsigned int i = 0; i < len; ++i) { elem = av_fetch(av, i, 0); if (elem == NULL) croak("Bad AV element. Severe error"); retval[i] = strdup(SvPV_nolen(*elem)); } return retval; } std::vector AVToStringVec(pTHX_ AV* av) { size_t len = av_len(av)+1; if (len == 0) return vector(0); SV** elem; vector retval(len); for (unsigned int i = 0; i < len; ++i) { elem = av_fetch(av, i, 0); if (elem == NULL) croak("Bad AV element. Severe error"); STRLEN l; char* str = SvPV(*elem, l); retval[i] = string(str, l); } return retval; } } // end namespace SOOT