utils.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <algorithm>
4 #include <regex>
5 #include <stdexcept>
6 #include <string>
7 #include <utility>
8 #include <vector>
9 
10 namespace foxglove_bridge {
11 
12 inline std::pair<std::string, std::string> getNodeAndNodeNamespace(const std::string& fqnNodeName) {
13  const std::size_t found = fqnNodeName.find_last_of("/");
14  if (found == std::string::npos) {
15  throw std::runtime_error("Invalid fully qualified node name: " + fqnNodeName);
16  }
17  return std::make_pair(fqnNodeName.substr(0, found), fqnNodeName.substr(found + 1));
18 }
19 
20 inline std::string trimString(std::string& str) {
21  constexpr char whitespaces[] = "\t\n\r ";
22  str.erase(0, str.find_first_not_of(whitespaces)); // trim left
23  str.erase(str.find_last_not_of(whitespaces) + 1); // trim right
24  return str;
25 }
26 
27 inline std::vector<std::string> splitMessageDefinitions(std::istream& stream) {
28  std::vector<std::string> definitions;
29 
30  std::string line = "";
31  std::string definition = "";
32 
33  while (std::getline(stream, line)) {
34  line = trimString(line);
35  if (line == "---") {
36  definitions.push_back(trimString(definition));
37  definition = "";
38  } else {
39  definition += line + "\n";
40  }
41  }
42 
43  definitions.push_back(trimString(definition));
44  return definitions;
45 }
46 
47 } // namespace foxglove_bridge
definition
const char * definition()
foxglove_bridge::trimString
std::string trimString(std::string &str)
Definition: utils.hpp:20
foxglove_bridge::splitMessageDefinitions
std::vector< std::string > splitMessageDefinitions(std::istream &stream)
Definition: utils.hpp:27
foxglove_bridge
Definition: generic_service.hpp:9
foxglove_bridge::getNodeAndNodeNamespace
std::pair< std::string, std::string > getNodeAndNodeNamespace(const std::string &fqnNodeName)
Definition: utils.hpp:12


foxglove_bridge
Author(s): Foxglove
autogenerated on Wed Mar 5 2025 03:34:31