mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-01 01:15:33 +00:00
c721a6cafa
Some data is actually loaded and store in ESM Store Any new ESM4 will go through the same code path and be automatically sent to the right store
56 lines
1.8 KiB
C++
56 lines
1.8 KiB
C++
#ifndef OPENMW_COMPONENTS_ESM_REFID_HPP
|
|
#define OPENMW_COMPONENTS_ESM_REFID_HPP
|
|
#include <compare>
|
|
#include <components/esm4/formid.hpp>
|
|
#include <functional>
|
|
#include <iosfwd>
|
|
#include <string>
|
|
#include <string_view>
|
|
|
|
namespace ESM
|
|
{
|
|
struct RefId
|
|
{
|
|
// This structure is used to represent an Id that identifies an ESM record. These Ids can then be used in
|
|
// ESM::Stores to find the actual record. These Ids can be serialized/de-serialized, stored on disk and remain
|
|
// valid. They are used by ESM files, by records to reference other ESM records.
|
|
const static RefId sEmpty;
|
|
bool empty() const { return mId.empty(); }
|
|
void swap(RefId& rhs) { mId.swap(rhs.mId); }
|
|
bool operator==(const RefId& rhs) const;
|
|
bool operator<(const RefId& rhs) const;
|
|
bool operator>(const RefId& rhs) const;
|
|
|
|
friend std::ostream& operator<<(std::ostream& os, const RefId& dt);
|
|
|
|
// The 2 following functions are used to move back and forth between string and RefID. Used for hard coded
|
|
// RefIds that are as string in the code. For serialization, and display. Using explicit conversions make it
|
|
// very clear where in the code we need to convert from string to RefId and Vice versa.
|
|
static RefId stringRefId(std::string_view id);
|
|
static RefId formIdRefId(const ESM4::FormId id);
|
|
const std::string& getRefIdString() const { return mId; }
|
|
|
|
private:
|
|
std::string mId;
|
|
|
|
bool operator==(std::string_view rhs) const;
|
|
|
|
public:
|
|
template <std::size_t size>
|
|
bool operator==(const char (&rhs)[size]) const
|
|
{
|
|
return *this == std::string_view(rhs);
|
|
}
|
|
};
|
|
}
|
|
|
|
namespace std
|
|
{
|
|
|
|
template <>
|
|
struct hash<ESM::RefId>
|
|
{
|
|
std::size_t operator()(const ESM::RefId& k) const;
|
|
};
|
|
}
|
|
#endif
|