diff --git a/include/trick/DRAscii.hh b/include/trick/DRAscii.hh index bdcc227d..c5707888 100644 --- a/include/trick/DRAscii.hh +++ b/include/trick/DRAscii.hh @@ -68,7 +68,7 @@ namespace Trick { @code <my_drg> = trick.DRAscii("<in_name>") @endcode @copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name) */ - DRAscii( std::string in_name) ; + DRAscii( std::string in_name, Trick::DR_Type dr_type = DR_Type::DR_Type_Ascii ) ; /** @copybrief Trick::DataRecordGroup::format_specific_header diff --git a/include/trick/DRBinary.hh b/include/trick/DRBinary.hh index c7326703..ba2998ce 100644 --- a/include/trick/DRBinary.hh +++ b/include/trick/DRBinary.hh @@ -93,7 +93,7 @@ namespace Trick { @code <my_drg> = trick.DRBinary("<in_name>") @endcode @copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name) */ - DRBinary( std::string in_name, bool register_group = true, unsigned long job_config = 0x7F ) ; + DRBinary( std::string in_name, bool register_group = true, Trick::DR_Type dr_type = DR_Type::DR_Type_Binary ) ; /** @copybrief Trick::DataRecordGroup::format_specific_header diff --git a/include/trick/DRHDF5.hh b/include/trick/DRHDF5.hh index a241f20a..0486b4ac 100644 --- a/include/trick/DRHDF5.hh +++ b/include/trick/DRHDF5.hh @@ -101,7 +101,7 @@ GROUP "/" { @code <my_drg> = trick.DRHDF5("<in_name>") @endcode @copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name) */ - DRHDF5( std::string in_name) ; + DRHDF5( std::string in_name, Trick::DR_Type dr_type = DR_Type::DR_Type_HDF5) ; /** @copybrief Trick::DataRecordGroup::format_specific_header diff --git a/include/trick/DataRecordGroup.hh b/include/trick/DataRecordGroup.hh index b6c2ea7d..ee7ee9b9 100644 --- a/include/trick/DataRecordGroup.hh +++ b/include/trick/DataRecordGroup.hh @@ -42,6 +42,14 @@ namespace Trick { DR_Not_Specified = 3 /**< Unknown type */ } ; + enum class DR_Type : int { + DR_Type_None, + DR_Type_Ascii, + DR_Type_Binary, + DR_Type_HDF5, + DR_Type_FrameLogDataRecord + } ; + class DataRecordBuffer { public: char *buffer; /* ** generic holding buffer for data */ @@ -149,7 +157,7 @@ namespace Trick { @brief Constructor that creates a new data recording group with the given @c in_name. @param in_name - the new data recording group name */ - DataRecordGroup( std::string in_name = "", unsigned long job_config = 0x7F ) ; + DataRecordGroup( std::string in_name = "", Trick::DR_Type dr_type = DR_Type::DR_Type_None ) ; ~DataRecordGroup() ; @@ -409,7 +417,7 @@ namespace Trick { @brief This function adds jobs to the DRG based on job_config bits. By default a DRG should be constructed with all jobs on. @returns void */ - virtual void configure_jobs(unsigned long job_config) ; + void configure_jobs(DR_Type type) ; /** Check that a variable is supported by data recording. */ /** Variable must be a single primitive type - no STL, array, structured, string */ diff --git a/trick_source/sim_services/DataRecord/DRAscii.cpp b/trick_source/sim_services/DataRecord/DRAscii.cpp index 1d6f80ce..55ce144a 100644 --- a/trick_source/sim_services/DataRecord/DRAscii.cpp +++ b/trick_source/sim_services/DataRecord/DRAscii.cpp @@ -18,7 +18,7 @@ PROGRAMMERS: #include "trick/message_type.h" #include "trick/bitfield_proto.h" -Trick::DRAscii::DRAscii( std::string in_name ) : Trick::DataRecordGroup( in_name ) { +Trick::DRAscii::DRAscii( std::string in_name, Trick::DR_Type dr_type ) : Trick::DataRecordGroup( in_name, dr_type ) { ascii_float_format = "%20.8g" ; ascii_double_format = "%20.16g" ; diff --git a/trick_source/sim_services/DataRecord/DRBinary.cpp b/trick_source/sim_services/DataRecord/DRBinary.cpp index 03e71514..2b9b2038 100644 --- a/trick_source/sim_services/DataRecord/DRBinary.cpp +++ b/trick_source/sim_services/DataRecord/DRBinary.cpp @@ -22,7 +22,7 @@ PROGRAMMERS: Other classes inherit from DRBinary. In these cases, we don't want to register the memory as DRBinary, so register_group will be set to false. */ -Trick::DRBinary::DRBinary( std::string in_name, bool register_group, unsigned long job_config ) : Trick::DataRecordGroup(in_name, job_config) { +Trick::DRBinary::DRBinary( std::string in_name, bool register_group, Trick::DR_Type dr_type ) : Trick::DataRecordGroup(in_name, dr_type) { if ( register_group ) { register_group_with_mm(this, "Trick::DRBinary") ; } diff --git a/trick_source/sim_services/DataRecord/DRHDF5.cpp b/trick_source/sim_services/DataRecord/DRHDF5.cpp index 8f70f196..0ea955f6 100644 --- a/trick_source/sim_services/DataRecord/DRHDF5.cpp +++ b/trick_source/sim_services/DataRecord/DRHDF5.cpp @@ -14,7 +14,7 @@ PROGRAMMERS: #include "trick/memorymanager_c_intf.h" #include "trick/message_proto.h" -Trick::DRHDF5::DRHDF5( std::string in_name ) : Trick::DataRecordGroup(in_name) { +Trick::DRHDF5::DRHDF5( std::string in_name, Trick::DR_Type dr_type ) : Trick::DataRecordGroup(in_name, dr_type) { register_group_with_mm(this, "Trick::DRHDF5") ; } diff --git a/trick_source/sim_services/DataRecord/DataRecordGroup.cpp b/trick_source/sim_services/DataRecord/DataRecordGroup.cpp index a67f7076..846b9e32 100644 --- a/trick_source/sim_services/DataRecord/DataRecordGroup.cpp +++ b/trick_source/sim_services/DataRecord/DataRecordGroup.cpp @@ -54,7 +54,7 @@ Trick::DataRecordBuffer::~DataRecordBuffer() { free(ref) ; } -Trick::DataRecordGroup::DataRecordGroup( std::string in_name, unsigned long job_config ) : +Trick::DataRecordGroup::DataRecordGroup( std::string in_name, Trick::DR_Type dr_type ) : record(true) , inited(false) , group_name(in_name) , @@ -96,15 +96,7 @@ Trick::DataRecordGroup::DataRecordGroup( std::string in_name, unsigned long job_ // sim object name name = std::string("trick_data_record_group_") + in_name ; - /* - By default we want to configure our jobs. - Some derived classes (looking at you FrameDataRecordGroup) want to setup their jobs differently, - so we provide the option to disable this step - - For context - FrameDataRecordGroup does not want to create restart jobs, - but rather the FrameLog object which owns those DRG's will manually retsart them from the FrameLog's restart job. - */ - configure_jobs(job_config); + configure_jobs(dr_type) ; add_time_variable() ; } @@ -426,28 +418,28 @@ int Trick::DataRecordGroup::init() { } -void Trick::DataRecordGroup::configure_jobs(unsigned long job_config) -{ - // add_jobs_to_queue will fill in job_id later - // make the init job run after all other initialization jobs but before the post init checkpoint - // job so users can allocate memory in initialization jobs and checkpointing data rec groups will work - if(job_config & 1) - add_job(0, 1, (char *)"initialization", NULL, cycle, (char *)"init", (char *)"TRK", 65534) ; - if(job_config & 2) - add_job(0, 2, (char *)"end_of_frame", NULL, 1.0, (char *)"write_data", (char *)"TRK") ; - if(job_config & 4) - add_job(0, 3, (char *)"checkpoint", NULL, 1.0, (char *)"checkpoint", (char *)"TRK") ; - if(job_config & 8) - add_job(0, 4, (char *)"post_checkpoint", NULL, 1.0, (char *)"clear_checkpoint_vars", (char *)"TRK") ; - if(job_config & 16) +void Trick::DataRecordGroup::configure_jobs(DR_Type type) { + + //std::cout << "!!!!!!!!!! DataRecordGroup::configure_jobs: " << (int)type << std::endl; + + switch(type) { + default: // run the restart job in phase 60001 add_job(0, 5, (char *)"restart", NULL, 1.0, (char *)"restart", (char *)"TRK", 60001) ; - if(job_config & 32) + + case DR_Type::DR_Type_FrameLogDataRecord: + // add_jobs_to_queue will fill in job_id later + // make the init job run after all other initialization jobs but before the post init checkpoint + // job so users can allocate memory in initialization jobs and checkpointing data rec groups will work + add_job(0, 1, (char *)"initialization", NULL, cycle, (char *)"init", (char *)"TRK", 65534) ; + add_job(0, 2, (char *)"end_of_frame", NULL, 1.0, (char *)"write_data", (char *)"TRK") ; + add_job(0, 3, (char *)"checkpoint", NULL, 1.0, (char *)"checkpoint", (char *)"TRK") ; + add_job(0, 4, (char *)"post_checkpoint", NULL, 1.0, (char *)"clear_checkpoint_vars", (char *)"TRK") ; add_job(0, 6, (char *)"shutdown", NULL, 1.0, (char *)"shutdown", (char *)"TRK") ; - if(job_config & 64) write_job = add_job(0, 99, (char *)job_class.c_str(), NULL, cycle, (char *)"data_record" , (char *)"TRK") ; - + break ; + } } int Trick::DataRecordGroup::checkpoint() { diff --git a/trick_source/sim_services/FrameLog/FrameDataRecordGroup.cpp b/trick_source/sim_services/FrameLog/FrameDataRecordGroup.cpp index 2c18305d..d0923c21 100644 --- a/trick_source/sim_services/FrameLog/FrameDataRecordGroup.cpp +++ b/trick_source/sim_services/FrameLog/FrameDataRecordGroup.cpp @@ -9,7 +9,7 @@ -# All instances get the end_of_frame frame_log_clear job. */ Trick::FrameDataRecordGroup::FrameDataRecordGroup( int in_thread_id , std::string in_name ) - : Trick::DRBinary(in_name, false, 0x6F) , thread_id(in_thread_id ) { + : Trick::DRBinary(in_name, false, DR_Type::DR_Type_FrameLogDataRecord ), thread_id(in_thread_id ) { if ( thread_id > 0 ) { add_job(thread_id, 1000, (char *)"top_of_frame", NULL, 1.0, (char *)"start_timer", (char *)"TRK", 1) ; // Frame logging uses phase 65533 in FrameLog.ccp. Stop the timer just before that.