Exemplo n.º 1
0
void print_introspection(MessagePtr message, const std::string& prefix) {
  if (!message->hasInstance()) {
    std::cout << "No instance!" << std::endl;
  }

  for(Message::const_iterator it = message->begin(); it != message->end(); ++it) {
    FieldPtr field = *it;

    std::cout << prefix << std::string(field->getDataType()) << " " << std::string(field->getName()) << " = ";
    if (field->isContainer()) std::cout << "[";

    if (field->isMessage()) {
      std::cout << std::endl;
      for(std::size_t i = 0; i < field->size(); i++) {
        MessagePtr expanded = field->expand(i);
        if (!expanded) {
          std::cout << prefix << "    (unknown)" << std::endl;
          continue;
        }
        print_introspection(expanded, prefix + "    ");
      }
      std::cout << prefix;
    } else {
      for(std::size_t i = 0; i < field->size(); i++) {
        if (i > 0) std::cout << ", ";
        std::cout << field->as<std::string>(i);
      }
    }
    if (field->isContainer()) std::cout << "]";
    std::cout << std::endl;
  }
}