File: stringrefid.hpp

package info (click to toggle)
openmw 0.49.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,992 kB
  • sloc: cpp: 372,479; xml: 2,149; sh: 1,403; python: 797; makefile: 26
file content (70 lines) | stat: -rw-r--r-- 1,847 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#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