1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-12-09 04:04:37 +00:00
openmw/components/esm/refid.hpp
florent.teppe 077cf97bc4 The esm4 reader logic is mutualised
to avoid copy pasting code, readerutils gives functions that take visitors as params to decide how a record must be handled

Check encoder exists, and get value of stateless encoder.

fixes code formatting conventions

Fixed output of record with RefId

also fixed readTypedRecord and readRecord to have the proper return types

Check if the type has a sRecordId
2023-01-01 19:22:27 +01:00

57 lines
1.8 KiB
C++

#ifndef OPENMW_COMPONENTS_ESM_REFID_HPP
#define OPENMW_COMPONENTS_ESM_REFID_HPP
#include <compare>
#include <functional>
#include <iosfwd>
#include <string>
#include <string_view>
#include <components/esm4/formid.hpp>
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