trick/test/SIM_test_ip/S_define
Pherring04 7b4253d703
Added swig support for templates with array parameters (#1742)
* Added support for templates with array parameters

* Added test case for array templates
2024-07-16 10:44:04 -05:00

167 lines
4.4 KiB
Plaintext

/************************TRICK HEADER*************************
PURPOSE:
(This comment lists out the other object files that are not included from c++ headers)
LIBRARY DEPENDENCIES:
(
)
*************************************************************/
#include "sim_objects/default_trick_sys.sm"
##include "test_ip/include/ClassOfEverything.hh"
##include "test_ip/include/ArrayTemplate.hh"
##include "test_ip/include/OverloadedVariable.hh"
class ArrayTemplateSimObject : public Trick::SimObject
{
public:
ArrayTemplateSimObject(const ArrayTemplateSimObject&) = delete;
ArrayTemplateSimObject& operator=(const ArrayTemplateSimObject&) = delete;
double a[3];
ArrayTemplate<double[3]> arryTemp;
ArrayTemplateSimObject()
: arryTemp(a)
{
}
};
ArrayTemplateSimObject arry_temp_object;
class testSimObject : public Trick::SimObject {
public:
bool test_false() {
return false ;
}
bool test_true() {
return true ;
}
ClassOfEverything obj ;
TEST_STRUCT t ;
my_ns::AA ns_test ;
Abstract * a ;
Abstract ** alist ;
Abstract * aarray[4] ;
std::vector< Abstract * > vap ;
std::vector< Abstract * > vap2 ;
std::vector< std::vector < Abstract * > > vvap ;
#ifndef __APPLE__
Child1 c1 ;
Child2 c2 ;
MomMom * mm ;
#endif
testSimObject() {}
private:
testSimObject (const testSimObject &);
testSimObject & operator= (const testSimObject &);
} ;
%header{
// Name the Abstract * vector type for SWIG.
##ifdef SWIG
%template(AbstractVector) std::vector< Abstract * >;
%template(AbstractVectorVector) std::vector< std::vector< Abstract * > > ;
##endif
%}
class disabledSimObject : public Trick::SimObject {
public:
void print_me() {
message_publish( 7 , "\033[31mThis statement in disabledSimObject should not print because the sim object is disabled!!!\033[0m\n" ) ;
add_test_result( "IPtest" , "Disable sim_object" , "job not disabled\n") ;
}
disabledSimObject() {
("initialization") print_me() ;
(10.0 , "scheduled") print_me() ;
}
} ;
class emptySimObject : public Trick::SimObject {
public:
ClassOfEverything obj ;
private:
emptySimObject (const emptySimObject &);
emptySimObject & operator= (const emptySimObject &);
} ;
class reallyemptySimObject : public Trick::SimObject {
public:
int ii ;
} ;
class plainClass {
public:
double d ;
float f ;
plainClass() : d() , f() {} ;
}
// Instantiations
testSimObject test_so ;
disabledSimObject disabled_obj ;
template <class T, typename U>
class TemplatedSimObject : public Trick::SimObject {
public:
T t ;
U u ;
TemplatedSimObject() : t(25) , u(37) {
}
} ;
/*
Templated SimObjects Howto:
Jobs with templated SimObjects will work without any extra work from the user. To use
templated SimObjects in the input file, we need some help from the user. Perhaps someday
the convert_swig script will add this code automatically, but for now it's a manual
process. We need to create a typedef from the templated type to a name without the [<,>]
or space characters. It must be formed by removing all spaces and transforming [<,>]
characters to "_". The template and trick_cast_as statements are required for SWIG and
use the typedef name we just created.
*/
%inline{
typedef TemplatedSimObject<int,double > TemplatedSimObject_int_double_ ;
##ifdef SWIG
%template (TemplatedSimObject_int_double_) TemplatedSimObject<int, double > ;
%trick_cast_as (TemplatedSimObject_int_double_, TemplatedSimObject_int_double_) ;
##endif
%}
TemplatedSimObject<int, double > tso ;
// Using the typedef name for the template will also work.
//TemplatedSimObject_int_double_ tso ;
/*
You can inherit from templated sim objects. As with using the templated sim
object directly, the typedef and SWIG section is required to access the values
within the template.
*/
class InheritFromTemplatedSimObject : public TemplatedSimObject< int, double > {
public:
int ii ;
} ;
InheritFromTemplatedSimObject iftso ;
// Connect objects
void create_connections() {
// Set the default termination time
trick_sys.sched.set_terminate_time(1.0) ;
trick_sys.sched.set_freeze_frame(0.10) ;
}