mirror of
https://github.com/nasa/trick.git
synced 2024-12-24 07:16:41 +00:00
7b4253d703
* Added support for templates with array parameters * Added test case for array templates
167 lines
4.4 KiB
Plaintext
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) ;
|
|
}
|
|
|