trick/trick_source/sim_services/InputProcessor/MTV.cpp
jmpenn 2a03ff5cf4
Replace sprintf with snprintf in all of Trick source. #1384 (#1392)
* Replace sprintf with snprintf in all of Trick source. #1384

* Don't add -Werror for MacOS because of deprecated sprintf warnings which we cant get rid of because SWIG. #1384

* Fixed an unbalanced parenthesis in S_overrides.mk. #1384
2022-11-15 15:00:05 -06:00

135 lines
3.7 KiB
C++

#include <iostream>
#include "trick/MTV.hh"
#include "trick/VariableServer.hh"
#include "trick/EventManager_c_intf.hh"
Trick::MTV * the_mtv ;
Trick::MTV::MTV() :
mtv_list(NULL), mtv_count(0) {
the_mtv = this ;
}
/**
@details
Adds an event to mtv list.
-# Check to see if the event is already in the mtv list, return if it is.
-# Increment the number of events in the mtv list.
-# Reallocate the mtv_list to accomodate the new event.
-# Assign the last element of mtv_list to the incoming event.
-# Increment the update ticker so mtv knows something changed.
*/
int Trick::MTV::add_event( Trick::IPPythonEvent * in_event ) {
for ( unsigned int ii = 0 ; ii < mtv_count ; ii++ ) {
if (in_event == mtv_list[ii]) {
return (0) ;
}
}
mtv_count++;
if (mtv_count == 1) {
mtv_list = (Trick::IPPythonEvent **)TMM_declare_var_s("Trick::IPPythonEvent* mtv_list[1]");
} else {
mtv_list = (Trick::IPPythonEvent **)TMM_resize_array_1d_a(mtv_list, mtv_count);
}
mtv_list[mtv_count-1] = in_event ;
mtv_update_ticker++;
return 0 ;
}
/**
@details
Delete an event from mtv list.
-# If the event is in the mtv list
-# Set the event to a dummy event.
-# Increment the update ticker so mtv knows something changed.
*/
int Trick::MTV::delete_event( Trick::IPPythonEvent * in_event ) {
unsigned int ii ;
/* Remove it from mtv's event list. */
for ( ii = 0 ; ii < mtv_count ; ii++ ) {
if (in_event == mtv_list[ii]) {
mtv_list[ii] = &dummy_event;
mtv_update_ticker++;
break ;
}
}
return 0 ;
}
/**
@details
Find an event in the mtv list.
-# If the event is in the mtv list return it
*/
Trick::IPPythonEvent * Trick::MTV::get_event(std::string event_name) {
unsigned int ii ;
Trick::IPPythonEvent* ret = NULL;
for ( ii = 0 ; ii < mtv_count ; ii++ ) {
if ( ! mtv_list[ii]->get_name().compare(event_name) ) {
ret = mtv_list[ii];
break ;
}
}
return(ret) ;
}
/**
@details
Send mtv event data through the variable server.
-# For each event in the mtv_list
-# call var_add() for all the event information
-# Send the size of list of variables we've added
-# Send the data
-# Clear the var_add list.
*/
int Trick::MTV::send_event_data() {
char varname[80];
const char *mtv_name = "trick_ip.mtv.mtv_list";
unsigned int ii ;
int jj;
for (ii=0; ii < mtv_count; ii++) {
snprintf(varname, sizeof(varname), "%s[%u][0].name", mtv_name,ii);
var_add(varname);
snprintf(varname, sizeof(varname), "%s[%u][0].active", mtv_name,ii);
var_add(varname);
snprintf(varname, sizeof(varname), "%s[%u][0].added", mtv_name,ii);
var_add(varname);
snprintf(varname, sizeof(varname), "%s[%u][0].condition_count", mtv_name,ii);
var_add(varname);
snprintf(varname, sizeof(varname), "%s[%u][0].action_count", mtv_name,ii);
var_add(varname);
snprintf(varname, sizeof(varname), "%s[%u][0].before_after", mtv_name,ii);
var_add(varname);
for (jj=0; jj< mtv_list[ii]->condition_count; jj++) {
snprintf(varname, sizeof(varname), "%s[%u][0].cond[%d].comment", mtv_name,ii,jj);
var_add(varname);
}
for (jj=0; jj< mtv_list[ii]->action_count; jj++) {
snprintf(varname, sizeof(varname), "%s[%u][0].act[%d].comment", mtv_name,ii,jj);
var_add(varname);
}
if (mtv_list[ii]->get_before_after() > 0) {
snprintf(varname, sizeof(varname), "%s[%u][0].target_name", mtv_name,ii);
var_add(varname);
}
}
var_send_list_size() ;
var_send() ;
var_clear() ;
return 0 ;
}