blob: 305f3e1b85178c381d10e722824b7e14ca7d4f75 [file] [log] [blame]
// https://github.com/gpakosz/whereami
#ifndef WHEREAMIPP_H
#define WHEREAMIPP_H
#if !defined(WHEREAMI_STRING_T)
#include <string>
typedef std::string whereami_string_t;
#else
typedef WHEREAMI_STRING_T whereami_string_t;
#endif
#if !defined(WHEREAMI_DISABLE_OSTREAM)
#include <ostream>
#endif
#if (defined (__cplusplus) && (__cplusplus > 199711L)) || (defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 150020706))
#define WHEREAMI_CXX11
#endif
namespace whereami {
class whereami_path_t
{
public:
#if defined(WHEREAMI_CXX11)
operator whereami_string_t() &&;
operator whereami_string_t() const &;
#else
operator const whereami_string_t&() const;
#endif
whereami_string_t dirname() const;
whereami_string_t basename() const;
private:
whereami_path_t();
#if defined(WHEREAMI_CXX11)
whereami_path_t(whereami_string_t&& path, int dirname_length) noexcept;
#else
whereami_path_t(whereami_string_t& path, int dirname_length);
#endif
friend whereami_path_t getExecutablePath();
friend whereami_path_t getModulePath();
#if !defined(WHEREAMI_DISABLE_OSTREAM)
friend std::ostream& operator<<(std::ostream& os, const whereami_path_t& path);
#endif
whereami_string_t _path;
int _dirname_length;
};
/**
* Returns the path to the current executable.
*/
whereami_path_t getExecutablePath();
/**
* Returns the path to the current module.
*/
whereami_path_t getModulePath();
} // namespace whereami
#endif // #ifndef WHEREAMIPP_H