Use #pragma once in WebCore
[WebKit-https.git] / Source / WebCore / rendering / style / StyleCustomPropertyData.h
1 /*
2  * Copyright (C) 2015 Apple Inc. All rights reserved.
3  * Copyright (C) 2012 Google Inc. All rights reserved.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  *
20  */
21
22 #pragma once
23
24 #include "CSSCustomPropertyValue.h"
25 #include <wtf/Forward.h>
26 #include <wtf/HashMap.h>
27 #include <wtf/RefCounted.h>
28 #include <wtf/RefPtr.h>
29 #include <wtf/text/AtomicStringHash.h>
30
31 namespace WebCore {
32
33 class StyleCustomPropertyData : public RefCounted<StyleCustomPropertyData> {
34 public:
35     static Ref<StyleCustomPropertyData> create() { return adoptRef(*new StyleCustomPropertyData); }
36     Ref<StyleCustomPropertyData> copy() const { return adoptRef(*new StyleCustomPropertyData(*this)); }
37     
38     bool operator==(const StyleCustomPropertyData& o) const
39     {
40         if (m_containsVariables != o.m_containsVariables)
41             return false;
42         
43         if (m_values.size() != o.m_values.size())
44             return false;
45         
46         for (WTF::KeyValuePair<AtomicString, RefPtr<CSSCustomPropertyValue>> entry : m_values) {
47             RefPtr<CSSCustomPropertyValue> other = o.m_values.get(entry.key);
48             if (!other || !entry.value->equals(*other))
49                 return false;
50         }
51         return true;
52     }
53
54     bool operator!=(const StyleCustomPropertyData &o) const { return !(*this == o); }
55     
56     void setCustomPropertyValue(const AtomicString& name, const RefPtr<CSSCustomPropertyValue>& value)
57     {
58         m_values.set(name, value);
59         if (value->containsVariables())
60             m_containsVariables = true;
61     }
62
63     RefPtr<CSSCustomPropertyValue> getCustomPropertyValue(const AtomicString& name) const { return m_values.get(name); }
64     CustomPropertyValueMap& values() { return m_values; }
65     
66     bool hasCustomProperty(const AtomicString& name) const { return m_values.contains(name); }
67     
68     bool containsVariables() const { return m_containsVariables; }
69     void setContainsVariables(bool containsVariables) { m_containsVariables = containsVariables; }
70
71     CustomPropertyValueMap m_values;
72     bool m_containsVariables { false };
73
74 private:
75     explicit StyleCustomPropertyData()
76         : RefCounted<StyleCustomPropertyData>()
77     { }
78     StyleCustomPropertyData(const StyleCustomPropertyData& other)
79         : RefCounted<StyleCustomPropertyData>()
80         , m_values(CustomPropertyValueMap(other.m_values))
81         , m_containsVariables(other.m_containsVariables)
82     { }
83 };
84
85 } // namespace WebCore