"Fossies" - the Fresh Open Source Software Archive

Member "RPerl-5.002000/lib/RPerl/DataStructure/Array/SubTypes2D.cpp" (29 Nov 2019, 40118 Bytes) of package /linux/misc/RPerl-5.002000.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "SubTypes2D.cpp" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 5.000000_vs_5.002000.

    1 using std::cout;  using std::cerr;  using std::endl;  using std::to_string;
    2 
    3 #ifndef __CPP__INCLUDED__RPerl__DataStructure__Array__SubTypes2D_cpp
    4 #define __CPP__INCLUDED__RPerl__DataStructure__Array__SubTypes2D_cpp 0.005_000
    5 
    6 #include <RPerl/DataStructure/Array/SubTypes2D.h>  // -> ??? (relies on <vector> being included via Inline::CPP's AUTO_INCLUDE config option in RPerl/Inline.pm)
    7 
    8 // [[[ TYPE-CHECKING ]]]
    9 // [[[ TYPE-CHECKING ]]]
   10 // [[[ TYPE-CHECKING ]]]
   11 
   12 void integer_arrayref_arrayref_CHECK(SV* possible_integer_arrayref_arrayref)
   13 {
   14 //  fprintf(stderr, "in CPPOPS_CPPTYPES integer_arrayref_arrayref_CHECK(), top of subroutine\n");
   15 
   16     if ( not( SvOK(possible_integer_arrayref_arrayref) ) ) { croak( "\nERROR EIVAVRVAVRV00, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger_arrayref_arrayref value expected but undefined/null value found,\ncroaking" ); }
   17     if ( not( SvAROKp(possible_integer_arrayref_arrayref) ) ) { croak( "\nERROR EIVAVRVAVRV01, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger_arrayref_arrayref value expected but non-arrayref value found,\ncroaking" ); }
   18 
   19     AV* possible_integer_arrayref_array;
   20     integer possible_integer_arrayref_array_length;
   21     integer i;
   22     SV** possible_integer_arrayref_array_element;
   23 
   24     possible_integer_arrayref_array = (AV*)SvRV(possible_integer_arrayref_arrayref);
   25     possible_integer_arrayref_array_length = av_len(possible_integer_arrayref_array) + 1;
   26 
   27     for (i = 0;  i < possible_integer_arrayref_array_length;  ++i)  // incrementing iteration
   28     {
   29         possible_integer_arrayref_array_element = av_fetch(possible_integer_arrayref_array, i, 0);
   30         if ( not( SvOK(*possible_integer_arrayref_array_element) ) ) { croak( "\nERROR EIVAVRVAVRV02, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger_arrayref value expected but undefined/null value found at index %"INTEGER",\ncroaking", i ); }
   31         if ( not( SvAROKp(*possible_integer_arrayref_array_element) ) ) { croak( "\nERROR EIVAVRVAVRV03, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger_arrayref value expected but non-arrayref value found at index %"INTEGER",\ncroaking", i ); }
   32 
   33         SV* possible_integer_arrayref = *possible_integer_arrayref_array_element;
   34 
   35         AV* possible_integer_array;
   36         integer possible_integer_array_length;
   37         integer j;
   38         SV** possible_integer_array_element;
   39 
   40         possible_integer_array = (AV*)SvRV(possible_integer_arrayref);
   41         possible_integer_array_length = av_len(possible_integer_array) + 1;
   42 
   43         for (j = 0;  j < possible_integer_array_length;  ++j)  // incrementing iteration
   44         {
   45             possible_integer_array_element = av_fetch(possible_integer_array, j, 0);
   46             if (not(SvOK(*possible_integer_array_element))) { croak("\nERROR EIVAVRVAVRV04, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger value expected but undefined/null value found at index (%"INTEGER", %"INTEGER"),\ncroaking", i, j); }
   47             if (not(SvIOKp(*possible_integer_array_element))) { croak("\nERROR EIVAVRVAVRV05, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger value expected but non-integer value found at index (%"INTEGER", %"INTEGER"),\ncroaking", i, j); }
   48         }
   49     }
   50 //  fprintf(stderr, "in CPPOPS_CPPTYPES integer_arrayref_arrayref_CHECK(), bottom of subroutine\n");
   51 }
   52 
   53 void integer_arrayref_arrayref_CHECKTRACE(SV* possible_integer_arrayref_arrayref, const char* variable_name, const char* subroutine_name)
   54 {
   55 //  fprintf(stderr, "in CPPOPS_CPPTYPES integer_arrayref_arrayref_CHECKTRACE(), top of subroutine, received variable_name = %s\n", variable_name);
   56 //  fprintf(stderr, "in CPPOPS_CPPTYPES integer_arrayref_arrayref_CHECKTRACE(), top of subroutine, received subroutine_name = %s\n", subroutine_name);
   57 
   58     if ( not( SvOK(possible_integer_arrayref_arrayref) ) ) { croak( "\nERROR EIVAVRVAVRV00, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger_arrayref_arrayref value expected but undefined/null value found,\nin variable %s from subroutine %s,\ncroaking", variable_name, subroutine_name ); }
   59     if ( not( SvAROKp(possible_integer_arrayref_arrayref) ) ) { croak( "\nERROR EIVAVRVAVRV01, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger_arrayref_arrayref value expected but non-arrayref value found,\nin variable %s from subroutine %s,\ncroaking", variable_name, subroutine_name ); }
   60 
   61     AV* possible_integer_arrayref_array;
   62     integer possible_integer_arrayref_array_length;
   63     integer i;
   64     SV** possible_integer_arrayref_array_element;
   65 
   66     possible_integer_arrayref_array = (AV*)SvRV(possible_integer_arrayref_arrayref);
   67     possible_integer_arrayref_array_length = av_len(possible_integer_arrayref_array) + 1;
   68 
   69     for (i = 0;  i < possible_integer_arrayref_array_length;  ++i)  // incrementing iteration
   70     {
   71         possible_integer_arrayref_array_element = av_fetch(possible_integer_arrayref_array, i, 0);
   72         if ( not( SvOK(*possible_integer_arrayref_array_element) ) ) { croak( "\nERROR EIVAVRVAVRV02, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger_arrayref value expected but undefined/null value found at index %"INTEGER",\nin variable %s from subroutine %s,\ncroaking", i, variable_name, subroutine_name ); }
   73         if ( not( SvAROKp(*possible_integer_arrayref_array_element) ) ) { croak( "\nERROR EIVAVRVAVRV03, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger_arrayref value expected but non-arrayref value found at index %"INTEGER",\nin variable %s from subroutine %s,\ncroaking", i, variable_name, subroutine_name ); }
   74 
   75         SV* possible_integer_arrayref = *possible_integer_arrayref_array_element;
   76 
   77         AV* possible_integer_array;
   78         integer possible_integer_array_length;
   79         integer j;
   80         SV** possible_integer_array_element;
   81 
   82         possible_integer_array = (AV*)SvRV(possible_integer_arrayref);
   83         possible_integer_array_length = av_len(possible_integer_array) + 1;
   84 
   85         for (j = 0;  j < possible_integer_array_length;  ++j)  // incrementing iteration
   86         {
   87             possible_integer_array_element = av_fetch(possible_integer_array, j, 0);
   88             if (not(SvOK(*possible_integer_array_element))) { croak("\nERROR EIVAVRVAVRV04, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger value expected but undefined/null value found at index (%"INTEGER", %"INTEGER"),\nin variable %s from subroutine %s,\ncroaking", i, j, variable_name, subroutine_name ); }
   89             if (not(SvIOKp(*possible_integer_array_element))) { croak("\nERROR EIVAVRVAVRV05, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\ninteger value expected but non-integer value found at index (%"INTEGER", %"INTEGER"),\nin variable %s from subroutine %s,\ncroaking", i, j, variable_name, subroutine_name ); }
   90         }
   91     }
   92 //  fprintf(stderr, "in CPPOPS_CPPTYPES integer_arrayref_arrayref_CHECKTRACE(), bottom of subroutine\n");
   93 }
   94 
   95 
   96 void number_arrayref_arrayref_CHECK(SV* possible_number_arrayref_arrayref)
   97 {
   98 //  fprintf(stderr, "in CPPOPS_CPPTYPES number_arrayref_arrayref_CHECK(), top of subroutine\n");
   99 
  100     if ( not( SvOK(possible_number_arrayref_arrayref) ) ) { croak( "\nERROR ENVAVRVAVRV00, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber_arrayref_arrayref value expected but undefined/null value found,\ncroaking" ); }
  101     if ( not( SvAROKp(possible_number_arrayref_arrayref) ) ) { croak( "\nERROR ENVAVRVAVRV01, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber_arrayref_arrayref value expected but non-arrayref value found,\ncroaking" ); }
  102 
  103     AV* possible_number_arrayref_array;
  104     integer possible_number_arrayref_array_length;
  105     integer i;
  106     SV** possible_number_arrayref_array_element;
  107 
  108     possible_number_arrayref_array = (AV*)SvRV(possible_number_arrayref_arrayref);
  109     possible_number_arrayref_array_length = av_len(possible_number_arrayref_array) + 1;
  110 
  111     for (i = 0;  i < possible_number_arrayref_array_length;  ++i)  // incrementing iteration
  112     {
  113         possible_number_arrayref_array_element = av_fetch(possible_number_arrayref_array, i, 0);
  114         if ( not( SvOK(*possible_number_arrayref_array_element) ) ) { croak( "\nERROR ENVAVRVAVRV02, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber_arrayref value expected but undefined/null value found at index %"INTEGER",\ncroaking", i ); }
  115         if ( not( SvAROKp(*possible_number_arrayref_array_element) ) ) { croak( "\nERROR ENVAVRVAVRV03, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber_arrayref value expected but non-arrayref value found at index %"INTEGER",\ncroaking", i ); }
  116 
  117         SV* possible_number_arrayref = *possible_number_arrayref_array_element;
  118 
  119         AV* possible_number_array;
  120         integer possible_number_array_length;
  121         integer j;
  122         SV** possible_number_array_element;
  123 
  124         possible_number_array = (AV*)SvRV(possible_number_arrayref);
  125         possible_number_array_length = av_len(possible_number_array) + 1;
  126 
  127         for (j = 0;  j < possible_number_array_length;  ++j)  // incrementing iteration
  128         {
  129             possible_number_array_element = av_fetch(possible_number_array, j, 0);
  130             if (not(SvOK(*possible_number_array_element))) { croak("\nERROR ENVAVRVAVRV04, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber value expected but undefined/null value found at index (%"INTEGER", %"INTEGER"),\ncroaking", i, j); }
  131             if (not(SvNOKp(*possible_number_array_element))) { croak("\nERROR ENVAVRVAVRV05, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber value expected but non-number value found at index (%"INTEGER", %"INTEGER"),\ncroaking", i, j); }
  132         }
  133     }
  134 //  fprintf(stderr, "in CPPOPS_CPPTYPES number_arrayref_arrayref_CHECK(), bottom of subroutine\n");
  135 }
  136 
  137 void number_arrayref_arrayref_CHECKTRACE(SV* possible_number_arrayref_arrayref, const char* variable_name, const char* subroutine_name)
  138 {
  139 //  fprintf(stderr, "in CPPOPS_CPPTYPES number_arrayref_arrayref_CHECKTRACE(), top of subroutine, received variable_name = %s\n", variable_name);
  140 //  fprintf(stderr, "in CPPOPS_CPPTYPES number_arrayref_arrayref_CHECKTRACE(), top of subroutine, received subroutine_name = %s\n", subroutine_name);
  141 
  142     if ( not( SvOK(possible_number_arrayref_arrayref) ) ) { croak( "\nERROR ENVAVRVAVRV00, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber_arrayref_arrayref value expected but undefined/null value found,\nin variable %s from subroutine %s,\ncroaking", variable_name, subroutine_name ); }
  143     if ( not( SvAROKp(possible_number_arrayref_arrayref) ) ) { croak( "\nERROR ENVAVRVAVRV01, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber_arrayref_arrayref value expected but non-arrayref value found,\nin variable %s from subroutine %s,\ncroaking", variable_name, subroutine_name ); }
  144 
  145     AV* possible_number_arrayref_array;
  146     integer possible_number_arrayref_array_length;
  147     integer i;
  148     SV** possible_number_arrayref_array_element;
  149 
  150     possible_number_arrayref_array = (AV*)SvRV(possible_number_arrayref_arrayref);
  151     possible_number_arrayref_array_length = av_len(possible_number_arrayref_array) + 1;
  152 
  153     for (i = 0;  i < possible_number_arrayref_array_length;  ++i)  // incrementing iteration
  154     {
  155         possible_number_arrayref_array_element = av_fetch(possible_number_arrayref_array, i, 0);
  156         if ( not( SvOK(*possible_number_arrayref_array_element) ) ) { croak( "\nERROR ENVAVRVAVRV02, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber_arrayref value expected but undefined/null value found at index %"INTEGER",\nin variable %s from subroutine %s,\ncroaking", i, variable_name, subroutine_name ); }
  157         if ( not( SvAROKp(*possible_number_arrayref_array_element) ) ) { croak( "\nERROR ENVAVRVAVRV03, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber_arrayref value expected but non-arrayref value found at index %"INTEGER",\nin variable %s from subroutine %s,\ncroaking", i, variable_name, subroutine_name ); }
  158 
  159         SV* possible_number_arrayref = *possible_number_arrayref_array_element;
  160 
  161         AV* possible_number_array;
  162         integer possible_number_array_length;
  163         integer j;
  164         SV** possible_number_array_element;
  165 
  166         possible_number_array = (AV*)SvRV(possible_number_arrayref);
  167         possible_number_array_length = av_len(possible_number_array) + 1;
  168 
  169         for (j = 0;  j < possible_number_array_length;  ++j)  // incrementing iteration
  170         {
  171             possible_number_array_element = av_fetch(possible_number_array, j, 0);
  172             if (not(SvOK(*possible_number_array_element))) { croak("\nERROR ENVAVRVAVRV04, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber value expected but undefined/null value found at index (%"INTEGER", %"INTEGER"),\nin variable %s from subroutine %s,\ncroaking", i, j, variable_name, subroutine_name ); }
  173             if (not(SvNOKp(*possible_number_array_element))) { croak("\nERROR ENVAVRVAVRV05, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nnumber value expected but non-number value found at index (%"INTEGER", %"INTEGER"),\nin variable %s from subroutine %s,\ncroaking", i, j, variable_name, subroutine_name ); }
  174         }
  175     }
  176 //  fprintf(stderr, "in CPPOPS_CPPTYPES number_arrayref_arrayref_CHECKTRACE(), bottom of subroutine\n");
  177 }
  178 
  179 
  180 void string_arrayref_arrayref_CHECK(SV* possible_string_arrayref_arrayref)
  181 {
  182 //  fprintf(stderr, "in CPPOPS_CPPTYPES string_arrayref_arrayref_CHECK(), top of subroutine\n");
  183 
  184     if ( not( SvOK(possible_string_arrayref_arrayref) ) ) { croak( "\nERROR EPVAVRVAVRV00, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring_arrayref_arrayref value expected but undefined/null value found,\ncroaking" ); }
  185     if ( not( SvAROKp(possible_string_arrayref_arrayref) ) ) { croak( "\nERROR EPVAVRVAVRV01, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring_arrayref_arrayref value expected but non-arrayref value found,\ncroaking" ); }
  186 
  187     AV* possible_string_arrayref_array;
  188     integer possible_string_arrayref_array_length;
  189     integer i;
  190     SV** possible_string_arrayref_array_element;
  191 
  192     possible_string_arrayref_array = (AV*)SvRV(possible_string_arrayref_arrayref);
  193     possible_string_arrayref_array_length = av_len(possible_string_arrayref_array) + 1;
  194 
  195     for (i = 0;  i < possible_string_arrayref_array_length;  ++i)  // incrementing iteration
  196     {
  197         possible_string_arrayref_array_element = av_fetch(possible_string_arrayref_array, i, 0);
  198         if ( not( SvOK(*possible_string_arrayref_array_element) ) ) { croak( "\nERROR EPVAVRVAVRV02, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring_arrayref value expected but undefined/null value found at index %"INTEGER",\ncroaking", i ); }
  199         if ( not( SvAROKp(*possible_string_arrayref_array_element) ) ) { croak( "\nERROR EPVAVRVAVRV03, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring_arrayref value expected but non-arrayref value found at index %"INTEGER",\ncroaking", i ); }
  200 
  201         SV* possible_string_arrayref = *possible_string_arrayref_array_element;
  202 
  203         AV* possible_string_array;
  204         integer possible_string_array_length;
  205         integer j;
  206         SV** possible_string_array_element;
  207 
  208         possible_string_array = (AV*)SvRV(possible_string_arrayref);
  209         possible_string_array_length = av_len(possible_string_array) + 1;
  210 
  211         for (j = 0;  j < possible_string_array_length;  ++j)  // incrementing iteration
  212         {
  213             possible_string_array_element = av_fetch(possible_string_array, j, 0);
  214             if (not(SvOK(*possible_string_array_element))) { croak("\nERROR EPVAVRVAVRV04, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring value expected but undefined/null value found at index (%"INTEGER", %"INTEGER"),\ncroaking", i, j); }
  215             if (not(SvPOKp(*possible_string_array_element))) { croak("\nERROR EPVAVRVAVRV05, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring value expected but non-string value found at index (%"INTEGER", %"INTEGER"),\ncroaking", i, j); }
  216         }
  217     }
  218 //  fprintf(stderr, "in CPPOPS_CPPTYPES string_arrayref_arrayref_CHECK(), bottom of subroutine\n");
  219 }
  220 
  221 void string_arrayref_arrayref_CHECKTRACE(SV* possible_string_arrayref_arrayref, const char* variable_name, const char* subroutine_name)
  222 {
  223 //  fprintf(stderr, "in CPPOPS_CPPTYPES string_arrayref_arrayref_CHECKTRACE(), top of subroutine, received variable_name = %s\n", variable_name);
  224 //  fprintf(stderr, "in CPPOPS_CPPTYPES string_arrayref_arrayref_CHECKTRACE(), top of subroutine, received subroutine_name = %s\n", subroutine_name);
  225 
  226     if ( not( SvOK(possible_string_arrayref_arrayref) ) ) { croak( "\nERROR EPVAVRVAVRV00, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring_arrayref_arrayref value expected but undefined/null value found,\nin variable %s from subroutine %s,\ncroaking", variable_name, subroutine_name ); }
  227     if ( not( SvAROKp(possible_string_arrayref_arrayref) ) ) { croak( "\nERROR EPVAVRVAVRV01, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring_arrayref_arrayref value expected but non-arrayref value found,\nin variable %s from subroutine %s,\ncroaking", variable_name, subroutine_name ); }
  228 
  229     AV* possible_string_arrayref_array;
  230     integer possible_string_arrayref_array_length;
  231     integer i;
  232     SV** possible_string_arrayref_array_element;
  233 
  234     possible_string_arrayref_array = (AV*)SvRV(possible_string_arrayref_arrayref);
  235     possible_string_arrayref_array_length = av_len(possible_string_arrayref_array) + 1;
  236 
  237     for (i = 0;  i < possible_string_arrayref_array_length;  ++i)  // incrementing iteration
  238     {
  239         possible_string_arrayref_array_element = av_fetch(possible_string_arrayref_array, i, 0);
  240         if ( not( SvOK(*possible_string_arrayref_array_element) ) ) { croak( "\nERROR EPVAVRVAVRV02, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring_arrayref value expected but undefined/null value found at index %"INTEGER",\nin variable %s from subroutine %s,\ncroaking", i, variable_name, subroutine_name ); }
  241         if ( not( SvAROKp(*possible_string_arrayref_array_element) ) ) { croak( "\nERROR EPVAVRVAVRV03, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring_arrayref value expected but non-arrayref value found at index %"INTEGER",\nin variable %s from subroutine %s,\ncroaking", i, variable_name, subroutine_name ); }
  242 
  243         SV* possible_string_arrayref = *possible_string_arrayref_array_element;
  244 
  245         AV* possible_string_array;
  246         integer possible_string_array_length;
  247         integer j;
  248         SV** possible_string_array_element;
  249 
  250         possible_string_array = (AV*)SvRV(possible_string_arrayref);
  251         possible_string_array_length = av_len(possible_string_array) + 1;
  252 
  253         for (j = 0;  j < possible_string_array_length;  ++j)  // incrementing iteration
  254         {
  255             possible_string_array_element = av_fetch(possible_string_array, j, 0);
  256             if (not(SvOK(*possible_string_array_element))) { croak("\nERROR EPVAVRVAVRV04, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring value expected but undefined/null value found at index (%"INTEGER", %"INTEGER"),\nin variable %s from subroutine %s,\ncroaking", i, j, variable_name, subroutine_name ); }
  257             if (not(SvPOKp(*possible_string_array_element))) { croak("\nERROR EPVAVRVAVRV05, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:\nstring value expected but non-string value found at index (%"INTEGER", %"INTEGER"),\nin variable %s from subroutine %s,\ncroaking", i, j, variable_name, subroutine_name ); }
  258         }
  259     }
  260 //  fprintf(stderr, "in CPPOPS_CPPTYPES string_arrayref_arrayref_CHECKTRACE(), bottom of subroutine\n");
  261 }
  262 
  263 // [[[ TYPEMAP PACK/UNPACK FOR __CPP__TYPES ]]]
  264 // [[[ TYPEMAP PACK/UNPACK FOR __CPP__TYPES ]]]
  265 // [[[ TYPEMAP PACK/UNPACK FOR __CPP__TYPES ]]]
  266 
  267 # ifdef __CPP__TYPES
  268 
  269 // convert from (Perl SV containing RV to (Perl AV of (Perl SV containing RV to (Perl AV of (Perl SVs containing IVs))))) to (C++ std::vector of (C++ std::vector of integers))
  270 integer_arrayref_arrayref XS_unpack_integer_arrayref_arrayref(SV* input_avref_avref)
  271 {
  272 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_integer_arrayref_arrayref(), top of subroutine\n");
  273 //  integer_arrayref_arrayref_CHECK(input_avref_avref);
  274     integer_arrayref_arrayref_CHECKTRACE(input_avref_avref, "input_avref_avref", "XS_unpack_integer_arrayref_arrayref()");
  275 
  276     AV* input_avref_av;
  277     integer input_avref_av_length;
  278     integer i;
  279     SV** input_avref_av_element;
  280     integer_arrayref_arrayref output_vector_vector;
  281 
  282     input_avref_av = (AV*)SvRV(input_avref_avref);
  283     input_avref_av_length = av_len(input_avref_av) + 1;
  284 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_integer_arrayref_arrayref(), have input_avref_av_length = %"INTEGER"\n", input_avref_av_length);
  285 
  286     // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: vector has programmer-provided const size or compiler-guessable size,
  287     // resize() ahead of time to allow l-value subscript notation
  288     output_vector_vector.resize((size_t)input_avref_av_length);
  289 
  290     for (i = 0;  i < input_avref_av_length;  ++i)  // incrementing iteration
  291     {
  292         AV* input_av;
  293         integer input_av_length;
  294         integer j;
  295         SV** input_av_element;
  296         integer_arrayref output_vector;
  297 
  298         // utilizes i in element retrieval
  299         input_avref_av_element = av_fetch(input_avref_av, i, 0);
  300 
  301 //      input_av = (AV*)SvRV(*input_avref);  // input_avref is an unused shorthand for input_avref_av_element
  302         input_av = (AV*)SvRV(*input_avref_av_element);
  303         input_av_length = av_len(input_av) + 1;
  304 //      fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_integer_arrayref_arrayref(), have input_av_length = %"INTEGER"\n", input_av_length);
  305 
  306         // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: vector has programmer-provided const size or compiler-guessable size,
  307         // resize() ahead of time to allow l-value subscript notation
  308         output_vector.resize((size_t)input_av_length);
  309 
  310         for (j = 0;  j < input_av_length;  ++j)  // incrementing iteration
  311         {
  312             // utilizes j in element retrieval
  313             input_av_element = av_fetch(input_av, j, 0);
  314 
  315             // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: l-value subscript notation with no further resize(); utilizes j in assignment
  316             output_vector[j] = SvIV(*input_av_element);
  317         }
  318 
  319 //      fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_integer_arrayref_arrayref(), bottom of outer for() loop i = %"INTEGER", have output_vector.size() = %"INTEGER"\n", i, (integer) output_vector.size());
  320 
  321         // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: l-value subscript notation with no further resize(); utilizes i in assignment
  322         output_vector_vector[i] = output_vector;
  323     }
  324 
  325 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_integer_arrayref_arrayref(), after for() loop, have output_vector_vector.size() = %"INTEGER"\n", (integer) output_vector_vector.size());
  326 
  327 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_integer_arrayref_arrayref(), bottom of subroutine\n");
  328 
  329     return(output_vector_vector);
  330 }
  331 
  332 
  333 // convert from (C++ std::vector of (C++ std::vector of integers)) to (Perl SV containing RV to (Perl AV of (Perl SV containing RV to (Perl AV of (Perl SVs containing IVs)))))
  334 void XS_pack_integer_arrayref_arrayref(SV* output_avref_avref, integer_arrayref_arrayref input_vector_vector)
  335 {
  336 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), top of subroutine\n");
  337 
  338     AV* output_avref_av = newAV();  // initialize output array-of-arrays to empty
  339     integer input_vector_vector_length = input_vector_vector.size();
  340     integer i;
  341     SV* temp_sv_pointer;
  342 
  343 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), have input_vector_vector_length = %"INTEGER"\n", input_vector_vector_length);
  344 
  345     if (input_vector_vector_length > 0) {
  346         for (i = 0;  i < input_vector_vector_length;  ++i) {
  347 //            fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), top of outer loop, have i = %"INTEGER"\n", i);
  348             integer_arrayref input_vector = input_vector_vector[i];
  349 
  350             AV* output_av = newAV();  // initialize output sub-array to empty
  351             integer input_vector_length = input_vector.size();
  352             integer j;
  353 
  354 //          fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), have input_vector_length = %"INTEGER"\n", input_vector_length);
  355 
  356             if (input_vector_length > 0) {
  357                 for (j = 0;  j < input_vector_length;  ++j) {
  358 //                  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), top of inner loop, have (i, j) = (%"INTEGER", %"INTEGER")\n", i, j);
  359 //                  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), have input_vector_vector[%"INTEGER"][%"INTEGER"] = %"INTEGER"\n", i, j, input_vector[j]);
  360                     av_push(output_av, newSViv(input_vector[j]));
  361 //                  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), bottom of inner loop, have (i, j) = (%"INTEGER", %"INTEGER")\n", i, j);
  362                 }
  363             }
  364             else warn("in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), sub-array was empty, returning empty sub-array via newAV()");
  365 
  366             // NEED ANSWER: is it really okay to NOT increase the reference count below???
  367             av_push(output_avref_av, newRV_noinc((SV*)output_av));  // reference, do not increase reference count
  368 //          av_push(output_avref_av, newRV_inc((SV*)output_av));  // reference, do increase reference count
  369 
  370 //            fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), bottom of outer loop, have i = %"INTEGER"\n", i);
  371         }
  372     }
  373     else warn("in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), array was empty, returning empty array via newAV()");
  374 
  375     temp_sv_pointer = newSVrv(output_avref_avref, NULL);      // upgrade output stack SV to an RV
  376     SvREFCNT_dec(temp_sv_pointer);       // discard temporary pointer
  377     SvRV(output_avref_avref) = (SV*)output_avref_av;       // make output stack RV pointer at our output AV
  378 
  379 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_integer_arrayref_arrayref(), bottom of subroutine\n");
  380 }
  381 
  382 
  383 // convert from (Perl SV containing RV to (Perl AV of (Perl SV containing RV to (Perl AV of (Perl SVs containing NVs))))) to (C++ std::vector of (C++ std::vector of numbers))
  384 number_arrayref_arrayref XS_unpack_number_arrayref_arrayref(SV* input_avref_avref)
  385 {
  386 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_number_arrayref_arrayref(), top of subroutine\n");
  387 //  number_arrayref_arrayref_CHECK(input_avref_avref);
  388     number_arrayref_arrayref_CHECKTRACE(input_avref_avref, "input_avref_avref", "XS_unpack_number_arrayref_arrayref()");
  389 
  390     AV* input_avref_av;
  391     integer input_avref_av_length;
  392     integer i;
  393     SV** input_avref_av_element;
  394     number_arrayref_arrayref output_vector_vector;
  395 
  396     input_avref_av = (AV*)SvRV(input_avref_avref);
  397     input_avref_av_length = av_len(input_avref_av) + 1;
  398 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_number_arrayref_arrayref(), have input_avref_av_length = %"INTEGER"\n", input_avref_av_length);
  399 
  400     // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: vector has programmer-provided const size or compiler-guessable size,
  401     // resize() ahead of time to allow l-value subscript notation
  402     output_vector_vector.resize((size_t)input_avref_av_length);
  403 
  404     for (i = 0;  i < input_avref_av_length;  ++i)  // incrementing iteration
  405     {
  406         AV* input_av;
  407         integer input_av_length;
  408         integer j;
  409         SV** input_av_element;
  410         number_arrayref output_vector;
  411 
  412         // utilizes i in element retrieval
  413         input_avref_av_element = av_fetch(input_avref_av, i, 0);
  414 
  415 //      input_av = (AV*)SvRV(*input_avref);  // input_avref is an unused shorthand for input_avref_av_element
  416         input_av = (AV*)SvRV(*input_avref_av_element);
  417         input_av_length = av_len(input_av) + 1;
  418 //      fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_number_arrayref_arrayref(), have input_av_length = %"INTEGER"\n", input_av_length);
  419 
  420         // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: vector has programmer-provided const size or compiler-guessable size,
  421         // resize() ahead of time to allow l-value subscript notation
  422         output_vector.resize((size_t)input_av_length);
  423 
  424         for (j = 0;  j < input_av_length;  ++j)  // incrementing iteration
  425         {
  426             // utilizes j in element retrieval
  427             input_av_element = av_fetch(input_av, j, 0);
  428 
  429             // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: l-value subscript notation with no further resize(); utilizes j in assignment
  430             output_vector[j] = SvNV(*input_av_element);
  431         }
  432 
  433 //      fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_number_arrayref_arrayref(), bottom of outer for() loop i = %"INTEGER", have output_vector.size() = %"INTEGER"\n", i, (integer) output_vector.size());
  434 
  435         // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: l-value subscript notation with no further resize(); utilizes i in assignment
  436         output_vector_vector[i] = output_vector;
  437     }
  438 
  439 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_number_arrayref_arrayref(), after for() loop, have output_vector_vector.size() = %"INTEGER"\n", (integer) output_vector_vector.size());
  440 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_number_arrayref_arrayref(), bottom of subroutine\n");
  441 
  442     return(output_vector_vector);
  443 }
  444 
  445 
  446 // convert from (C++ std::vector of (C++ std::vector of numbers)) to (Perl SV containing RV to (Perl AV of (Perl SV containing RV to (Perl AV of (Perl SVs containing NVs)))))
  447 void XS_pack_number_arrayref_arrayref(SV* output_avref_avref, number_arrayref_arrayref input_vector_vector)
  448 {
  449 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), top of subroutine\n");
  450 
  451     AV* output_avref_av = newAV();  // initialize output array-of-arrays to empty
  452     integer input_vector_vector_length = input_vector_vector.size();
  453     integer i;
  454     SV* temp_sv_pointer;
  455 
  456 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), have input_vector_vector_length = %"INTEGER"\n", input_vector_vector_length);
  457 
  458     if (input_vector_vector_length > 0) {
  459         for (i = 0;  i < input_vector_vector_length;  ++i) {
  460 //            fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), top of outer loop, have i = %"INTEGER"\n", i);
  461             number_arrayref input_vector = input_vector_vector[i];
  462 
  463             AV* output_av = newAV();  // initialize output sub-array to empty
  464             integer input_vector_length = input_vector.size();
  465             integer j;
  466 
  467 //          fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), have input_vector_length = %"INTEGER"\n", input_vector_length);
  468 
  469             if (input_vector_length > 0) {
  470                 for (j = 0;  j < input_vector_length;  ++j) {
  471 //                  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), top of inner loop, have (i, j) = (%"INTEGER", %"INTEGER")\n", i, j);
  472 //                  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), have input_vector_vector[%"INTEGER"][%"INTEGER"] = %"INTEGER"\n", i, j, input_vector[j]);
  473                     av_push(output_av, newSVnv(input_vector[j]));
  474 //                  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), bottom of inner loop, have (i, j) = (%"INTEGER", %"INTEGER")\n", i, j);
  475                 }
  476             }
  477             else warn("in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), sub-array was empty, returning empty sub-array via newAV()");
  478 
  479             // NEED ANSWER: is it really okay to NOT increase the reference count below???
  480             av_push(output_avref_av, newRV_noinc((SV*)output_av));  // reference, do not increase reference count
  481 //          av_push(output_avref_av, newRV_inc((SV*)output_av));  // reference, do increase reference count
  482 
  483 //            fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), bottom of outer loop, have i = %"INTEGER"\n", i);
  484         }
  485     }
  486     else warn("in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), array was empty, returning empty array via newAV()");
  487 
  488     temp_sv_pointer = newSVrv(output_avref_avref, NULL);      // upgrade output stack SV to an RV
  489     SvREFCNT_dec(temp_sv_pointer);       // discard temporary pointer
  490     SvRV(output_avref_avref) = (SV*)output_avref_av;       // make output stack RV pointer at our output AV
  491 
  492 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_number_arrayref_arrayref(), bottom of subroutine\n");
  493 }
  494 
  495 
  496 // convert from (Perl SV containing RV to (Perl AV of (Perl SV containing RV to (Perl AV of (Perl SVs containing PVs))))) to (C++ std::vector of (C++ std::vector of strings))
  497 string_arrayref_arrayref XS_unpack_string_arrayref_arrayref(SV* input_avref_avref)
  498 {
  499 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_string_arrayref_arrayref(), top of subroutine\n");
  500 //  string_arrayref_arrayref_CHECK(input_avref_avref);
  501     string_arrayref_arrayref_CHECKTRACE(input_avref_avref, "input_avref_avref", "XS_unpack_string_arrayref_arrayref()");
  502 
  503     AV* input_avref_av;
  504     integer input_avref_av_length;
  505     integer i;
  506     SV** input_avref_av_element;
  507     string_arrayref_arrayref output_vector_vector;
  508 
  509     input_avref_av = (AV*)SvRV(input_avref_avref);
  510     input_avref_av_length = av_len(input_avref_av) + 1;
  511 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_string_arrayref_arrayref(), have input_avref_av_length = %"INTEGER"\n", input_avref_av_length);
  512 
  513     // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: vector has programmer-provided const size or compiler-guessable size,
  514     // resize() ahead of time to allow l-value subscript notation
  515     output_vector_vector.resize((size_t)input_avref_av_length);
  516 
  517     for (i = 0;  i < input_avref_av_length;  ++i)  // incrementing iteration
  518     {
  519         AV* input_av;
  520         integer input_av_length;
  521         integer j;
  522         SV** input_av_element;
  523         string_arrayref output_vector;
  524 
  525         // utilizes i in element retrieval
  526         input_avref_av_element = av_fetch(input_avref_av, i, 0);
  527 
  528 //      input_av = (AV*)SvRV(*input_avref);  // input_avref is an unused shorthand for input_avref_av_element
  529         input_av = (AV*)SvRV(*input_avref_av_element);
  530         input_av_length = av_len(input_av) + 1;
  531 //      fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_string_arrayref_arrayref(), have input_av_length = %"INTEGER"\n", input_av_length);
  532 
  533         // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: vector has programmer-provided const size or compiler-guessable size,
  534         // resize() ahead of time to allow l-value subscript notation
  535         output_vector.resize((size_t)input_av_length);
  536 
  537         for (j = 0;  j < input_av_length;  ++j)  // incrementing iteration
  538         {
  539             // utilizes j in element retrieval
  540             input_av_element = av_fetch(input_av, j, 0);
  541 
  542             // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: l-value subscript notation with no further resize(); utilizes j in assignment
  543             output_vector[j] = SvPV_nolen(*input_av_element);
  544         }
  545 
  546 //      fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_string_arrayref_arrayref(), bottom of outer for() loop i = %"INTEGER", have output_vector.size() = %"INTEGER"\n", i, (integer) output_vector.size());
  547 
  548         // VECTOR ELEMENT ASSIGNMENT, OPTION A, SUBSCRIPT, KNOWN SIZE: l-value subscript notation with no further resize(); utilizes i in assignment
  549         output_vector_vector[i] = output_vector;
  550     }
  551 
  552 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_string_arrayref_arrayref(), after for() loop, have output_vector_vector.size() = %"INTEGER"\n", (integer) output_vector_vector.size());
  553 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_unpack_string_arrayref_arrayref(), bottom of subroutine\n");
  554 
  555     return(output_vector_vector);
  556 }
  557 
  558 
  559 // convert from (C++ std::vector of (C++ std::vector of strings)) to (Perl SV containing RV to (Perl AV of (Perl SV containing RV to (Perl AV of (Perl SVs containing PVs)))))
  560 void XS_pack_string_arrayref_arrayref(SV* output_avref_avref, string_arrayref_arrayref input_vector_vector)
  561 {
  562 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), top of subroutine\n");
  563 
  564     AV* output_avref_av = newAV();  // initialize output array-of-arrays to empty
  565     integer input_vector_vector_length = input_vector_vector.size();
  566     integer i;
  567     SV* temp_sv_pointer;
  568 
  569 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), have input_vector_vector_length = %"INTEGER"\n", input_vector_vector_length);
  570 
  571     if (input_vector_vector_length > 0) {
  572         for (i = 0;  i < input_vector_vector_length;  ++i) {
  573 //            fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), top of outer loop, have i = %"INTEGER"\n", i);
  574             string_arrayref input_vector = input_vector_vector[i];
  575 
  576             AV* output_av = newAV();  // initialize output sub-array to empty
  577             integer input_vector_length = input_vector.size();
  578             integer j;
  579 
  580 //          fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), have input_vector_length = %"INTEGER"\n", input_vector_length);
  581 
  582             if (input_vector_length > 0) {
  583                 for (j = 0;  j < input_vector_length;  ++j) {
  584 //                  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), top of inner loop, have (i, j) = (%"INTEGER", %"INTEGER")\n", i, j);
  585 //                  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), have input_vector_vector[%"INTEGER"][%"INTEGER"] = %"INTEGER"\n", i, j, input_vector[j]);
  586                     av_push(output_av, newSVpv((const char *) input_vector[j].c_str(), 0));
  587 //                  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), bottom of inner loop, have (i, j) = (%"INTEGER", %"INTEGER")\n", i, j);
  588                 }
  589             }
  590             else warn("in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), sub-array was empty, returning empty sub-array via newAV()");
  591 
  592             // NEED ANSWER: is it really okay to NOT increase the reference count below???
  593             av_push(output_avref_av, newRV_noinc((SV*)output_av));  // reference, do not increase reference count
  594 //          av_push(output_avref_av, newRV_inc((SV*)output_av));  // reference, do increase reference count
  595 
  596 //            fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), bottom of outer loop, have i = %"INTEGER"\n", i);
  597         }
  598     }
  599     else warn("in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), array was empty, returning empty array via newAV()");
  600 
  601     temp_sv_pointer = newSVrv(output_avref_avref, NULL);      // upgrade output stack SV to an RV
  602     SvREFCNT_dec(temp_sv_pointer);       // discard temporary pointer
  603     SvRV(output_avref_avref) = (SV*)output_avref_av;       // make output stack RV pointer at our output AV
  604 
  605 //  fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_string_arrayref_arrayref(), bottom of subroutine\n");
  606 }
  607 
  608 # endif
  609 
  610 // [[[ STRINGIFY ]]]
  611 // [[[ STRINGIFY ]]]
  612 // [[[ STRINGIFY ]]]
  613 
  614 # ifdef __PERL__TYPES
  615 
  616 // THEN START HERE: implement *_arrayref_arrayref_to_string() & *_hashref_arrayref_to_string() CPPOPS_PERLTYPES
  617 // THEN START HERE: implement *_arrayref_arrayref_to_string() & *_hashref_arrayref_to_string() CPPOPS_PERLTYPES
  618 // THEN START HERE: implement *_arrayref_arrayref_to_string() & *_hashref_arrayref_to_string() CPPOPS_PERLTYPES
  619 
  620 # elif defined __CPP__TYPES
  621 
  622 // START HERE: implement *_arrayref_arrayref_to_string() & *_hashref_arrayref_to_string() CPPOPS_CPPTYPES
  623 // START HERE: implement *_arrayref_arrayref_to_string() & *_hashref_arrayref_to_string() CPPOPS_CPPTYPES
  624 // START HERE: implement *_arrayref_arrayref_to_string() & *_hashref_arrayref_to_string() CPPOPS_CPPTYPES
  625 
  626 # else
  627 
  628 Purposefully_die_from_a_compile-time_error,_due_to_neither___PERL__TYPES_nor___CPP__TYPES_being_defined.__We_need_to_define_exactly_one!
  629 
  630 # endif
  631 
  632 
  633 // [[[ TYPE TESTING ]]]
  634 // [[[ TYPE TESTING ]]]
  635 // [[[ TYPE TESTING ]]]
  636 
  637 # ifdef __PERL__TYPES
  638 
  639 // NEED ADD CODE HERE
  640 // NEED ADD CODE HERE
  641 // NEED ADD CODE HERE
  642 
  643 # elif defined __CPP__TYPES
  644 
  645 // NEED ADD CODE HERE
  646 // NEED ADD CODE HERE
  647 // NEED ADD CODE HERE
  648 
  649 # endif
  650 
  651 #endif