00001 00006 #ifndef STRINGUTILITIES_H_ 00007 #define STRINGUTILITIES_H_ 00008 00009 #include <string> 00010 #include <vector> 00011 #include <boost/regex.hpp> 00012 #include <boost/algorithm/string.hpp> // For string splitting 00013 #include "nasa_common_logging/Logger.h" 00014 00015 namespace StringUtilities 00016 { 00017 bool isFullyQualifiedRobonetNode(const std::string& name); 00018 bool isFullyQualifiedRobonetElement(const std::string& name); 00019 00020 std::string getRobonetChannel(const std::string& name); 00021 std::string getRobonetNode(const std::string& name); 00022 std::string getFullyQualifiedRobonetNode(const std::string& name); 00023 std::string getRobonetElement(const std::string& name); 00024 00025 std::string makeFullyQualifiedRobonetNode(const std::string& channel, const std::string& node); 00026 std::string makeFullyQualifiedRobonetElement(const std::string& fqNode, const std::string& element); 00027 std::string makeFullyQualifiedRobonetElement(const std::string& channel, const std::string& node, const std::string& element); 00028 00029 bool isFullyQualifiedRoboDynChain(const std::string& name); 00030 bool isFullyQualifiedRoboDynJoint(const std::string& name); 00031 bool isFullyQualifiedRoboDynJointWithGroup(const std::string& name); 00032 00033 std::string getRoboDynChain(const std::string& name); 00034 std::string getFullyQualifiedRoboDynChain(const std::string& name); 00035 std::string getRoboDynJoint(const std::string& name); 00036 std::string getRoboDynJointGroup(const std::string& name); 00037 std::string getRoboDynJointWithGroup(const std::string& name); 00038 std::string getRoboDynEverythingButJoint(const std::string& name); 00039 00040 std::string makeFullyQualifiedRoboDynChain(const std::string& chain); 00041 std::string makeFullyQualifiedRoboDynJoint(const std::string& chain, const std::string& joint); 00042 std::string makeFullyQualifiedRoboDynJointGroup(const std::string& chain, const std::string& group); 00043 std::string makeFullyQualifiedRoboDynJointWithGroup(const std::string& chain, const std::string& group, const std::string& joint); 00044 std::string makeFullyQualifiedRoboDynElement(const std::string& fqJoint, const std::string& element); 00045 00046 bool isItemWithNumber(const std::string& name); 00047 00048 std::string getItem(const std::string& name); 00049 std::string getNumber(const std::string& name); 00050 00051 const std::string TOKEN_DELIMITER = "/"; 00052 const std::string ROBODYN_PREFIX = "r2"; 00053 const boost::regex VALID_ROBONET_NODE(TOKEN_DELIMITER + "([[:word:]]+)" + TOKEN_DELIMITER + "([[:word:]]+)"); 00054 const boost::regex VALID_ROBONET_ELEMENT(TOKEN_DELIMITER + "([[:word:]]+)" + TOKEN_DELIMITER + "([[:word:]]+)" + TOKEN_DELIMITER + "([[:word:]\\.]+)"); 00055 const boost::regex VALID_ROBODYN_CHAIN(ROBODYN_PREFIX + TOKEN_DELIMITER + "([[:word:]]+)"); 00056 const boost::regex VALID_ROBODYN_JOINT(ROBODYN_PREFIX + TOKEN_DELIMITER + "([[:word:]]+)" + TOKEN_DELIMITER + "([[:word:]]+)"); 00057 const boost::regex VALID_ROBODYN_JOINT_WITH_GROUP(ROBODYN_PREFIX + TOKEN_DELIMITER + "([[:word:]]+)" + TOKEN_DELIMITER + "([[:word:]" + TOKEN_DELIMITER + "]+)" + TOKEN_DELIMITER + "([[:word:]]+)"); 00058 const boost::regex ITEM_WITH_NUMBER("([[:word:]" + TOKEN_DELIMITER + "]+)([[:digit:]]+)"); 00059 }; 00060 00061 #endif /* STRINGUTILITIES_H_ */