30  ss << 
"----------- PRINT STATE MACHINE STRUCTURE -------------------" << std::endl;
 
   32  for (
auto & val : this->
states)
 
   34    smacc2_msgs::msg::SmaccState stateMsg;
 
   35    auto state = val.second;
 
   36    stateMsg.index = state->stateIndex_;
 
   38    ss << 
"**** State: " << 
demangleSymbol(val.first.c_str()) << std::endl;
 
   40    stateMsg.name = state->getDemangledFullName();
 
   41    stateMsg.level = (int)state->getStateLevel();
 
   43    ss << 
"Index: " << stateMsg.index << std::endl;
 
   44    ss << 
"StateLevel: " << stateMsg.level << std::endl;
 
   46    ss << 
" Childstates:" << std::endl;
 
   48    for (
auto & child : state->children_)
 
   50      auto childStateName = child->getDemangledFullName();
 
   51      stateMsg.children_states.push_back(childStateName);
 
   53      ss << 
" - " << childStateName << std::endl;
 
   56    ss << 
" Transitions:" << std::endl;
 
   58    for (
auto & transition : state->transitions_)
 
   60      smacc2_msgs::msg::SmaccTransition transitionMsg;
 
   64      ss << 
" - Transition.  " << std::endl;
 
   65      ss << 
"      - Index: " << transitionMsg.index << std::endl;
 
   66      ss << 
"      - Transition Name: " << transitionMsg.transition_name << std::endl;
 
   67      ss << 
"      - Transition Type: " << transitionMsg.transition_type << std::endl;
 
   68      ss << 
"      - Event Type :" << transitionMsg.event.event_type << std::endl;
 
   69      ss << 
"      - Event Source: " << transitionMsg.event.event_source << std::endl;
 
   70      ss << 
"      - Event ObjectTag: " << transitionMsg.event.event_object_tag << std::endl;
 
   71      ss << 
"      - Event Label: " << transitionMsg.event.label << std::endl;
 
   72      ss << 
"      - Destiny State: " << transitionMsg.destiny_state_name << std::endl;
 
   73      ss << 
"      - Owner State: " << transitionMsg.destiny_state_name << std::endl;
 
   74      ss << 
"      - Is History Node: " << std::to_string(transitionMsg.history_node) << std::endl;
 
   75      ss << 
"      - TransitionC++Type: " << transition.transitionTypeInfo->getFullName()
 
   77      ss << 
"      - EventC++Type: " << transition.eventInfo->eventType->getFullName() << std::endl;
 
   79      stateMsg.transitions.push_back(transitionMsg);
 
   82    const std::type_info * statetid = state->tid_;
 
   84    std::map<const std::type_info *, std::vector<smacc2::ClientBehaviorInfoEntry *>>
 
   85      smaccBehaviorInfoMappingByOrthogonalType;
 
   87    ss << 
" Orthogonals:" << std::endl;
 
   92        if (smaccBehaviorInfoMappingByOrthogonalType.count(bhinfo.orthogonalType) == 0)
 
   94          smaccBehaviorInfoMappingByOrthogonalType[bhinfo.orthogonalType] =
 
   95            std::vector<smacc2::ClientBehaviorInfoEntry *>();
 
   98        smaccBehaviorInfoMappingByOrthogonalType[bhinfo.orthogonalType].push_back(&bhinfo);
 
  104    for (
auto & orthogonal : runtimeOrthogonals)
 
  106      smacc2_msgs::msg::SmaccOrthogonal orthogonalMsg;
 
  108      const auto * orthogonaltid = &
typeid(*(orthogonal.second));
 
  111      ss << 
" - orthogonal: " << orthogonalMsg.name << std::endl;
 
  113      if (smaccBehaviorInfoMappingByOrthogonalType[orthogonaltid].size() > 0)
 
  115        auto & behaviors = smaccBehaviorInfoMappingByOrthogonalType[orthogonaltid];
 
  116        for (
auto & bhinfo : behaviors)
 
  118          auto ClientBehaviorName = 
demangleSymbol(bhinfo->behaviorType->name());
 
  119          orthogonalMsg.client_behavior_names.push_back(ClientBehaviorName);
 
  120          ss << 
"          - client behavior: " << ClientBehaviorName << std::endl;
 
  125        ss << 
"          - NO CLIENT BEHAVIORS -" << std::endl;
 
  128      auto & clients = orthogonal.second->getClients();
 
  129      if (clients.size() > 0)
 
  131        for (
auto & client : clients)
 
  133          auto clientTid = client->getType();
 
  134          auto clientName = clientTid->getNonTemplatedTypeName();
 
  135          orthogonalMsg.client_names.push_back(clientName);
 
  136          ss << 
"          - client: " << clientName << std::endl;
 
  141        ss << 
"          - NO CLIENTS - " << std::endl;
 
  143      stateMsg.orthogonals.push_back(orthogonalMsg);
 
  146    ss << 
" State event generators:" << std::endl;
 
  152        smacc2_msgs::msg::SmaccEventGenerator eventGeneratorMsg;
 
  153        eventGeneratorMsg.index = k++;
 
  154        eventGeneratorMsg.type_name = eginfo->eventGeneratorType->getFullName();
 
  156        ss << 
" - event generator: " << eventGeneratorMsg.type_name << std::endl;
 
  157        if (eginfo->objectTagType != 
nullptr)
 
  159          eventGeneratorMsg.object_tag = eginfo->objectTagType->getFullName();
 
  160          ss << 
"        - object tag: " << eventGeneratorMsg.object_tag << std::endl;
 
  162        stateMsg.event_generators.push_back(eventGeneratorMsg);
 
  166    ss << 
" State reactors:" << std::endl;
 
  172        smacc2_msgs::msg::SmaccStateReactor stateReactorMsg;
 
  173        stateReactorMsg.index = k++;
 
  174        stateReactorMsg.type_name = srinfo->stateReactorType->getFullName();
 
  176        ss << 
" - state reactor: " << stateReactorMsg.type_name << std::endl;
 
  177        if (srinfo->objectTagType != 
nullptr)
 
  179          stateReactorMsg.object_tag = srinfo->objectTagType->getFullName();
 
  180          ss << 
"        - object tag: " << stateReactorMsg.object_tag << std::endl;
 
  183        for (
auto & tev : srinfo->sourceEventTypes)
 
  186          auto eventTypeName = tev->getEventTypeName();
 
  187          smacc2_msgs::msg::SmaccEvent event;
 
  189          ss << 
"             - triggering event: " << tev->getEventTypeName() << std::endl;
 
  190          event.event_type = eventTypeName;
 
  192          event.event_source = tev->getEventSourceName();
 
  193          ss << 
"                 - source type: " << 
event.event_source << std::endl;
 
  195          event.event_object_tag = tev->getOrthogonalName();
 
  196          ss << 
"                 - source object: " << 
event.event_object_tag << std::endl;
 
  198          event.label = tev->label;
 
  199          ss << 
"                 - event label: " << 
event.label << std::endl;
 
  201          stateReactorMsg.event_sources.push_back(event);
 
  204        stateMsg.state_reactors.push_back(stateReactorMsg);
 
  209      ss << 
"- NO STATE REACTORS - " << std::endl;
 
  212    ss << 
"----------------------------------------------------------" << std::endl;
 
  214    auto resumeMsg = ss.str();
 
  215    RCLCPP_INFO(
getLogger(), 
"%s", resumeMsg.c_str());
 
const std::map< std::string, std::shared_ptr< smacc2::ISmaccOrthogonal > > & getOrthogonals() const
 
static std::map< const std::type_info *, std::vector< std::shared_ptr< SmaccStateReactorInfo > > > stateReactorsInfo
 
static std::map< const std::type_info *, std::vector< std::shared_ptr< SmaccEventGeneratorInfo > > > eventGeneratorsInfo
 
static std::map< const std::type_info *, std::vector< ClientBehaviorInfoEntry > > staticBehaviorInfo
 
rclcpp::Logger getLogger()
 
std::map< std::string, std::shared_ptr< SmaccStateInfo > > states
 
std::vector< smacc2_msgs::msg::SmaccState > stateMsgs
 
void assembleSMStructureMessage(ISmaccStateMachine *sm)
 
std::string demangleSymbol()
 
void transitionInfoToMsg(const SmaccTransitionInfo &transition, smacc2_msgs::msg::SmaccTransition &transitionMsg)