1/*
2 * Copyright (C) 2017 Apple Inc. All Rights Reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
25 */
26
27#pragma once
28
29#include "HTMLNames.h"
30#include "QualifiedName.h"
31#include "SVGNames.h"
32#include "XLinkNames.h"
33#include "XMLNSNames.h"
34#include "XMLNames.h"
35#include <wtf/HashSet.h>
36#include <wtf/Ref.h>
37
38#if ENABLE(MATHML)
39#include "MathMLNames.h"
40#endif
41
42
43namespace WebCore {
44
45class QualifiedNameCache {
46 WTF_MAKE_FAST_ALLOCATED;
47public:
48 QualifiedNameCache() = default;
49
50 Ref<QualifiedName::QualifiedNameImpl> getOrCreate(const QualifiedNameComponents&);
51 void remove(QualifiedName::QualifiedNameImpl&);
52
53private:
54 static const int staticQualifiedNamesCount = HTMLNames::HTMLTagsCount + HTMLNames::HTMLAttrsCount
55#if ENABLE(MATHML)
56 + MathMLNames::MathMLTagsCount + MathMLNames::MathMLAttrsCount
57#endif
58 + SVGNames::SVGTagsCount + SVGNames::SVGAttrsCount
59 + XLinkNames::XLinkAttrsCount
60 + XMLNSNames::XMLNSAttrsCount
61 + XMLNames::XMLAttrsCount;
62
63 struct QualifiedNameHashTraits : public HashTraits<QualifiedName::QualifiedNameImpl*> {
64 static const int minimumTableSize = WTF::HashTableCapacityForSize<staticQualifiedNamesCount>::value;
65 };
66
67 using QNameSet = HashSet<QualifiedName::QualifiedNameImpl*, QualifiedNameHash, QualifiedNameHashTraits>;
68 QNameSet m_cache;
69};
70
71}
72