trick/trick_source/sim_services/CheckPointRestart/CheckPointRestart_c_intf.cpp
Jacqueline Deans f19ba7df78
Test and Document STL Checkpointing (#1355)
* Updates SIM_stl to include checkpoint writing and checkpoint restore, as well as adding more data structures to test
* Thoroughly tests supported STL types with MM_stl_checkpoint and MM_stl_restore
* Adds an option to enable or disable STL restore in accessible interfaces and changes default to true
* Updates documentation on STL checkpointing to clearly state limitations and known bugs
2022-10-07 08:37:09 -05:00

218 lines
5.4 KiB
C++

#include <stdlib.h>
#include "trick/CheckPointRestart.hh"
#include "trick/CheckPointRestart_c_intf.hh"
#include "trick/memorymanager_c_intf.h"
#include "trick/message_proto.h"
#include "trick/message_type.h"
/** Global singleton pointer to the CheckPointRestart. */
extern Trick::CheckPointRestart * the_cpr ;
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::set_pre_init_checkpoint
*/
extern "C" int checkpoint_pre_init( int yes_no ) {
the_cpr->set_pre_init_checkpoint(bool(yes_no)) ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::set_post_init_checkpoint
*/
extern "C" int checkpoint_post_init( int yes_no ) {
the_cpr->set_post_init_checkpoint(bool(yes_no)) ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::set_end_checkpoint
*/
extern "C" int checkpoint_end( int yes_no ) {
the_cpr->set_end_checkpoint(bool(yes_no)) ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::set_pre_init_checkpoint
*/
extern "C" int get_checkpoint_pre_init() {
return (int)the_cpr->pre_init_checkpoint ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::set_post_init_checkpoint
*/
extern "C" int get_checkpoint_post_init() {
return (int)the_cpr->post_init_checkpoint ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::set_end_checkpoint
*/
extern "C" int get_checkpoint_end() {
return (int)the_cpr->end_checkpoint ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::set_safestore_enabled
*/
extern "C" int checkpoint_safestore( int yes_no ) {
the_cpr->set_safestore_enabled(bool(yes_no)) ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::set_safestore_time
*/
extern "C" int checkpoint_safestore_period( double in_time ) {
the_cpr->set_safestore_time(in_time) ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::set_cpu_num
*/
extern "C" int checkpoint_cpu( int in_cpu_num ) {
the_cpr->set_cpu_num(in_cpu_num) ;
#if __APPLE__
message_publish(MSG_WARNING, "Warning: (Setting checkpoint cpu) Trick on Darwin does not yet support processor assignment.\n");
#endif
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::get_output_file
*/
extern "C" const char * checkpoint_get_output_file() {
return the_cpr->get_output_file() ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::get_load_file
*/
extern "C" const char * checkpoint_get_load_file() {
return the_cpr->get_load_file() ;
}
/**
* @relates Trick::CheckPointRestart
@brief @userdesc Command to dump a checkpoint now to the specified file.
This is invoked when the user clicks the "Dump ASCII Chkpnt" button on the sim control panel.
@par Python Usage:
@code trick.checkpoint("<file_name>") @endcode
@param file_name - name of checkpoint file to dump (leave blank and Trick will use filename "chkpnt_<simtime>"
@return always 0
*/
extern "C" int checkpoint( const char * file_name ) {
the_cpr->checkpoint(std::string(file_name)) ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
@brief @userdesc Command to dump a checkpoint now to the specified file, only dumping the specified sim objects.
This is invoked when the user clicks the "Dump ASCII Chkpnt" button on the sim control panel after having set "Checkpoint Objects" under the "Actions" menu.
@par Python Usage:
@code trick.checkpoint_objects("<file_name>", "<object>[,<object>,...]") @endcode
@param file_name - name of checkpoint file to dump (leave blank and Trick will use filename "chkpnt_<simtime>"
@param objects - string of comma separated sim object names to dump
@return always 0
*/
extern "C" int checkpoint_objects( const char * file_name , const char * objects ) {
the_cpr->checkpoint(std::string(file_name), true, std::string(objects)) ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::load_checkpoint
*/
extern "C" int load_checkpoint( const char * file_name ) {
the_cpr->load_checkpoint(std::string(file_name)) ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::load_checkpoint
*/
extern "C" int load_checkpoint_stls( const char * file_name, int on_off ) {
the_cpr->load_checkpoint(std::string(file_name), (bool) on_off) ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::load_checkpoint
*/
extern "C" int load_checkpoint_objects( const char * file_name ) {
the_cpr->load_checkpoint(std::string(file_name)) ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* @copydoc Trick::CheckPointRestart::load_checkpoint_job
*/
extern "C" int load_checkpoint_job() {
the_cpr->load_checkpoint_job() ;
return(0) ;
}
/**
* @relates Trick::CheckPointRestart
* This get_address has C bindings and is callable from regular C code.
* @param var_name - name of variable
*/
extern "C" void * get_address( const char * var_name ) {
REF2 * new_ref ;
new_ref = ref_attributes(var_name) ;
void * address ;
if ( new_ref != NULL ) {
address = new_ref->address ;
ref_free(new_ref) ;
free(new_ref) ;
return(address) ;
}
return(NULL) ;
}