CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
IntrinsicAdept.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
12
15
17
18#include <array>
19
21
22// Converts the Intrinsic enum value into a zero-based integral.
23#define INTRINSIC_IDX(I) (static_cast<std::size_t>(I) - static_cast<std::size_t>(Intrinsic::Abort))
24
25 // Base class for intrinsic type analysis.
27 public:
30
31 virtual ~IntrinsicAdept();
32
33 // Returns the active intrinsic adept instance.
34 static const IntrinsicAdept& get();
35
36 // Returns the identifier of the specified intrinsic or "<undefined>" if the input ID is out of range.
37 [[nodiscard]] const String& getIntrinsicIdent(const Intrinsic intrinsic) const;
38
39 // Returns the return type denoter of the specified intrinsic with its arguments or throws an error if the call is ambiguous.
41 const TypeDenoterPtr& prefixTypeDenoter = nullptr) const = 0;
42
43 // Returns a list of all parameter types of the specified intrinsic with its arguments or throws an error if the call is ambiguous.
45
46 // Returns a list of indices that refer to all output parameters of the specified intrinsic.
48
49 protected:
51
52 // Sets the identifier of the specified intrinsic.
53 void setIntrinsicIdent(const Intrinsic intrinsic, const String& ident);
54
55 // Fill all remaining intrinsic identifiers for overloaded intrinsics.
57
59
60 private:
62
64 };
65
66} // namespace CeresEngine::ShaderCompiler
#define INTRINSIC_IDX(I)
Definition IntrinsicAdept.hpp:23
Definition IntrinsicAdept.hpp:26
IntrinsicAdept(const IntrinsicAdept &)=delete
void setIntrinsicIdent(const Intrinsic intrinsic, const String &ident)
virtual Vector< std::size_t > getIntrinsicOutputParameterIndices(const Intrinsic intrinsic) const =0
void throwAmbiguousIntrinsicCall(const Intrinsic intrinsic, const Vector< ExpressionPtr > &args)
virtual TypeDenoterPtr getIntrinsicReturnType(const Intrinsic intrinsic, const Vector< ExpressionPtr > &args, const TypeDenoterPtr &prefixTypeDenoter=nullptr) const =0
Array< String, numIntrinsics > mIntrinsicIdents
Definition IntrinsicAdept.hpp:63
const String & getIntrinsicIdent(const Intrinsic intrinsic) const
virtual Vector< TypeDenoterPtr > getIntrinsicParameterTypes(const Intrinsic intrinsic, const Vector< ExpressionPtr > &args) const =0
IntrinsicAdept & operator=(const IntrinsicAdept &)=delete
static const IntrinsicAdept & get()
static const std::size_t numIntrinsics
Definition IntrinsicAdept.hpp:61
Definition AST.hpp:33
Intrinsic
Intrinsics function enumeration (currently only HLSL intrinsics).
Definition ASTEnums.hpp:980
SPtr< TypeDenoter > TypeDenoterPtr
Definition TypeDenoter.hpp:29
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition Vector.hpp:17
std::array< T, N > Array
Array is a container that encapsulates fixed size arrays.
Definition Array.hpp:17
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25