Rename AtomicString to AtomString
[WebKit-https.git] / Source / WebCore / Modules / webgpu / WHLSL / AST / WHLSLNativeTypeDeclaration.h
1 /*
2  * Copyright (C) 2019 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. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #pragma once
27
28 #if ENABLE(WEBGPU)
29
30 #include "WHLSLLexer.h"
31 #include "WHLSLNamedType.h"
32 #include "WHLSLTypeArgument.h"
33 #include "WHLSLTypeReference.h"
34 #include <wtf/text/WTFString.h>
35
36 namespace WebCore {
37
38 namespace WHLSL {
39
40 namespace AST {
41
42 class NativeTypeDeclaration : public NamedType {
43 public:
44     NativeTypeDeclaration(Lexer::Token&& origin, String&& name, TypeArguments&& typeArguments)
45         : NamedType(WTFMove(origin), WTFMove(name))
46         , m_typeArguments(WTFMove(typeArguments))
47     {
48     }
49
50     virtual ~NativeTypeDeclaration() = default;
51
52     NativeTypeDeclaration(const NativeTypeDeclaration&) = delete;
53     NativeTypeDeclaration(NativeTypeDeclaration&&) = default;
54
55     bool isNativeTypeDeclaration() const override { return true; }
56
57     TypeArguments& typeArguments() { return m_typeArguments; }
58
59     bool isInt() const { return m_isInt; }
60     bool isNumber() const { return m_isNumber; }
61     bool isFloating() const { return m_isFloating; }
62     bool isAtom() const { return m_isAtomic; }
63     bool isVector() const { return m_isVector; }
64     bool isMatrix() const { return m_isMatrix; }
65     bool isTexture() const { return m_isTexture; }
66     bool isSigned() const { return m_isSigned; }
67     const std::function<bool(int)>& canRepresentInteger() const { return m_canRepresentInteger; }
68     const std::function<bool(unsigned)>& canRepresentUnsignedInteger() const { return m_canRepresentUnsignedInteger; }
69     const std::function<bool(float)>& canRepresentFloat() const { return m_canRepresentFloat; }
70     const std::function<int64_t(int64_t)>& successor() const { return m_successor; }
71     const std::function<int64_t(int)>& formatValueFromInteger() const { return m_formatValueFromInteger; }
72     const std::function<int64_t(unsigned)>& formatValueFromUnsignedInteger() const { return m_formatValueFromUnsignedInteger; }
73     void iterateAllValues(const std::function<bool(int64_t)>& callback) { m_iterateAllValues(callback); }
74
75     void setIsInt() { m_isInt = true; }
76     void setIsNumber() { m_isNumber = true; }
77     void setIsFloating() { m_isFloating = true; }
78     void setIsAtomic() { m_isAtomic = true; }
79     void setIsVector() { m_isVector = true; }
80     void setIsMatrix() { m_isMatrix = true; }
81     void setIsTexture() { m_isTexture = true; }
82     void setIsSigned() { m_isSigned = true; }
83     void setCanRepresentInteger(std::function<bool(int)>&& canRepresent) { m_canRepresentInteger = WTFMove(canRepresent); }
84     void setCanRepresentUnsignedInteger(std::function<bool(unsigned)>&& canRepresent) { m_canRepresentUnsignedInteger = WTFMove(canRepresent); }
85     void setCanRepresentFloat(std::function<bool(float)>&& canRepresent) { m_canRepresentFloat = WTFMove(canRepresent); }
86     void setSuccessor(std::function<int64_t(int64_t)>&& successor) { m_successor = WTFMove(successor); }
87     void setFormatValueFromInteger(std::function<int64_t(int)>&& formatValue) { m_formatValueFromInteger = WTFMove(formatValue); }
88     void setFormatValueFromUnsignedInteger(std::function<int64_t(unsigned)>&& formatValue) { m_formatValueFromUnsignedInteger = WTFMove(formatValue); }
89     void setIterateAllValues(std::function<void(const std::function<bool(int64_t)>&)>&& iterateAllValues) { m_iterateAllValues = WTFMove(iterateAllValues); }
90
91 private:
92     TypeArguments m_typeArguments;
93     std::function<bool(int)> m_canRepresentInteger;
94     std::function<bool(unsigned)> m_canRepresentUnsignedInteger;
95     std::function<bool(float)> m_canRepresentFloat;
96     std::function<int64_t(int64_t)> m_successor;
97     std::function<int64_t(int)> m_formatValueFromInteger;
98     std::function<int64_t(unsigned)> m_formatValueFromUnsignedInteger;
99     std::function<void(const std::function<bool(int64_t)>&)> m_iterateAllValues;
100     bool m_isInt { false };
101     bool m_isNumber { false };
102     bool m_isFloating { false };
103     bool m_isAtomic { false };
104     bool m_isVector { false };
105     bool m_isMatrix { false };
106     bool m_isTexture { false };
107     bool m_isSigned { false };
108 };
109
110 } // namespace AST
111
112 }
113
114 }
115
116 SPECIALIZE_TYPE_TRAITS_WHLSL_NAMED_TYPE(NativeTypeDeclaration, isNativeTypeDeclaration())
117
118 #endif