pxmlw6n2f/Gazebo_Distributed_MPI/gazebo/common/CommonIface.hh

194 lines
6.5 KiB
C++

/*
* Copyright (C) 2012 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef _COMMONIFACE_HH_
#define _COMMONIFACE_HH_
#include <string>
#include <vector>
#include <boost/uuid/sha1.hpp>
#include <boost/filesystem.hpp>
#include <iomanip>
#include <sstream>
#include "gazebo/util/system.hh"
namespace gazebo
{
namespace common
{
/// \addtogroup gazebo_common
/// \{
/// \brief Load the common library.
GZ_COMMON_VISIBLE
void load();
/// \brief add path sufix to common::SystemPaths
/// \param[in] _suffix The suffix to add.
GZ_COMMON_VISIBLE
void add_search_path_suffix(const std::string &_suffix);
/// \brief search for file in common::SystemPaths
/// \param[in] _file Name of the file to find.
/// \return The path containing the file.
GZ_COMMON_VISIBLE
std::string find_file(const std::string &_file);
/// \brief search for file in common::SystemPaths
/// \param[in] _file Name of the file to find.
/// \param[in] _searchLocalPath True to search in the current working
/// directory.
/// \return The path containing the file.
GZ_COMMON_VISIBLE
std::string find_file(const std::string &_file,
bool _searchLocalPath);
/// \brief search for a file in common::SystemPaths
/// \param[in] _file the file name to look for.
/// \return The path containing the file.
GZ_COMMON_VISIBLE
std::string find_file_path(const std::string &_file);
/// \brief Compute the SHA1 hash of an array of bytes.
/// \param[in] _buffer Input sequence. The permitted data types for this
/// function are std::string and any STL container.
/// \return The string representation (40 character) of the SHA1 hash.
template<typename T>
std::string get_sha1(const T &_buffer);
/// \brief Cross platform retrieval of an environment variable.
/// \param[in] _name Name of the environment variable to get.
/// \return Environment variable contents, or NULL on error.
GZ_COMMON_VISIBLE
const char *getEnv(const char *_name);
/// \brief Get the current working directory
/// \return Name of the current directory
GZ_COMMON_VISIBLE
std::string cwd();
/// \brief Returns true if _path is a file or directory
/// \param[in] _path Path to check.
/// \return True if _path is a file or directory
GZ_COMMON_VISIBLE
bool exists(const std::string &_path);
/// \brief Check if the given path is a directory.
/// \param[in] _path Path to a directory.
/// \return True if _path is a directory.
GZ_COMMON_VISIBLE
bool isDirectory(const std::string &_path);
/// \brief Check if the given path is a file.
/// \param[in] _path Path to a file.
/// \return True if _path is a file.
GZ_COMMON_VISIBLE
bool isFile(const std::string &_path);
/// \brief Get the absolute path of a provided path.
/// \param[in] _path Relative or absolute path.
/// \return Absolute path
GZ_COMMON_VISIBLE
std::string absPath(const std::string &_path);
/// \brief Copy a file.
/// \param[in] _existingFilename Path to an existing file.
/// \param[in] _newFilename Path of the new file.
/// \return True on success.
GZ_COMMON_VISIBLE
bool copyFile(const std::string &_existingFilename,
const std::string &_newFilename);
/// \brief Copy a directory, overwrite the destination directory if exists.
/// \param[in] _source Path to an existing directory to copy from.
/// \param[in] _destination Path to the destination directory.
/// \return True on success.
GZ_COMMON_VISIBLE
bool copyDir(const boost::filesystem::path &_source,
const boost::filesystem::path &_destination);
/// \brief Move a file.
/// \param[in] _existingFilename Full path to an existing file.
/// \param[in] _newFilename Full path of the new file.
/// \return True on success.
GZ_COMMON_VISIBLE
bool moveFile(const std::string &_existingFilename,
const std::string &_newFilename);
/// \brief Replace all occurances of _key with _replacement.
/// \param[out] _result The new string that has had _key replaced
/// with _replacement.
/// \param[in] _orig Original string.
/// \param[in] _key String to replace.
/// \param[in] _replacement The string that replaces _key.
/// \sa std::string replaceAll(const std::string &_orig,
/// const std::string &_key, const std::string &_replacement)
GZ_COMMON_VISIBLE
void replaceAll(std::string &_result,
const std::string &_orig,
const std::string &_key,
const std::string &_replacement);
/// \brief Replace all occurances of _key with _replacement.
/// \param[in] _orig Original string.
/// \param[in] _key String to replace.
/// \param[in] _replacement The string that replaces _key.
/// \return The new string that has had _key replaced with _replacement.
/// \sa void common::replaceAll(std::string &_result,
/// const std::string &_orig, const std::string &_key,
/// const std::string &_replacement)
GZ_COMMON_VISIBLE
std::string replaceAll(const std::string &_orig,
const std::string &_key,
const std::string &_replacement);
/// \}
}
///////////////////////////////////////////////
// Implementation of get_sha1
template<typename T>
std::string common::get_sha1(const T &_buffer)
{
boost::uuids::detail::sha1 sha1;
unsigned int hash[5];
std::stringstream stream;
if (_buffer.size() == 0)
{
sha1.process_bytes(NULL, 0);
}
else
{
sha1.process_bytes(&(_buffer[0]), _buffer.size() * sizeof(_buffer[0]));
}
sha1.get_digest(hash);
for (std::size_t i = 0; i < sizeof(hash) / sizeof(hash[0]); ++i)
{
stream << std::setfill('0')
<< std::setw(sizeof(hash[0]) * 2)
<< std::hex
<< hash[i];
}
return stream.str();
}
}
#endif