1555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot// R specific swig components 2555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* 3555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot Vectors 4555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot*/ 5555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 6555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%fragment("StdVectorTraits","header",fragment="StdSequenceTraits") 7555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%{ 8555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot namespace swig { 9555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // vectors of doubles 10555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 11555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<double> > { 12555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector<double > *val, int owner = 0) { 13555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 14555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(REALSXP, val->size())); 15555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 16555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 17555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot NUMERIC_POINTER(result)[pos] = ((*val)[pos]); 18555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 19555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 20555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 21555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 22555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 23555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // vectors of floats 24555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 25555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<float> > { 26555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector<float > *val, int owner = 0) { 27555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 28555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(REALSXP, val->size())); 29555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 30555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 31555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot NUMERIC_POINTER(result)[pos] = ((*val)[pos]); 32555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 33555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 34555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 35555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 36555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 37555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // vectors of unsigned int 38555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 39555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<unsigned int> > { 40555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector<unsigned int > *val, int owner = 0) { 41555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 42555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(INTSXP, val->size())); 43555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 44555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 45555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot INTEGER_POINTER(result)[pos] = ((*val)[pos]); 46555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 47555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 48555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 49555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 50555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 51555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // vectors of int 52555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 53555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<int> > { 54555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector<int > *val, int owner = 0) { 55555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 56555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(INTSXP, val->size())); 57555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 58555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 59555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot INTEGER_POINTER(result)[pos] = ((*val)[pos]); 60555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 61555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 62555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 63555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 64555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 65555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 66555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // vectors of bool 67555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 68555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<bool> > { 69555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector<bool> *val, int owner = 0) { 70555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 71555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(LGLSXP, val->size())); 72555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 73555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 74555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot LOGICAL_POINTER(result)[pos] = ((*val)[pos]); 75555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 76555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 77555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 78555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot //return SWIG_R_NewPointerObj(val, type_info< std::vector<T > >(), owner); 79555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 80555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 81555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // vectors of strings 82555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 83555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<std::basic_string<char> > > { 84555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector<std::basic_string<char> > *val, int owner = 0) { 85555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 86555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(STRSXP, val->size())); 87555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 88555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 89555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot CHARACTER_POINTER(result)[pos] = Rf_mkChar(((*val)[pos]).c_str()); 90555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 91555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 92555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 93555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot //return SWIG_R_NewPointerObj(val, type_info< std::vector<T > >(), owner); 94555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 95555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 96555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 97555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // catch all that does everything with vectors 98555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <typename T> 99555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr< std::vector< T > > { 100555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector< T > *val, int owner = 0) { 101555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return SWIG_R_NewPointerObj(val, type_info< std::vector< T > >(), owner); 102555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 103555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 104555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 105555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 106555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector<double> > { 107555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector<double> **val) { 108555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<double> *p; 109555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // not sure how to check the size of the SEXP obj is correct 110555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned int sexpsz = Rf_length(obj); 111555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot p = new std::vector<double>(sexpsz); 112555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot double *S = NUMERIC_POINTER(obj); 113555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < p->size(); pos++) 114555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 115555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (*p)[pos] = static_cast<double>(S[pos]); 116555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 117555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_OK; 118555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 119555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 120555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 121555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 122555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 123555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 124555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 125555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 126555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector<float> > { 127555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector<float> **val) { 128555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<float> *p; 129555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // not sure how to check the size of the SEXP obj is correct 130555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned int sexpsz = Rf_length(obj); 131555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot p = new std::vector<float>(sexpsz); 132555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot double *S = NUMERIC_POINTER(obj); 133555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < p->size(); pos++) 134555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 135555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (*p)[pos] = static_cast<double>(S[pos]); 136555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 137555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_OK; 138555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 139555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 140555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 141555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 142555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 143555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 144555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 145555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 146555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector<unsigned int> > { 147555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector<unsigned int> **val) { 148555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<unsigned int> *p; 149555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned int sexpsz = Rf_length(obj); 150555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot p = new std::vector<unsigned int>(sexpsz); 151555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP coerced; 152555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(coerced = Rf_coerceVector(obj, INTSXP)); 153555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int *S = INTEGER_POINTER(coerced); 154555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < p->size(); pos++) 155555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 156555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (*p)[pos] = static_cast<unsigned int>(S[pos]); 157555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 158555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_OK; 159555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 160555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 161555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 162555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 163555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 164555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 165555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 166555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 167555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 168555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector<int> > { 169555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector<int> **val) { 170555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<int> *p; 171555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // not sure how to check the size of the SEXP obj is correct 172555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int sexpsz = Rf_length(obj); 173555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot p = new std::vector<int>(sexpsz); 174555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP coerced; 175555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(coerced = Rf_coerceVector(obj, INTSXP)); 176555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int *S = INTEGER_POINTER(coerced); 177555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < p->size(); pos++) 178555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 179555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (*p)[pos] = static_cast<int>(S[pos]); 180555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 181555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_OK; 182555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 183555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 184555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 185555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 186555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 187555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 188555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 189555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 190555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 191555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector<bool> > { 192555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector<bool> **val) { 193555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<bool> *p; 194555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // not sure how to check the size of the SEXP obj is correct 195555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int sexpsz = Rf_length(obj); 196555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot p = new std::vector<bool>(sexpsz); 197555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP coerced; 198555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(coerced = Rf_coerceVector(obj, LGLSXP)); 199555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int *S = LOGICAL_POINTER(coerced); 200555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < p->size(); pos++) 201555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 202555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (*p)[pos] = static_cast<bool>(S[pos]); 203555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 204555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_OK; 205555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 206555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 207555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 208555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 209555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 210555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 211555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 212555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 213555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // catchall for R to vector conversion 214555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <typename T> 215555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector<T> > { 216555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector<T> **val) { 217555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<T> *p; 218555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot Rprintf("my asptr\n"); 219555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_R_ConvertPtr(obj, (void**)&p, type_info< std::vector<T> >(), 0); 220555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 221555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 222555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 223555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 224555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 225555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 226555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 227555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // now for vectors of vectors. These will be represented as lists of vectors on the 228555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // catch all that does everything with vectors 229555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 230555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<std::vector<unsigned int> > > { 231555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector< std::vector<unsigned int > > *val, int owner = 0) { 232555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 233555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // allocate the R list 234555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(VECSXP, val->size())); 235555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 236555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 237555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // allocate the R vector 238555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SET_VECTOR_ELT(result, pos, Rf_allocVector(INTSXP, val->at(pos).size())); 239555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // Fill the R vector 240555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned vpos = 0; vpos < val->at(pos).size(); ++vpos) 241555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 242555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot INTEGER_POINTER(VECTOR_ELT(result, pos))[vpos] = static_cast<int>(val->at(pos).at(vpos)); 243555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 244555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 245555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 246555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 247555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 248555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 249555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 250555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 251555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<std::vector<int> > > { 252555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector< std::vector<int > > *val, int owner = 0) { 253555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 254555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // allocate the R list 255555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(VECSXP, val->size())); 256555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 257555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 258555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // allocate the R vector 259555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SET_VECTOR_ELT(result, pos, Rf_allocVector(INTSXP, val->at(pos).size())); 260555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // Fill the R vector 261555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned vpos = 0; vpos < val->at(pos).size(); ++vpos) 262555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 263555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot INTEGER_POINTER(VECTOR_ELT(result, pos))[vpos] = static_cast<int>(val->at(pos).at(vpos)); 264555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 265555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 266555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 267555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 268555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 269555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 270555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 271555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 272555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<std::vector<float> > > { 273555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector< std::vector<float > > *val, int owner = 0) { 274555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 275555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // allocate the R list 276555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(VECSXP, val->size())); 277555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 278555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 279555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // allocate the R vector 280555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SET_VECTOR_ELT(result, pos, Rf_allocVector(REALSXP, val->at(pos).size())); 281555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // Fill the R vector 282555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned vpos = 0; vpos < val->at(pos).size(); ++vpos) 283555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 284555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot NUMERIC_POINTER(VECTOR_ELT(result, pos))[vpos] = static_cast<double>(val->at(pos).at(vpos)); 285555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 286555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 287555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 288555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 289555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 290555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 291555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 292555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 293555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<std::vector<double> > > { 294555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector< std::vector<double > > *val, int owner = 0) { 295555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 296555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // allocate the R list 297555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(VECSXP, val->size())); 298555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 299555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 300555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // allocate the R vector 301555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SET_VECTOR_ELT(result, pos, Rf_allocVector(REALSXP, val->at(pos).size())); 302555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // Fill the R vector 303555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned vpos = 0; vpos < val->at(pos).size(); ++vpos) 304555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 305555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot NUMERIC_POINTER(VECTOR_ELT(result, pos))[vpos] = static_cast<double>(val->at(pos).at(vpos)); 306555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 307555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 308555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 309555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 310555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 311555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 312555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 313555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 314555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr<std::vector<std::vector<bool> > > { 315555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector< std::vector<bool> > *val, int owner = 0) { 316555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SEXP result; 317555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // allocate the R list 318555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot PROTECT(result = Rf_allocVector(VECSXP, val->size())); 319555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned pos = 0; pos < val->size(); pos++) 320555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 321555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // allocate the R vector 322555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SET_VECTOR_ELT(result, pos, Rf_allocVector(LGLSXP, val->at(pos).size())); 323555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // Fill the R vector 324555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned vpos = 0; vpos < val->at(pos).size(); ++vpos) 325555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 326555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot LOGICAL_POINTER(VECTOR_ELT(result, pos))[vpos] = (val->at(pos).at(vpos)); 327555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 328555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 329555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot UNPROTECT(1); 330555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return(result); 331555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 332555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 333555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 334555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <typename T> 335555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_from_ptr< std::vector < std::vector< T > > > { 336555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static SEXP from (std::vector < std::vector< T > > *val, int owner = 0) { 337555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return SWIG_R_NewPointerObj(val, type_info< std::vector < std::vector< T > > >(), owner); 338555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 339555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 340555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 341555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // R side 342555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 343555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector< std::vector<unsigned int> > > { 344555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector< std::vector<unsigned int> > **val) { 345555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector <std::vector<unsigned int> > *p; 346555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // this is the length of the list 347555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned int sexpsz = Rf_length(obj); 348555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot p = new std::vector< std::vector<unsigned int> > (sexpsz); 349555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 350555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned listpos = 0; listpos < sexpsz; ++listpos) 351555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 352555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned vecsize = Rf_length(VECTOR_ELT(obj, listpos)); 353555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned vpos = 0; vpos < vecsize; ++vpos) 354555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 355555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (*p)[listpos].push_back(static_cast<int>(INTEGER_POINTER(VECTOR_ELT(obj, listpos))[vpos])); 356555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 357555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 358555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 359555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_OK; 360555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 361555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 362555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 363555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 364555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 365555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 366555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 367555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 368555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 369555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector< std::vector< int> > > { 370555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector< std::vector< int> > **val) { 371555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector <std::vector< int> > *p; 372555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // this is the length of the list 373555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned int sexpsz = Rf_length(obj); 374555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot p = new std::vector< std::vector< int> > (sexpsz); 375555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 376555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned listpos = 0; listpos < sexpsz; ++listpos) 377555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 378555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned vecsize = Rf_length(VECTOR_ELT(obj, listpos)); 379555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned vpos = 0; vpos < vecsize; ++vpos) 380555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 381555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (*p)[listpos].push_back(static_cast<int>(INTEGER_POINTER(VECTOR_ELT(obj, listpos))[vpos])); 382555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 383555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 384555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 385555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_OK; 386555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 387555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 388555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 389555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 390555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 391555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 392555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 393555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 394555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 395555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector< std::vector< float> > > { 396555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector< std::vector< float> > **val) { 397555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector <std::vector< float> > *p; 398555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // this is the length of the list 399555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned int sexpsz = Rf_length(obj); 400555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot p = new std::vector< std::vector< float> > (sexpsz); 401555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 402555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned listpos = 0; listpos < sexpsz; ++listpos) 403555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 404555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned vecsize = Rf_length(VECTOR_ELT(obj, listpos)); 405555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned vpos = 0; vpos < vecsize; ++vpos) 406555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 407555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (*p)[listpos].push_back(static_cast<float>(NUMERIC_POINTER(VECTOR_ELT(obj, listpos))[vpos])); 408555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 409555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 410555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 411555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_OK; 412555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 413555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 414555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 415555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 416555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 417555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 418555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 419555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 420555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 421555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector< std::vector< double> > > { 422555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector< std::vector< double> > **val) { 423555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector <std::vector< double> > *p; 424555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // this is the length of the list 425555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned int sexpsz = Rf_length(obj); 426555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot p = new std::vector< std::vector< double> > (sexpsz); 427555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 428555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned listpos = 0; listpos < sexpsz; ++listpos) 429555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 430555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned vecsize = Rf_length(VECTOR_ELT(obj, listpos)); 431555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned vpos = 0; vpos < vecsize; ++vpos) 432555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 433555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (*p)[listpos].push_back(static_cast<double>(NUMERIC_POINTER(VECTOR_ELT(obj, listpos))[vpos])); 434555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 435555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 436555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 437555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_OK; 438555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 439555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 440555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 441555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 442555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 443555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 444555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 445555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 446555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> 447555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector< std::vector< bool > > > { 448555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector< std::vector< bool> > **val) { 449555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector <std::vector< bool > > *p; 450555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // this is the length of the list 451555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned int sexpsz = Rf_length(obj); 452555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot p = new std::vector< std::vector< bool > > (sexpsz); 453555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 454555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned listpos = 0; listpos < sexpsz; ++listpos) 455555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 456555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot unsigned vecsize = Rf_length(VECTOR_ELT(obj, listpos)); 457555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot for (unsigned vpos = 0; vpos < vecsize; ++vpos) 458555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 459555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (*p)[listpos].push_back(static_cast<bool>(LOGICAL_POINTER(VECTOR_ELT(obj, listpos))[vpos])); 460555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 461555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 462555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 463555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_OK; 464555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 465555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 466555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 467555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 468555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 469555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 470555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 471555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 472555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // catchall 473555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <typename T> 474555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot struct traits_asptr < std::vector< std::vector<T> > > { 475555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static int asptr(SEXP obj, std::vector< std::vector<T> > **val) { 476555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<T> > *p; 477555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot Rprintf("vector of vectors - unsupported content\n"); 478555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int res = SWIG_R_ConvertPtr(obj, (void**)&p, type_info< std::vector< std::vector<T> > > (), 0); 479555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (SWIG_IsOK(res)) { 480555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (val) *val = p; 481555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 482555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return res; 483555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 484555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 485555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 486555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 487555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%} 488555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 489555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define %swig_vector_methods(Type...) %swig_sequence_methods(Type) 490555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define %swig_vector_methods_val(Type...) %swig_sequence_methods_val(Type); 491555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 492555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%define %traits_type_name(Type...) 493555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%fragment(SWIG_Traits_frag(Type), "header", 494555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot fragment="StdTraits",fragment="StdVectorTraits") { 495555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot namespace swig { 496555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot template <> struct traits< Type > { 497555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot typedef pointer_category category; 498555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot static const char* type_name() { 499555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return #Type; 500555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 501555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot }; 502555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 503555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 504555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%enddef 505555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 506555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%include <std/std_vector.i> 507555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 508555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<double>) 509555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%traits_type_name(std::vector<double>) 510555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtypecheck") std::vector<double>, std::vector<double> const, std::vector<double> const& 511555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot %{ is.numeric($arg) %} 512555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtype") std::vector<double> "numeric" 513555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("scoercein") std::vector<double>, std::vector<double> const, std::vector<double> const& ""; 514555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 515555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<float>) 516555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%traits_type_name(std::vector<float>) 517555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtypecheck") std::vector<float>, std::vector<float> const, std::vector<float> const& 518555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot %{ is.numeric($arg) %} 519555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtype") std::vector<float> "numeric" 520555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("scoercein") std::vector<double>, std::vector<float> const, std::vector<float> const& ""; 521555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 522555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<bool>); 523555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%traits_type_name(std::vector<bool>); 524555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtypecheck") std::vector<bool> , std::vector<bool> const, std::vector<bool> const& 525555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot %{ is.logical($arg) %} 526555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtype") std::vector<bool> "logical" 527555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("scoercein") std::vector<bool> , std::vector<bool> const, std::vector<bool> const& "$input = as.logical($input);"; 528555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 529555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<int>); 530555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%traits_type_name(std::vector<int>); 531555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtypecheck") std::vector<int> , std::vector<int> const, std::vector<int> const& 532555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot %{ is.integer($arg) || is.numeric($arg) %} 533555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtype") std::vector<int> "integer" 534555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("scoercein") std::vector<int> , std::vector<int> const, std::vector<int> const& "$input = as.integer($input);"; 535555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 536555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<unsigned int>); 537555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%traits_type_name(std::vector<unsigned int>); 538555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtypecheck") std::vector<unsigned int>, std::vector<unsigned int> const, std::vector<unsigned int> const& 539555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%{ is.integer($arg) || is.numeric($arg) %} 540555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtype") std::vector<unsigned int> "integer" 541555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("scoercein") std::vector<unsigned int>, std::vector<unsigned int> const, std::vector<unsigned int> const& "$input = as.integer($input);"; 542555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 543555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<std::vector<unsigned int> >); 544555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%traits_type_name(std::vector< std::vector<unsigned int> >); 545555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtypecheck") std::vector<std::vector<unsigned int> >, std::vector<std::vector<unsigned int> > const, std::vector<std::vector<unsigned int> >const& 546555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot %{ is.list($arg) && all(sapply($arg , is.integer) || sapply($arg, is.numeric)) %} 547555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtype") std::vector<std::vector<unsigned int> > "list" 548555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("scoercein") std::vector< std::vector<unsigned int> >, std::vector<std::vector<unsigned int> > const, std::vector<std::vector<unsigned int> >const& "$input = lapply($input, as.integer);"; 549555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 550555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<std::vector<int> >); 551555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%traits_type_name(std::vector< std::vector<int> >); 552555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtypecheck") std::vector<std::vector<int> >, std::vector<std::vector<int> > const, std::vector<std::vector<int> >const& 553555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot %{ is.list($arg) && all(sapply($arg , is.integer) || sapply($arg, is.numeric)) %} 554555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtype") std::vector<std::vector<int> > "list" 555555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("scoercein") std::vector< std::vector<int> >, std::vector<std::vector<int> > const, std::vector<std::vector<int> >const& "$input = lapply($input, as.integer);"; 556555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 557555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<std::vector<float> >); 558555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%traits_type_name(std::vector< std::vector<float> >); 559555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtypecheck") std::vector<std::vector<float> >, std::vector<std::vector<float> > const, std::vector<std::vector<float> >const& 560555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot %{ is.list($arg) && all(sapply($arg , is.integer) || sapply($arg, is.numeric)) %} 561555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtype") std::vector<std::vector<float> > "list" 562555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("scoercein") std::vector< std::vector<float> >, std::vector<std::vector<float> > const, std::vector<std::vector<float> >const& "$input = lapply($input, as.numeric);"; 563555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 564555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<std::vector<double> >); 565555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%traits_type_name(std::vector< std::vector<double> >); 566555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtypecheck") std::vector<std::vector<double> >, std::vector<std::vector<double> > const, std::vector<std::vector<double> >const& 567555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot %{ is.list($arg) && all(sapply($arg , is.integer) || sapply($arg, is.numeric)) %} 568555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtype") std::vector<std::vector<double> > "list" 569555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("scoercein") std::vector< std::vector<double> >, std::vector<std::vector<double> > const, std::vector<std::vector<double> >const& 570555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot "$input = lapply($input, as.numeric);"; 571555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 572555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector<std::vector<bool> >); 573555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%traits_type_name(std::vector< std::vector<bool> >); 574555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtypecheck") std::vector<std::vector<bool> >, std::vector<std::vector<bool> > const, std::vector<std::vector<bool> >const& 575555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot %{ is.list($arg) && all(sapply($arg , is.integer) || sapply($arg, is.numeric)) %} 576555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("rtype") std::vector<std::vector<bool> > "list" 577555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap("scoercein") std::vector< std::vector<bool> >, std::vector<std::vector<bool> > const, std::vector<std::vector<bool> >const& "$input = lapply($input, as.logical);"; 578555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 579555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot// we don't want these to be given R classes as they 580555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot// have already been turned into R vectors. 581555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%typemap(scoerceout) std::vector<double>, 582555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<double> *, 583555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<double> &, 584555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<bool>, 585555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<bool> *, 586555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<bool> &, 587555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<unsigned int>, 588555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<unsigned int> *, 589555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector<unsigned int> &, 590555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot // vectors of vectors 591555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<unsigned int> >, 592555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<unsigned int> >*, 593555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<unsigned int> >&, 594555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<int> >, 595555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<int> >*, 596555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<int> >&, 597555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<float> >, 598555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<float> >*, 599555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<float> >&, 600555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<double> >, 601555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<double> >*, 602555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<double> >&, 603555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<bool> >, 604555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<bool> >*, 605555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot std::vector< std::vector<bool> >& 606555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 607555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 608555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot %{ %} 609