blob: aae48d8dd7d09106960249f1439252035e9e7e9e [file] [log] [blame]
Ryan Harrisondbc13af2022-02-21 15:19:07 +00001// Copyright 2020 The Tint Authors.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
Ben Clayton01004b72022-04-28 18:49:04 +000015#ifndef SRC_TINT_SEM_BOOL_H_
16#define SRC_TINT_SEM_BOOL_H_
Ryan Harrisondbc13af2022-02-21 15:19:07 +000017
18#include <string>
19
20#include "src/tint/sem/type.h"
21
22// X11 likes to #define Bool leading to confusing error messages.
23// If its defined, undefine it.
24#ifdef Bool
25#undef Bool
26#endif
27
dan sinclairc990b3c2022-04-07 16:04:35 +000028namespace tint::sem {
Ryan Harrisondbc13af2022-02-21 15:19:07 +000029
30/// A boolean type
Ben Clayton41f8d2a2022-03-07 18:37:46 +000031class Bool final : public Castable<Bool, Type> {
dan sinclair41e4d9a2022-05-01 14:40:55 +000032 public:
33 /// Constructor
34 Bool();
35 /// Move constructor
36 Bool(Bool&&);
37 ~Bool() override;
Ryan Harrisondbc13af2022-02-21 15:19:07 +000038
dan sinclair41e4d9a2022-05-01 14:40:55 +000039 /// @returns a hash of the type.
40 size_t Hash() const override;
Ben Clayton43919752022-03-07 17:05:28 +000041
dan sinclair41e4d9a2022-05-01 14:40:55 +000042 /// @param other the other type to compare against
43 /// @returns true if the this type is equal to the given type
44 bool Equals(const Type& other) const override;
Ben Clayton43919752022-03-07 17:05:28 +000045
dan sinclair41e4d9a2022-05-01 14:40:55 +000046 /// @param symbols the program's symbol table
47 /// @returns the name for this type that closely resembles how it would be
48 /// declared in WGSL.
49 std::string FriendlyName(const SymbolTable& symbols) const override;
Ryan Harrisondbc13af2022-02-21 15:19:07 +000050
dan sinclair41e4d9a2022-05-01 14:40:55 +000051 /// @returns true if constructible as per
52 /// https://gpuweb.github.io/gpuweb/wgsl/#constructible-types
53 bool IsConstructible() const override;
Ryan Harrisondbc13af2022-02-21 15:19:07 +000054
dan sinclair41e4d9a2022-05-01 14:40:55 +000055 /// @returns the size in bytes of the type.
56 /// @note: booleans are not host-sharable, but still may exist in workgroup
57 /// storage.
58 uint32_t Size() const override;
Ryan Harrisondbc13af2022-02-21 15:19:07 +000059
dan sinclair41e4d9a2022-05-01 14:40:55 +000060 /// @returns the alignment in bytes of the type.
61 /// @note: booleans are not host-sharable, but still may exist in workgroup
62 /// storage.
63 uint32_t Align() const override;
Ryan Harrisondbc13af2022-02-21 15:19:07 +000064};
65
dan sinclairc990b3c2022-04-07 16:04:35 +000066} // namespace tint::sem
Ryan Harrisondbc13af2022-02-21 15:19:07 +000067
Ben Clayton01004b72022-04-28 18:49:04 +000068#endif // SRC_TINT_SEM_BOOL_H_