mirror of
https://github.com/nasa/trick.git
synced 2025-04-07 19:34:23 +00:00
Add ability to clear all variables from a DR group
Don't let "sys.exec.out.time" be removed Refs #350
This commit is contained in:
parent
d859ac8453
commit
d72a09fef7
@ -318,9 +318,15 @@ namespace Trick {
|
||||
@par Python Usage:
|
||||
@code <dr_group>.remove_variable("<in_name>") @endcode
|
||||
@param in_name - the name of the variable to not record
|
||||
@return always 0
|
||||
*/
|
||||
virtual int remove_variable(std::string in_name) ;
|
||||
virtual void remove_variable(std::string in_name) ;
|
||||
|
||||
/**
|
||||
@brief @userdesc Command to remove all variables from recording.
|
||||
@par Python Usage:
|
||||
@code <dr_group>.remove_all_variable() @endcode
|
||||
*/
|
||||
virtual void remove_all_variables() ;
|
||||
|
||||
/**
|
||||
@brief This routine allows users to add variables through an already created REF2 structure.
|
||||
|
@ -247,19 +247,44 @@ int Trick::DataRecordGroup::add_variable( std::string in_name , std::string alia
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
int Trick::DataRecordGroup::remove_variable( std::string in_name ) {
|
||||
|
||||
void Trick::DataRecordGroup::remove_variable( std::string in_name ) {
|
||||
// Trim leading spaces
|
||||
in_name.erase( 0, in_name.find_first_not_of( " \t" ) );
|
||||
// Trim trailing spaces
|
||||
in_name.erase( in_name.find_last_not_of( " \t" ) + 1);
|
||||
|
||||
rec_buffer.erase( std::remove_if( rec_buffer.begin(), rec_buffer.end(),
|
||||
[&]( DataRecordBuffer* buffer ) {
|
||||
return !buffer->name.compare( in_name );
|
||||
} ),
|
||||
rec_buffer.end() );
|
||||
return 0 ;
|
||||
if (!in_name.compare("sys.exec.out.time")) {
|
||||
// This class assumes sim time is always the first variable.
|
||||
// Removing it results in errors.
|
||||
return;
|
||||
}
|
||||
|
||||
auto remove_from = [&](std::vector<DataRecordBuffer*>& buffer) {
|
||||
for (auto i = buffer.begin(); i != buffer.end(); ++i) {
|
||||
if (!(*i)->name.compare(in_name)) {
|
||||
delete *i;
|
||||
buffer.erase(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
remove_from(rec_buffer);
|
||||
remove_from(change_buffer);
|
||||
}
|
||||
|
||||
void Trick::DataRecordGroup::remove_all_variables() {
|
||||
// remove all but the first variable, which is sim time
|
||||
for (auto i = rec_buffer.begin() + 1; i != rec_buffer.end(); ++i) {
|
||||
delete *i;
|
||||
}
|
||||
rec_buffer.erase(rec_buffer.begin() + 1, rec_buffer.end());
|
||||
|
||||
// remove everything
|
||||
for (auto variable : change_buffer) {
|
||||
delete variable;
|
||||
}
|
||||
change_buffer.clear();
|
||||
}
|
||||
|
||||
int Trick::DataRecordGroup::add_variable( REF2 * ref2 ) {
|
||||
@ -647,22 +672,16 @@ int Trick::DataRecordGroup::disable() {
|
||||
|
||||
int Trick::DataRecordGroup::shutdown() {
|
||||
|
||||
unsigned int jj ;
|
||||
|
||||
// Force write out all data
|
||||
record = true ; // If user disabled group, make sure any recorded data gets written out
|
||||
write_data(true) ;
|
||||
format_specific_shutdown() ;
|
||||
|
||||
for (jj = 0; jj < rec_buffer.size() ; jj++) {
|
||||
delete rec_buffer[jj] ;
|
||||
}
|
||||
rec_buffer.clear() ;
|
||||
remove_all_variables();
|
||||
|
||||
for (jj = 0; jj < change_buffer.size() ; jj++) {
|
||||
delete change_buffer[jj] ;
|
||||
}
|
||||
change_buffer.clear() ;
|
||||
// remove_all_variables does not remove sim time
|
||||
delete rec_buffer[0];
|
||||
rec_buffer.clear();
|
||||
|
||||
if ( writer_buff ) {
|
||||
free(writer_buff) ;
|
||||
|
Loading…
x
Reference in New Issue
Block a user