Add calls for getting the total number of data recording groups and the data recording group pointer by its id number (#1799)

* Added new function calls to data_record_utilities for getting the total number of data recording groups and the data recording group pointer by its id number per customer request.

* Deleted unnecessary variable.

* Added a couple of more unit tests and fixed the return number to 0 instead of NULL for getting total number of drgs.
This commit is contained in:
Hong Chen 2024-11-12 10:42:46 -06:00 committed by GitHub
parent 937712daa4
commit e8508ea575
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 101 additions and 7 deletions

View File

@ -75,9 +75,15 @@ namespace Trick {
/** @brief Removes all data recording groups. */ /** @brief Removes all data recording groups. */
void remove_all_groups() ; void remove_all_groups() ;
/** @brief Gets a data recording group. */ /** @brief Gets a data recording group by its name. */
Trick::DataRecordGroup * get_group(std::string group_name) ; Trick::DataRecordGroup * get_group(std::string group_name) ;
/** @brief Gets a data recording group by its id number */
Trick::DataRecordGroup * get_group(int idx) ;
/** @brief Gets the size of all added data recroding groups */
int get_groups_size() ;
/** @brief Signal the write thread to execute. */ /** @brief Signal the write thread to execute. */
virtual int signal_thread() ; virtual int signal_thread() ;

View File

@ -23,6 +23,8 @@ int set_max_size_record_group (const char * in_name, uint64_t bytes ) ;
int add_data_record_group( Trick::DataRecordGroup * in_group, Trick::DR_Buffering buffering = Trick::DR_Not_Specified ) ; int add_data_record_group( Trick::DataRecordGroup * in_group, Trick::DR_Buffering buffering = Trick::DR_Not_Specified ) ;
int remove_data_record_group( Trick::DataRecordGroup * in_group ) ; int remove_data_record_group( Trick::DataRecordGroup * in_group ) ;
Trick::DataRecordGroup * get_data_record_group( std::string in_name ) ; Trick::DataRecordGroup * get_data_record_group( std::string in_name ) ;
Trick::DataRecordGroup * get_data_record_group_by_idx( int idx ) ;
int get_num_data_record_groups() ;
} }
#endif #endif

View File

@ -1,10 +1,59 @@
exec(open("Modified_data/dr_typesASCII.dr").read()) from trick.unit_test import *
exec(open("Modified_data/dr_typesBINARY.dr").read())
exec(open("Modified_data/dr_bitfASCII.dr").read())
exec(open("Modified_data/dr_bitfBINARY.dr").read())
trick_utest.unit_tests.enable() ; trick_utest.unit_tests.enable()
trick_utest.unit_tests.set_file_name( os.getenv("TRICK_HOME") + "/trick_test/SIM_test_dr.xml" ) ; trick_utest.unit_tests.set_file_name( os.getenv("TRICK_HOME") + "/trick_test/SIM_test_dr.xml" )
trick_utest.unit_tests.set_test_name( "DRTest" )
######################################################################################################################
test_suite = "drg api"
# Get the number of data recording groups before any drg is created
num_drgs = trick.get_num_data_record_groups()
# Check the result of trick.get_num_data_record_groups()
TRICK_EXPECT_EQ( num_drgs , 0 , test_suite , "0 drgs before any created" )
# The first item of each pair is the .dr file name and the second item of each pair is the drg name
dr_file_name_drg_name_tuple = (('Modified_data/dr_typesASCII.dr', 'DR_typesASCII'),
('Modified_data/dr_typesBINARY.dr', 'DR_typesBINARY'),
('Modified_data/dr_bitfASCII.dr', 'DR_bitfieldsASCII'),
('Modified_data/dr_bitfBINARY.dr', 'DR_bitfieldsBINARY'))
num_files = len(dr_file_name_drg_name_tuple)
for i in range(num_files):
exec(open(dr_file_name_drg_name_tuple[i][0]).read())
# Get the number of data recording groups created
num_drgs = trick.get_num_data_record_groups()
# Check the result of trick.get_num_data_record_groups()
TRICK_EXPECT_EQ( num_drgs , 4 , test_suite , "num of dr groups = 4" )
# Test trick.get_data_record_group(<drg_name>) for getting the drg pointer by its name
# Check the name of the obtained drg instead of the drg pointer
for i in range(num_drgs):
TRICK_EXPECT_EQ( trick.get_data_record_group(dr_file_name_drg_name_tuple[i][1]).get_group_name(), dr_file_name_drg_name_tuple[i][1], test_suite , "get drg by name " + dr_file_name_drg_name_tuple[i][1] )
# Test trick.get_data_record_group_by_idx(<drg_idx) for getting the drg pointer by its id number
# Check the name of the obtained drg instead of the drg pointer
for i in range(num_drgs):
TRICK_EXPECT_EQ( trick.get_data_record_group_by_idx(i).get_group_name(), dr_file_name_drg_name_tuple[i][1], test_suite , "get drg by drg id " + str(i) )
is_null = False
if trick.get_data_record_group(dr_file_name_drg_name_tuple[0][1]+'test') is None :
is_null = True
TRICK_EXPECT_TRUE( is_null, test_suite , "null drg by nonexistent drg name" )
is_null = False
if trick.get_data_record_group_by_idx(num_drgs+1) is None :
is_null = True
TRICK_EXPECT_TRUE( is_null, test_suite , "null drg by drg id 5" )
is_null = False
if trick.get_data_record_group_by_idx(-1) is None :
is_null = True
TRICK_EXPECT_TRUE( is_null, test_suite , "null drg by drg id -1" )
trick.stop(1.0) trick.stop(1.0)

View File

@ -180,6 +180,10 @@ void Trick::DataRecordDispatcher::remove_all_groups() {
} }
} }
/**
@details
-# Gets the data recording group by its name
*/
Trick::DataRecordGroup * Trick::DataRecordDispatcher::get_group(std::string in_name) { Trick::DataRecordGroup * Trick::DataRecordDispatcher::get_group(std::string in_name) {
std::vector <Trick::DataRecordGroup *>::iterator it ; std::vector <Trick::DataRecordGroup *>::iterator it ;
for ( it = groups.begin() ; it != groups.end() ; ++it ) { for ( it = groups.begin() ; it != groups.end() ; ++it ) {
@ -189,6 +193,25 @@ Trick::DataRecordGroup * Trick::DataRecordDispatcher::get_group(std::string in_n
return NULL ; return NULL ;
} }
/**
@details
-# Gets the data recording group by its id number
*/
Trick::DataRecordGroup * Trick::DataRecordDispatcher::get_group(int in_idx) {
if (!groups.empty() && in_idx > -1 && in_idx < groups.size()) {
return groups[in_idx];
}
return NULL ;
}
/**
@details
-# Gets the size of all added data recroding groups
*/
int Trick::DataRecordDispatcher::get_groups_size() {
return groups.size();
}
/** /**
@details @details
-# If the writer thread condition variable is unlocked -# If the writer thread condition variable is unlocked

View File

@ -79,6 +79,20 @@ extern "C" Trick::DataRecordGroup * get_data_record_group( std::string in_name )
return NULL ; return NULL ;
} }
extern "C" Trick::DataRecordGroup * get_data_record_group_by_idx( int in_idx ) {
if ( the_drd != NULL ) {
return the_drd->get_group(in_idx) ;
}
return NULL ;
}
extern "C" int get_num_data_record_groups() {
if ( the_drd != NULL ) {
return the_drd->get_groups_size() ;
}
return 0 ;
}
extern "C" int set_max_size_record_group (const char * in_name, uint64_t bytes ) { extern "C" int set_max_size_record_group (const char * in_name, uint64_t bytes ) {
if ( the_drd != NULL ) { if ( the_drd != NULL ) {
return the_drd->set_group_max_file_size(in_name, bytes ) ; return the_drd->set_group_max_file_size(in_name, bytes ) ;