mirror of
https://github.com/silverqx/TinyORM.git
synced 2026-02-05 09:50:19 -06:00
added and used HasReserveMethod concept
Used the HasReserveMethod concept instead of checking for a type.
This commit is contained in:
@@ -2134,7 +2134,7 @@ namespace Orm::Tiny::Concerns
|
||||
}
|
||||
|
||||
C serializableAttributes;
|
||||
if constexpr (std::is_same_v<C, QVector<AttributeItem>>)
|
||||
if constexpr (HasReserveMethod<C>)
|
||||
serializableAttributes.reserve(attributes.size());
|
||||
|
||||
// Get visible attributes only
|
||||
|
||||
@@ -721,7 +721,7 @@ namespace Concerns
|
||||
const auto serializableRelations = getSerializableRelations();
|
||||
|
||||
C attributes;
|
||||
if constexpr (std::is_same_v<C, QVector<AttributeItem>>)
|
||||
if constexpr (HasReserveMethod<C>)
|
||||
attributes.reserve(static_cast<QVector<AttributeItem>::size_type>(
|
||||
serializableRelations.size()));
|
||||
|
||||
|
||||
@@ -58,6 +58,22 @@ namespace Orm::Tiny
|
||||
concept SerializedAttributes = std::same_as<C, QVariantMap> ||
|
||||
std::same_as<C, QVector<AttributeItem>>;
|
||||
|
||||
/* Others */
|
||||
template<typename C>
|
||||
concept HasReserveMethod = requires(C c)
|
||||
{
|
||||
typename C::size_type;
|
||||
// Good enough, I won't invest more effort into this 🙃
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
requires std::same_as<typename C::size_type, std::size_t> ||
|
||||
std::same_as<typename C::size_type, qsizetype>;
|
||||
#else
|
||||
requires std::same_as<typename C::size_type, std::size_t> ||
|
||||
std::same_as<typename C::size_type, int>;
|
||||
#endif
|
||||
{ c.reserve(typename C::size_type()) } -> std::same_as<void>;
|
||||
};
|
||||
|
||||
} // namespace Orm::Tiny
|
||||
|
||||
TINYORM_END_COMMON_NAMESPACE
|
||||
|
||||
Reference in New Issue
Block a user