CombinedFiltersAlphabet.cpp [plain text]
#include "config.h"
#include "CombinedFiltersAlphabet.h"
#if ENABLE(CONTENT_EXTENSIONS)
namespace WebCore {
namespace ContentExtensions {
struct TermCreatorInput {
const Term& term;
Vector<std::unique_ptr<Term>>& internedTermsStorage;
};
struct TermCreatorTranslator {
static unsigned hash(const TermCreatorInput& input)
{
return input.term.hash();
}
static inline bool equal(const Term* term, const TermCreatorInput& input)
{
return *term == input.term;
}
static void translate(const Term*& location, const TermCreatorInput& input, unsigned)
{
std::unique_ptr<Term> newUniqueTerm(new Term(input.term));
location = newUniqueTerm.get();
input.internedTermsStorage.append(WTFMove(newUniqueTerm));
}
};
const Term* CombinedFiltersAlphabet::interned(const Term& term)
{
TermCreatorInput input { term, m_internedTermsStorage };
auto addResult = m_uniqueTerms.add<TermCreatorTranslator>(input);
return *addResult.iterator;
}
#if CONTENT_EXTENSIONS_PERFORMANCE_REPORTING
size_t CombinedFiltersAlphabet::memoryUsed() const
{
size_t termsSize = 0;
for (const auto& termPointer : m_internedTermsStorage)
termsSize += termPointer->memoryUsed();
return sizeof(CombinedFiltersAlphabet)
+ termsSize
+ m_uniqueTerms.capacity() * sizeof(Term*)
+ m_internedTermsStorage.capacity() * sizeof(std::unique_ptr<Term>);
}
#endif
} }
#endif // ENABLE(CONTENT_EXTENSIONS)