Path: blob/main_old/src/compiler/translator/ConstantUnion.h
1693 views
//1// Copyright 2002 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//56#ifndef COMPILER_TRANSLATOR_CONSTANTUNION_H_7#define COMPILER_TRANSLATOR_CONSTANTUNION_H_89#include "compiler/translator/BaseTypes.h"10#include "compiler/translator/Common.h"1112namespace sh13{1415class TDiagnostics;1617class TConstantUnion18{19public:20POOL_ALLOCATOR_NEW_DELETE21TConstantUnion();22TConstantUnion(int i);23TConstantUnion(unsigned int u);24TConstantUnion(float f);25TConstantUnion(bool b);2627bool cast(TBasicType newType, const TConstantUnion &constant);2829void setIConst(int i)30{31iConst = i;32type = EbtInt;33}34void setUConst(unsigned int u)35{36uConst = u;37type = EbtUInt;38}39void setFConst(float f)40{41fConst = f;42type = EbtFloat;43}44void setBConst(bool b)45{46bConst = b;47type = EbtBool;48}4950void setYuvCscStandardEXTConst(TYuvCscStandardEXT s)51{52yuvCscStandardEXTConst = s;53type = EbtYuvCscStandardEXT;54}5556int getIConst() const;57unsigned int getUConst() const;58float getFConst() const;59bool getBConst() const;60bool isZero() const;61TYuvCscStandardEXT getYuvCscStandardEXTConst() const;6263bool operator==(const int i) const;64bool operator==(const unsigned int u) const;65bool operator==(const float f) const;66bool operator==(const bool b) const;67bool operator==(const TYuvCscStandardEXT s) const;68bool operator==(const TConstantUnion &constant) const;69bool operator!=(const int i) const;70bool operator!=(const unsigned int u) const;71bool operator!=(const float f) const;72bool operator!=(const bool b) const;73bool operator!=(const TYuvCscStandardEXT s) const;74bool operator!=(const TConstantUnion &constant) const;75bool operator>(const TConstantUnion &constant) const;76bool operator<(const TConstantUnion &constant) const;77static TConstantUnion add(const TConstantUnion &lhs,78const TConstantUnion &rhs,79TDiagnostics *diag,80const TSourceLoc &line);81static TConstantUnion sub(const TConstantUnion &lhs,82const TConstantUnion &rhs,83TDiagnostics *diag,84const TSourceLoc &line);85static TConstantUnion mul(const TConstantUnion &lhs,86const TConstantUnion &rhs,87TDiagnostics *diag,88const TSourceLoc &line);89TConstantUnion operator%(const TConstantUnion &constant) const;90static TConstantUnion rshift(const TConstantUnion &lhs,91const TConstantUnion &rhs,92TDiagnostics *diag,93const TSourceLoc &line);94static TConstantUnion lshift(const TConstantUnion &lhs,95const TConstantUnion &rhs,96TDiagnostics *diag,97const TSourceLoc &line);98TConstantUnion operator&(const TConstantUnion &constant) const;99TConstantUnion operator|(const TConstantUnion &constant) const;100TConstantUnion operator^(const TConstantUnion &constant) const;101TConstantUnion operator&&(const TConstantUnion &constant) const;102TConstantUnion operator||(const TConstantUnion &constant) const;103104TBasicType getType() const { return type; }105106private:107union108{109int iConst; // used for ivec, scalar ints110unsigned int uConst; // used for uvec, scalar uints111bool bConst; // used for bvec, scalar bools112float fConst; // used for vec, mat, scalar floats113TYuvCscStandardEXT yuvCscStandardEXTConst;114};115116TBasicType type;117};118119} // namespace sh120121#endif // COMPILER_TRANSLATOR_CONSTANTUNION_H_122123124