mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2024-12-29 12:20:41 +00:00
65 lines
1.6 KiB
C++
65 lines
1.6 KiB
C++
|
#ifndef OPENMW_COMPONENTS_ESM_STRINGREFID_HPP
|
||
|
#define OPENMW_COMPONENTS_ESM_STRINGREFID_HPP
|
||
|
|
||
|
#include <functional>
|
||
|
#include <iosfwd>
|
||
|
#include <string>
|
||
|
#include <string_view>
|
||
|
#include <variant>
|
||
|
|
||
|
#include <components/misc/notnullptr.hpp>
|
||
|
|
||
|
namespace ESM
|
||
|
{
|
||
|
class StringRefId
|
||
|
{
|
||
|
public:
|
||
|
StringRefId();
|
||
|
|
||
|
// Constructs StringRefId from string using pointer to a static set of strings.
|
||
|
explicit StringRefId(std::string_view value);
|
||
|
|
||
|
const std::string& getValue() const { return *mValue; }
|
||
|
|
||
|
std::string toString() const { return *mValue; }
|
||
|
|
||
|
std::string toDebugString() const;
|
||
|
|
||
|
bool startsWith(std::string_view prefix) const;
|
||
|
|
||
|
bool contains(std::string_view subString) const;
|
||
|
|
||
|
bool operator==(StringRefId rhs) const noexcept { return mValue == rhs.mValue; }
|
||
|
|
||
|
bool operator==(std::string_view rhs) const noexcept;
|
||
|
|
||
|
// Compares values to provide stable order
|
||
|
bool operator<(StringRefId rhs) const noexcept;
|
||
|
|
||
|
friend bool operator<(StringRefId lhs, std::string_view rhs) noexcept;
|
||
|
|
||
|
friend bool operator<(std::string_view lhs, StringRefId rhs) noexcept;
|
||
|
|
||
|
friend std::ostream& operator<<(std::ostream& stream, StringRefId value);
|
||
|
|
||
|
friend struct std::hash<StringRefId>;
|
||
|
|
||
|
private:
|
||
|
Misc::NotNullPtr<const std::string> mValue;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
namespace std
|
||
|
{
|
||
|
template <>
|
||
|
struct hash<ESM::StringRefId>
|
||
|
{
|
||
|
std::size_t operator()(ESM::StringRefId value) const noexcept
|
||
|
{
|
||
|
return std::hash<const std::string*>{}(value.mValue);
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
#endif
|