Remove Sized methods from ESMReader

macos_ci_fix
Evil Eye 1 year ago
parent dbf9d42cc5
commit c10b9297f0

@ -131,10 +131,10 @@ namespace ESM
ESM::RefId getCellId(); ESM::RefId getCellId();
// Read data of a given type, stored in a subrecord of a given name // Read data of a given type, stored in a subrecord of a given name
template <typename X, typename = std::enable_if_t<IsReadable<X>>> template <typename X>
void getHNT(X& x, NAME name) void getHNT(X& x, NAME name)
{ {
getHNTSized<sizeof(X)>(x, name); getHNT(name, x);
} }
template <class... Args> template <class... Args>
@ -149,26 +149,11 @@ namespace ESM
} }
// Optional version of getHNT // Optional version of getHNT
template <typename X, typename = std::enable_if_t<IsReadable<X>>> template <typename X>
void getHNOT(X& x, NAME name) void getHNOT(X& x, NAME name)
{
getHNOTSized<sizeof(X)>(x, name);
}
// Version with extra size checking, to make sure the compiler
// doesn't mess up our struct padding.
template <std::size_t size, typename X>
void getHNTSized(X& x, NAME name)
{
getSubNameIs(name);
getHTSized<size>(x);
}
template <std::size_t size, typename X>
void getHNOTSized(X& x, NAME name)
{ {
if (isNextSub(name)) if (isNextSub(name))
getHTSized<size>(x); getHT(x);
} }
// Get data of a given type/size, including subrecord header // Get data of a given type/size, including subrecord header
@ -185,37 +170,13 @@ namespace ESM
template <typename T, typename = std::enable_if_t<IsReadable<T>>> template <typename T, typename = std::enable_if_t<IsReadable<T>>>
void skipHT() void skipHT()
{ {
skipHTSized<sizeof(T), T>(); constexpr size_t size = sizeof(T);
}
// Version with extra size checking, to make sure the compiler
// doesn't mess up our struct padding.
template <std::size_t size, typename X>
void getHTSized(X& x)
{
getSubHeader();
if (mCtx.leftSub != size)
reportSubSizeMismatch(size, mCtx.leftSub);
getTSized<size>(x);
}
template <std::size_t size, typename T>
void skipHTSized()
{
static_assert(sizeof(T) == size);
getSubHeader(); getSubHeader();
if (mCtx.leftSub != size) if (mCtx.leftSub != size)
reportSubSizeMismatch(size, mCtx.leftSub); reportSubSizeMismatch(size, mCtx.leftSub);
skip(size); skip(size);
} }
template <std::size_t size, typename X>
void getTSized(X& x)
{
static_assert(sizeof(X) == size);
getExact(&x, size);
}
// Read a string by the given name if it is the next record. // Read a string by the given name if it is the next record.
std::string getHNOString(NAME name); std::string getHNOString(NAME name);

Loading…
Cancel
Save