mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 04:56:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef OPENMW_COMPONENTS_ESM_STRINGREFID_HPP
 | 
						|
#define OPENMW_COMPONENTS_ESM_STRINGREFID_HPP
 | 
						|
 | 
						|
#include <functional>
 | 
						|
#include <iosfwd>
 | 
						|
#include <optional>
 | 
						|
#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 endsWith(std::string_view suffix) 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>;
 | 
						|
 | 
						|
        // Similar to the constructor but only returns preexisting ids
 | 
						|
        static std::optional<StringRefId> deserializeExisting(std::string_view value);
 | 
						|
 | 
						|
    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
 |