#pragma once #include "ros_bridge/include/messages/geographic_msgs/geopoint.h" #include "ros_bridge/rapidjson/include/rapidjson/document.h" #include namespace ros_bridge { //! @brief Namespace containing classes and methodes ros message generation. namespace messages { //! @brief Namespace containing classes and methodes for nemo_msgs //! generation. namespace nemo_msgs { //! @brief Namespace containing methodes for nemo_msgs/tile message //! generation. namespace labeled_progress { std::string messageType(); namespace { const char *progressKey = "progress"; const char *idKey = "id"; const char *tileKey = "tile"; } // namespace //! @brief C++ representation of nemo_msgs/tile message template class Container = std::vector> class GenericTile { public: typedef Container GeoContainer; GenericTile() {} GenericTile(const GeoContainer &tile, double progress, long id) : _tile(tile), _id(id), _progress(progress) {} long id() const { return _id; } void setId(long id) { _id = id; } double progress() const { return _progress; } void setProgress(double progress) { _progress = progress; } const GeoContainer &tile() const { return _tile; } GeoContainer &tile() { return _tile; } void setTile(const GeoContainer &tile) { _tile = tile; } protected: long _id; double _progress; GeoContainer _tile; }; typedef GenericTile<> Tile; template bool toJson(const TileType &tile, rapidjson::Value &value, rapidjson::Document::AllocatorType &allocator) { value.AddMember(idKey, tile.id(), allocator); value.AddMember(progressKey, tile.progress(), allocator); using namespace messages::geographic_msgs; rapidjson::Value geoPoints(rapidjson::kArrayType); for (unsigned long i = 0; i < std::uint64_t(tile.tile().size()); ++i) { rapidjson::Document geoPoint(rapidjson::kObjectType); if (!geo_point::toJson(tile.tile()[i], geoPoint, allocator)) { return false; } geoPoints.PushBack(geoPoint, allocator); } value.AddMember(tileKey, geoPoints, allocator); return true; } template bool fromJson(const rapidjson::Value &value, ProgressType &p) { if (!value.HasMember(progressKey) || !value[progressKey].IsDouble()) { return false; } if (!value.HasMember(idKey) || !value[idKey].IsInt()) { return false; } p.setId(value[idKey].GetInt()); p.setProgress(value[progressKey].GetDouble()); return true; } } // namespace labeled_progress } // namespace nemo_msgs } // namespace messages } // namespace ros_bridge