mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 09:30:24 +00:00
LibUnicode: Define traits for a vector of integral/enum types
Any generator which defines a unique storage instance for a list of numbers will need this.
This commit is contained in:
parent
6bf50bc40b
commit
415763b1b3
Notes:
sideshowbarker
2024-07-17 22:49:31 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/415763b1b3e Pull-request: https://github.com/SerenityOS/serenity/pull/11245
2 changed files with 22 additions and 14 deletions
|
@ -130,20 +130,6 @@ struct AK::Traits<NumberFormat> : public GenericTraits<NumberFormat> {
|
|||
};
|
||||
|
||||
using NumberFormatList = Vector<NumberFormatIndexType>;
|
||||
|
||||
template<>
|
||||
struct AK::Traits<NumberFormatList> : public GenericTraits<NumberFormatList> {
|
||||
static unsigned hash(NumberFormatList const& formats)
|
||||
{
|
||||
auto hash = int_hash(static_cast<u32>(formats.size()));
|
||||
|
||||
for (auto format : formats)
|
||||
hash = pair_int_hash(hash, format);
|
||||
|
||||
return hash;
|
||||
}
|
||||
};
|
||||
|
||||
using NumericSymbolList = Vector<StringIndexType>;
|
||||
|
||||
struct NumberSystem {
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Format.h>
|
||||
#include <AK/HashFunctions.h>
|
||||
#include <AK/HashMap.h>
|
||||
#include <AK/LexicalPath.h>
|
||||
#include <AK/Optional.h>
|
||||
|
@ -14,6 +15,7 @@
|
|||
#include <AK/SourceGenerator.h>
|
||||
#include <AK/String.h>
|
||||
#include <AK/StringView.h>
|
||||
#include <AK/Traits.h>
|
||||
#include <AK/Vector.h>
|
||||
#include <LibCore/DirIterator.h>
|
||||
#include <LibCore/File.h>
|
||||
|
@ -25,6 +27,26 @@ inline constexpr bool StorageTypeIsList = false;
|
|||
template<class T>
|
||||
inline constexpr bool StorageTypeIsList<Vector<T>> = true;
|
||||
|
||||
template<typename T>
|
||||
concept IntegralOrEnum = Integral<T> || Enum<T>;
|
||||
|
||||
template<IntegralOrEnum T>
|
||||
struct AK::Traits<Vector<T>> : public GenericTraits<Vector<T>> {
|
||||
static unsigned hash(Vector<T> const& list)
|
||||
{
|
||||
auto hash = int_hash(static_cast<u32>(list.size()));
|
||||
|
||||
for (auto value : list) {
|
||||
if constexpr (Enum<T>)
|
||||
hash = pair_int_hash(hash, to_underlying(value));
|
||||
else
|
||||
hash = pair_int_hash(hash, value);
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
};
|
||||
|
||||
template<typename StorageType, typename IndexType>
|
||||
class UniqueStorage {
|
||||
public:
|
||||
|
|
Loading…
Reference in a new issue