Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <moveit/setup_assistant/tools/file_loader.h>
00038
00039 #include <fstream>
00040 #include <streambuf>
00041
00042 namespace moveit_setup_assistant
00043 {
00044 bool isXacroFile(const std::string& path)
00045 {
00046
00047 return path.find(".xacro") != std::string::npos;
00048 }
00049
00050 bool loadFileToString(std::string& buffer, const std::string& path)
00051 {
00052 if (path.empty())
00053 return false;
00054
00055 std::ifstream stream(path.c_str());
00056 if (!stream.good())
00057 return false;
00058
00059
00060 stream.seekg(0, std::ios::end);
00061 buffer.reserve(stream.tellg());
00062 stream.seekg(0, std::ios::beg);
00063 buffer.assign((std::istreambuf_iterator<char>(stream)), std::istreambuf_iterator<char>());
00064 stream.close();
00065
00066 return true;
00067 }
00068
00069 bool loadXacroFileToString(std::string& buffer, const std::string& path, const std::vector<std::string>& xacro_args)
00070 {
00071 if (path.empty())
00072 return false;
00073
00074 std::string cmd = "rosrun xacro xacro ";
00075 for (std::vector<std::string>::const_iterator it = xacro_args.begin(); it != xacro_args.end(); ++it)
00076 cmd += *it + " ";
00077 cmd += path;
00078
00079 FILE* pipe = popen(cmd.c_str(), "r");
00080 if (!pipe)
00081 return false;
00082
00083 char pipe_buffer[128];
00084 while (!feof(pipe))
00085 {
00086 if (fgets(pipe_buffer, 128, pipe) != NULL)
00087 buffer += pipe_buffer;
00088 }
00089 pclose(pipe);
00090
00091 return true;
00092 }
00093
00094 bool loadXmlFileToString(std::string& buffer, const std::string& path, const std::vector<std::string>& xacro_args)
00095 {
00096 if (isXacroFile(path))
00097 {
00098 return loadXacroFileToString(buffer, path, xacro_args);
00099 }
00100 else
00101 {
00102 return loadFileToString(buffer, path);
00103 }
00104 }
00105 }