The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

using std::cout; using std::cerr; using std::endl;
#ifndef __CPP__INCLUDED__RPerl__DataType__Character_cpp
#define __CPP__INCLUDED__RPerl__DataType__Character_cpp 0.003_000
// [[[ INCLUDES ]]]
#include <RPerl/HelperFunctions.cpp> // -> HelperFunctions.h
#include <RPerl/DataType/Character.h> // -> NULL (relies on native C type)
#include <RPerl/DataType/Boolean.cpp> // -> Boolean.h
#include <RPerl/DataType/UnsignedInteger.cpp> // -> UnsignedInteger.h
#include <RPerl/DataType/Integer.cpp> // -> Integer.h
#include <RPerl/DataType/Number.cpp> // -> Number.h
#include <RPerl/DataType/String.cpp> // -> String.h
// [[[ TYPEMAP PACK/UNPACK FOR __CPP__TYPES ]]]
// [[[ TYPEMAP PACK/UNPACK FOR __CPP__TYPES ]]]
// [[[ TYPEMAP PACK/UNPACK FOR __CPP__TYPES ]]]
// DEV NOTE, CORRELATION #rp010: the pack/unpack subs (below) are called by *_to_string_CPPTYPES(), moved outside #ifdef blocks
//# ifdef __CPP__TYPES
// convert from (Perl SV containing character) to (C character)
character XS_unpack_character(SV* input_sv) {
// character_CHECK(input_sv);
character_CHECKTRACE(input_sv, "input_sv", "XS_unpack_character()");
return((character) (SvPV_nolen(input_sv))[1]);
}
// convert from (C character) to (Perl SV containing character)
void XS_pack_character(SV* output_sv, character input_character) {
//fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_character(), top of subroutine\n");
//fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_character(), received input_character = %"INTEGER"\n", input_character);
sv_setsv(output_sv, sv_2mortal(newSVpvf("%c", input_character)));
//fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_character(), have output_sv = '%s'\n", SvPV_nolen(output_sv));
//fprintf(stderr, "in CPPOPS_CPPTYPES XS_pack_character(), bottom of subroutine\n");
}
//# endif
// [[[ BOOLEANIFY ]]]
// [[[ BOOLEANIFY ]]]
// [[[ BOOLEANIFY ]]]
# ifdef __PERL__TYPES
/* DISABLE UNTIL COMPLETE, TO AVOID C++ COMPILER WARNINGS
SV* character_to_boolean(SV* input_character) {
// character_CHECK(input_character);
character_CHECKTRACE(input_character, "input_character", "character_to_boolean()");
// NEED ADD CODE
}
*/
# elif defined __CPP__TYPES
boolean character_to_boolean(character input_character) {
if ((input_character - '0') == 0) { return 0; }
else { return 1; }
}
# endif
// [[[ UNSIGNED INTEGERIFY ]]]
// [[[ UNSIGNED INTEGERIFY ]]]
// [[[ UNSIGNED INTEGERIFY ]]]
# ifdef __PERL__TYPES
/* DISABLE UNTIL COMPLETE, TO AVOID C++ COMPILER WARNINGS
SV* character_to_unsigned_integer(SV* input_character) {
// character_CHECK(input_character);
character_CHECKTRACE(input_character, "input_character", "character_to_unsigned_integer()");
// NEED ADD CODE
}
*/
# elif defined __CPP__TYPES
unsigned_integer character_to_unsigned_integer(character input_character) {
return (unsigned_integer) (input_character - '0');
}
# endif
// [[[ INTEGERIFY ]]]
// [[[ INTEGERIFY ]]]
// [[[ INTEGERIFY ]]]
# ifdef __PERL__TYPES
/* DISABLE UNTIL COMPLETE, TO AVOID C++ COMPILER WARNINGS
SV* character_to_integer(SV* input_character) {
// character_CHECK(input_character);
character_CHECKTRACE(input_character, "input_character", "character_to_integer()");
// NEED ADD CODE
}
*/
# elif defined __CPP__TYPES
integer character_to_integer(character input_character) {
return (integer) (input_character - '0');
}
# endif
// [[[ NUMBERIFY ]]]
// [[[ NUMBERIFY ]]]
// [[[ NUMBERIFY ]]]
# ifdef __PERL__TYPES
/* DISABLE UNTIL COMPLETE, TO AVOID C++ COMPILER WARNINGS
SV* character_to_number(SV* input_character) {
// character_CHECK(input_character);
character_CHECKTRACE(input_character, "input_character", "character_to_number()");
// NEED ADD CODE
}
*/
# elif defined __CPP__TYPES
number character_to_number(character input_character) {
return (number) (input_character - '0');
}
# endif
// [[[ STRINGIFY ]]]
// [[[ STRINGIFY ]]]
// [[[ STRINGIFY ]]]
# ifdef __PERL__TYPES
SV* character_to_string(SV* input_character) {
// character_CHECK(input_character);
character_CHECKTRACE(input_character, "input_character", "character_to_string()");
// fprintf(stderr, "in CPPOPS_PERLTYPES character_to_string(), top of subroutine, received unformatted input_character = %s\n", SvPV_nolen(input_character));
return input_character;
}
# elif defined __CPP__TYPES
string character_to_string(character input_character) {
string retval(1, input_character);
return retval;
}
# endif
// [[[ TYPE TESTING ]]]
// [[[ TYPE TESTING ]]]
// [[[ TYPE TESTING ]]]
# ifdef __PERL__TYPES
SV* character_typetest0() {
return newSVpvf("%c", (character) (SvIV(RPerl__DataType__Character__MODE_ID()) + '0'));
}
SV* character_typetest1(SV* lucky_character) {
// character_CHECK(lucky_character);
character_CHECKTRACE(lucky_character, "lucky_character", "character_typetest1()");
//fprintf(stderr, "in CPPOPS_PERLTYPES character_typetest1(), received lucky_character = %"INTEGER"\n", SvIV(lucky_character));
return newSVpvf("%c", (character) ((SvPV_nolen(lucky_character))[0] + SvIV(RPerl__DataType__Character__MODE_ID())));
}
# elif defined __CPP__TYPES
character character_typetest0() {
return (RPerl__DataType__Character__MODE_ID() + '0');
}
character character_typetest1(character lucky_character) {
return (lucky_character + RPerl__DataType__Character__MODE_ID());
}
# endif
#endif