From 2e034cb3da21b766bc1f72b5194273dbb95762b3 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Thu, 26 Jan 2023 14:53:58 +0100 Subject: [PATCH] Add explicit ObjectID::FromString() and setFromString() --- .../libraries/ArmarXObjects/ObjectID.cpp | 35 +++++++++++++------ .../libraries/ArmarXObjects/ObjectID.h | 5 +++ 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectID.cpp b/source/RobotAPI/libraries/ArmarXObjects/ObjectID.cpp index f2d76a501..8a2856b25 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/ObjectID.cpp +++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectID.cpp @@ -19,16 +19,7 @@ namespace armarx { if (nameOrID.find("/") != nameOrID.npos) { - const std::vector<std::string> split = simox::alg::split(nameOrID, "/", true); - ARMARX_CHECK(split.size() == 2 || split.size() == 3) - << "Expected ID of format 'Dataset/ClassName' or 'Dataset/ClassName/InstanceName'" - << ", but got: '" << nameOrID << "' (too many '/')."; - _dataset = split[0]; - _className = split[1]; - if (split.size() == 3) - { - _instanceName = split[2]; - } + setFromString(nameOrID); } else { @@ -37,6 +28,30 @@ namespace armarx } } + ObjectID ObjectID::FromString(const std::string& idString) + { + ObjectID id; + id.setFromString(idString); + return id; + } + + void ObjectID::setFromString(const std::string& idString) + { + const std::vector<std::string> split = simox::alg::split(idString, "/", true); + ARMARX_CHECK(split.size() == 2 || split.size() == 3) + << "Expected ID of format 'Dataset/ClassName' or 'Dataset/ClassName/InstanceName'" + << ", but got: '" << idString << "' " + << "(expected 2 or 3 '/'s, but found " << split.size() << ")."; + + _dataset = split[0]; + _className = split[1]; + + if (split.size() == 3) + { + _instanceName = split[2]; + } + } + std::string ObjectID::str() const { std::string _str = _dataset + "/" + _className; diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectID.h b/source/RobotAPI/libraries/ArmarXObjects/ObjectID.h index 389b203a6..b152844b1 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/ObjectID.h +++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectID.h @@ -17,6 +17,9 @@ namespace armarx /// Construct from either a class name ("myobject") or ID ("mydataset/myobject", "mydataset/myclass/myinstance"). ObjectID(const std::string& nameOrID); + /// Construct from a string produced by `str()`, e.g. ("mydataset/myobject", "mydataset/myclass/myinstance"). + static ObjectID FromString(const std::string& idString); + inline std::string dataset() const { @@ -37,6 +40,8 @@ namespace armarx /// Return "dataset/className" or "dataset/className/instanceName". std::string str() const; + void setFromString(const std::string& idString); + /// Return just the class ID without an intance name. ObjectID getClassID() const; -- GitLab