//
//Copyright (C) 2016 Google, Inc.
//Copyright (C) 2016 LunarG, Inc.
//
//All rights reserved.
//
//Redistribution and use in source and binary forms, with or without
//modification, are permitted provided that the following conditions
//are met:
//
//    Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
//
//    Redistributions in binary form must reproduce the above
//    copyright notice, this list of conditions and the following
//    disclaimer in the documentation and/or other materials provided
//    with the distribution.
//
//    Neither the name of Google, Inc., nor the names of its
//    contributors may be used to endorse or promote products derived
//    from this software without specific prior written permission.
//
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
//POSSIBILITY OF SUCH DAMAGE.
//

#ifndef EHLSLTOKENS_H_
#define EHLSLTOKENS_H_

namespace glslang {

enum EHlslTokenClass {
    EHTokNone = 0,

    // qualifiers
    EHTokStatic,
    EHTokConst,
    EHTokSNorm,
    EHTokUnorm,
    EHTokExtern,
    EHTokUniform,
    EHTokVolatile,
    EHTokPrecise,
    EHTokShared,
    EHTokGroupShared,
    EHTokLinear,
    EHTokCentroid,
    EHTokNointerpolation,
    EHTokNoperspective,
    EHTokSample,
    EHTokRowMajor,
    EHTokColumnMajor,
    EHTokPackOffset,
    EHTokIn,
    EHTokOut,
    EHTokInOut,
    EHTokLayout,

    // template types
    EHTokBuffer,
    EHTokVector,
    EHTokMatrix,

    // scalar types
    EHTokVoid,
    EHTokBool,
    EHTokInt,
    EHTokUint,
    EHTokDword,
    EHTokHalf,
    EHTokFloat,
    EHTokDouble,
    EHTokMin16float,
    EHTokMin10float,
    EHTokMin16int,
    EHTokMin12int,
    EHTokMin16uint,

    // vector types
    EHTokBool1,
    EHTokBool2,
    EHTokBool3,
    EHTokBool4,
    EHTokFloat1,
    EHTokFloat2,
    EHTokFloat3,
    EHTokFloat4,
    EHTokInt1,
    EHTokInt2,
    EHTokInt3,
    EHTokInt4,
    EHTokDouble1,
    EHTokDouble2,
    EHTokDouble3,
    EHTokDouble4,
    EHTokUint1,
    EHTokUint2,
    EHTokUint3,
    EHTokUint4,

    // matrix types
    EHTokInt1x1,
    EHTokInt1x2,
    EHTokInt1x3,
    EHTokInt1x4,
    EHTokInt2x1,
    EHTokInt2x2,
    EHTokInt2x3,
    EHTokInt2x4,
    EHTokInt3x1,
    EHTokInt3x2,
    EHTokInt3x3,
    EHTokInt3x4,
    EHTokInt4x1,
    EHTokInt4x2,
    EHTokInt4x3,
    EHTokInt4x4,
    EHTokUint1x1,
    EHTokUint1x2,
    EHTokUint1x3,
    EHTokUint1x4,
    EHTokUint2x1,
    EHTokUint2x2,
    EHTokUint2x3,
    EHTokUint2x4,
    EHTokUint3x1,
    EHTokUint3x2,
    EHTokUint3x3,
    EHTokUint3x4,
    EHTokUint4x1,
    EHTokUint4x2,
    EHTokUint4x3,
    EHTokUint4x4,
    EHTokBool1x1,
    EHTokBool1x2,
    EHTokBool1x3,
    EHTokBool1x4,
    EHTokBool2x1,
    EHTokBool2x2,
    EHTokBool2x3,
    EHTokBool2x4,
    EHTokBool3x1,
    EHTokBool3x2,
    EHTokBool3x3,
    EHTokBool3x4,
    EHTokBool4x1,
    EHTokBool4x2,
    EHTokBool4x3,
    EHTokBool4x4,
    EHTokFloat1x1,
    EHTokFloat1x2,
    EHTokFloat1x3,
    EHTokFloat1x4,
    EHTokFloat2x1,
    EHTokFloat2x2,
    EHTokFloat2x3,
    EHTokFloat2x4,
    EHTokFloat3x1,
    EHTokFloat3x2,
    EHTokFloat3x3,
    EHTokFloat3x4,
    EHTokFloat4x1,
    EHTokFloat4x2,
    EHTokFloat4x3,
    EHTokFloat4x4,
    EHTokDouble1x1,
    EHTokDouble1x2,
    EHTokDouble1x3,
    EHTokDouble1x4,
    EHTokDouble2x1,
    EHTokDouble2x2,
    EHTokDouble2x3,
    EHTokDouble2x4,
    EHTokDouble3x1,
    EHTokDouble3x2,
    EHTokDouble3x3,
    EHTokDouble3x4,
    EHTokDouble4x1,
    EHTokDouble4x2,
    EHTokDouble4x3,
    EHTokDouble4x4,

    // texturing types
    EHTokSampler,
    EHTokSampler1d,
    EHTokSampler2d,
    EHTokSampler3d,
    EHTokSamplerCube,
    EHTokSamplerState,
    EHTokSamplerComparisonState,
    EHTokTexture,
    EHTokTexture1d,
    EHTokTexture1darray,
    EHTokTexture2d,
    EHTokTexture2darray,
    EHTokTexture3d,
    EHTokTextureCube,
    EHTokTextureCubearray,
    EHTokTexture2DMS,
    EHTokTexture2DMSarray,

    // variable, user type, ...
    EHTokIdentifier,
    EHTokTypeName,
    EHTokStruct,
    EHTokCBuffer,
    EHTokTBuffer,
    EHTokTypedef,

    // constant
    EHTokFloatConstant,
    EHTokDoubleConstant,
    EHTokIntConstant,
    EHTokUintConstant,
    EHTokBoolConstant,
    EHTokStringConstant,

    // control flow
    EHTokFor,
    EHTokDo,
    EHTokWhile,
    EHTokBreak,
    EHTokContinue,
    EHTokIf,
    EHTokElse,
    EHTokDiscard,
    EHTokReturn,
    EHTokSwitch,
    EHTokCase,
    EHTokDefault,

    // expressions
    EHTokLeftOp,
    EHTokRightOp,
    EHTokIncOp,
    EHTokDecOp,
    EHTokLeOp,
    EHTokGeOp,
    EHTokEqOp,
    EHTokNeOp,
    EHTokAndOp,
    EHTokOrOp,
    EHTokXorOp,
    EHTokAssign,
    EHTokMulAssign,
    EHTokDivAssign,
    EHTokAddAssign,
    EHTokModAssign,
    EHTokLeftAssign,
    EHTokRightAssign,
    EHTokAndAssign,
    EHTokXorAssign,
    EHTokOrAssign,
    EHTokSubAssign,
    EHTokLeftParen,
    EHTokRightParen,
    EHTokLeftBracket,
    EHTokRightBracket,
    EHTokLeftBrace,
    EHTokRightBrace,
    EHTokDot,
    EHTokComma,
    EHTokColon,
    EHTokSemicolon,
    EHTokBang,
    EHTokDash,
    EHTokTilde,
    EHTokPlus,
    EHTokStar,
    EHTokSlash,
    EHTokPercent,
    EHTokLeftAngle,
    EHTokRightAngle,
    EHTokVerticalBar,
    EHTokCaret,
    EHTokAmpersand,
    EHTokQuestion,
};

} // end namespace glslang

#endif // EHLSLTOKENS_H_
