Program Listing for File parser_configuration.h

Return to documentation for file (src/parser_configuration.h)

#ifndef PJ_PARSER_CONFIGURATION_H
#define PJ_PARSER_CONFIGURATION_H

#include <QStringList>
#include <QSettings>
#include <QDomDocument>

#include <PlotJuggler/plotdata.h>
#include <PlotJuggler/messageparser_base.h>

namespace PJ
{

struct RosParserConfig
{
  QStringList topics;
  unsigned max_array_size = 999;
  bool use_header_stamp = false;
  bool discard_large_arrays = false;
  bool boolean_strings_to_number = false;
  bool remove_suffix_from_strings = false;

  void xmlSaveState(QDomDocument& doc, QDomElement& plugin_elem) const;
  void xmlLoadState(const QDomElement& parent_element);

  void saveToSettings(QSettings& setting, QString prefix) const;
  void loadFromSettings(const QSettings& settings, QString prefix);
};


// aggregator front-end to many parsers
class CompositeParser
{
  public:

  void addParser(const std::string& topic_name, std::shared_ptr<PJ::MessageParser> parser);

  const RosParserConfig& getConfig();

  void setConfig(const RosParserConfig& config);

  bool parseMessage(const std::string& topic_name, MessageRef serialized_msg, double& timestamp);

  void clear() { _parsers.clear(); }

  bool hasParser(const std::string& topic_name) { return _parsers.count(topic_name) != 0; }

  protected:

  std::unordered_map<std::string, std::shared_ptr<PJ::MessageParser>> _parsers;
  RosParserConfig _config;
};

bool ParseDouble(const std::string& str, double& value, bool remover_suffix, bool parse_boolean);


}

#endif // PARSER_CONFIGURATION_H