// Copyright 2021 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

////////////////////////////////////////////////////////////////////////////////
// File generated by tools/builtin-gen
// using the template:
//   src/tint/sem/builtin_type.cc.tmpl
// and the builtin defintion file:
//   src/tint/builtins.def
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////

#include "src/tint/sem/builtin_type.h"

#include <sstream>

namespace tint {
namespace sem {

BuiltinType ParseBuiltinType(const std::string& name) {
  if (name == "abs") {
    return BuiltinType::kAbs;
  }
  if (name == "acos") {
    return BuiltinType::kAcos;
  }
  if (name == "all") {
    return BuiltinType::kAll;
  }
  if (name == "any") {
    return BuiltinType::kAny;
  }
  if (name == "arrayLength") {
    return BuiltinType::kArrayLength;
  }
  if (name == "asin") {
    return BuiltinType::kAsin;
  }
  if (name == "atan") {
    return BuiltinType::kAtan;
  }
  if (name == "atan2") {
    return BuiltinType::kAtan2;
  }
  if (name == "ceil") {
    return BuiltinType::kCeil;
  }
  if (name == "clamp") {
    return BuiltinType::kClamp;
  }
  if (name == "cos") {
    return BuiltinType::kCos;
  }
  if (name == "cosh") {
    return BuiltinType::kCosh;
  }
  if (name == "countLeadingZeros") {
    return BuiltinType::kCountLeadingZeros;
  }
  if (name == "countOneBits") {
    return BuiltinType::kCountOneBits;
  }
  if (name == "countTrailingZeros") {
    return BuiltinType::kCountTrailingZeros;
  }
  if (name == "cross") {
    return BuiltinType::kCross;
  }
  if (name == "degrees") {
    return BuiltinType::kDegrees;
  }
  if (name == "determinant") {
    return BuiltinType::kDeterminant;
  }
  if (name == "distance") {
    return BuiltinType::kDistance;
  }
  if (name == "dot") {
    return BuiltinType::kDot;
  }
  if (name == "dpdx") {
    return BuiltinType::kDpdx;
  }
  if (name == "dpdxCoarse") {
    return BuiltinType::kDpdxCoarse;
  }
  if (name == "dpdxFine") {
    return BuiltinType::kDpdxFine;
  }
  if (name == "dpdy") {
    return BuiltinType::kDpdy;
  }
  if (name == "dpdyCoarse") {
    return BuiltinType::kDpdyCoarse;
  }
  if (name == "dpdyFine") {
    return BuiltinType::kDpdyFine;
  }
  if (name == "exp") {
    return BuiltinType::kExp;
  }
  if (name == "exp2") {
    return BuiltinType::kExp2;
  }
  if (name == "extractBits") {
    return BuiltinType::kExtractBits;
  }
  if (name == "faceForward") {
    return BuiltinType::kFaceForward;
  }
  if (name == "firstLeadingBit") {
    return BuiltinType::kFirstLeadingBit;
  }
  if (name == "firstTrailingBit") {
    return BuiltinType::kFirstTrailingBit;
  }
  if (name == "floor") {
    return BuiltinType::kFloor;
  }
  if (name == "fma") {
    return BuiltinType::kFma;
  }
  if (name == "fract") {
    return BuiltinType::kFract;
  }
  if (name == "frexp") {
    return BuiltinType::kFrexp;
  }
  if (name == "fwidth") {
    return BuiltinType::kFwidth;
  }
  if (name == "fwidthCoarse") {
    return BuiltinType::kFwidthCoarse;
  }
  if (name == "fwidthFine") {
    return BuiltinType::kFwidthFine;
  }
  if (name == "insertBits") {
    return BuiltinType::kInsertBits;
  }
  if (name == "inverseSqrt") {
    return BuiltinType::kInverseSqrt;
  }
  if (name == "ldexp") {
    return BuiltinType::kLdexp;
  }
  if (name == "length") {
    return BuiltinType::kLength;
  }
  if (name == "log") {
    return BuiltinType::kLog;
  }
  if (name == "log2") {
    return BuiltinType::kLog2;
  }
  if (name == "max") {
    return BuiltinType::kMax;
  }
  if (name == "min") {
    return BuiltinType::kMin;
  }
  if (name == "mix") {
    return BuiltinType::kMix;
  }
  if (name == "modf") {
    return BuiltinType::kModf;
  }
  if (name == "normalize") {
    return BuiltinType::kNormalize;
  }
  if (name == "pack2x16float") {
    return BuiltinType::kPack2x16float;
  }
  if (name == "pack2x16snorm") {
    return BuiltinType::kPack2x16snorm;
  }
  if (name == "pack2x16unorm") {
    return BuiltinType::kPack2x16unorm;
  }
  if (name == "pack4x8snorm") {
    return BuiltinType::kPack4x8snorm;
  }
  if (name == "pack4x8unorm") {
    return BuiltinType::kPack4x8unorm;
  }
  if (name == "pow") {
    return BuiltinType::kPow;
  }
  if (name == "radians") {
    return BuiltinType::kRadians;
  }
  if (name == "reflect") {
    return BuiltinType::kReflect;
  }
  if (name == "refract") {
    return BuiltinType::kRefract;
  }
  if (name == "reverseBits") {
    return BuiltinType::kReverseBits;
  }
  if (name == "round") {
    return BuiltinType::kRound;
  }
  if (name == "select") {
    return BuiltinType::kSelect;
  }
  if (name == "sign") {
    return BuiltinType::kSign;
  }
  if (name == "sin") {
    return BuiltinType::kSin;
  }
  if (name == "sinh") {
    return BuiltinType::kSinh;
  }
  if (name == "smoothStep") {
    return BuiltinType::kSmoothStep;
  }
  if (name == "sqrt") {
    return BuiltinType::kSqrt;
  }
  if (name == "step") {
    return BuiltinType::kStep;
  }
  if (name == "storageBarrier") {
    return BuiltinType::kStorageBarrier;
  }
  if (name == "tan") {
    return BuiltinType::kTan;
  }
  if (name == "tanh") {
    return BuiltinType::kTanh;
  }
  if (name == "transpose") {
    return BuiltinType::kTranspose;
  }
  if (name == "trunc") {
    return BuiltinType::kTrunc;
  }
  if (name == "unpack2x16float") {
    return BuiltinType::kUnpack2x16float;
  }
  if (name == "unpack2x16snorm") {
    return BuiltinType::kUnpack2x16snorm;
  }
  if (name == "unpack2x16unorm") {
    return BuiltinType::kUnpack2x16unorm;
  }
  if (name == "unpack4x8snorm") {
    return BuiltinType::kUnpack4x8snorm;
  }
  if (name == "unpack4x8unorm") {
    return BuiltinType::kUnpack4x8unorm;
  }
  if (name == "workgroupBarrier") {
    return BuiltinType::kWorkgroupBarrier;
  }
  if (name == "textureDimensions") {
    return BuiltinType::kTextureDimensions;
  }
  if (name == "textureGather") {
    return BuiltinType::kTextureGather;
  }
  if (name == "textureGatherCompare") {
    return BuiltinType::kTextureGatherCompare;
  }
  if (name == "textureNumLayers") {
    return BuiltinType::kTextureNumLayers;
  }
  if (name == "textureNumLevels") {
    return BuiltinType::kTextureNumLevels;
  }
  if (name == "textureNumSamples") {
    return BuiltinType::kTextureNumSamples;
  }
  if (name == "textureSample") {
    return BuiltinType::kTextureSample;
  }
  if (name == "textureSampleBias") {
    return BuiltinType::kTextureSampleBias;
  }
  if (name == "textureSampleCompare") {
    return BuiltinType::kTextureSampleCompare;
  }
  if (name == "textureSampleCompareLevel") {
    return BuiltinType::kTextureSampleCompareLevel;
  }
  if (name == "textureSampleGrad") {
    return BuiltinType::kTextureSampleGrad;
  }
  if (name == "textureSampleLevel") {
    return BuiltinType::kTextureSampleLevel;
  }
  if (name == "textureStore") {
    return BuiltinType::kTextureStore;
  }
  if (name == "textureLoad") {
    return BuiltinType::kTextureLoad;
  }
  if (name == "atomicLoad") {
    return BuiltinType::kAtomicLoad;
  }
  if (name == "atomicStore") {
    return BuiltinType::kAtomicStore;
  }
  if (name == "atomicAdd") {
    return BuiltinType::kAtomicAdd;
  }
  if (name == "atomicSub") {
    return BuiltinType::kAtomicSub;
  }
  if (name == "atomicMax") {
    return BuiltinType::kAtomicMax;
  }
  if (name == "atomicMin") {
    return BuiltinType::kAtomicMin;
  }
  if (name == "atomicAnd") {
    return BuiltinType::kAtomicAnd;
  }
  if (name == "atomicOr") {
    return BuiltinType::kAtomicOr;
  }
  if (name == "atomicXor") {
    return BuiltinType::kAtomicXor;
  }
  if (name == "atomicExchange") {
    return BuiltinType::kAtomicExchange;
  }
  if (name == "atomicCompareExchangeWeak") {
    return BuiltinType::kAtomicCompareExchangeWeak;
  }
  return BuiltinType::kNone;
}

const char* str(BuiltinType i) {
  switch (i) {
    case BuiltinType::kNone:
      return "<none>";
    case BuiltinType::kAbs:
      return "abs";
    case BuiltinType::kAcos:
      return "acos";
    case BuiltinType::kAll:
      return "all";
    case BuiltinType::kAny:
      return "any";
    case BuiltinType::kArrayLength:
      return "arrayLength";
    case BuiltinType::kAsin:
      return "asin";
    case BuiltinType::kAtan:
      return "atan";
    case BuiltinType::kAtan2:
      return "atan2";
    case BuiltinType::kCeil:
      return "ceil";
    case BuiltinType::kClamp:
      return "clamp";
    case BuiltinType::kCos:
      return "cos";
    case BuiltinType::kCosh:
      return "cosh";
    case BuiltinType::kCountLeadingZeros:
      return "countLeadingZeros";
    case BuiltinType::kCountOneBits:
      return "countOneBits";
    case BuiltinType::kCountTrailingZeros:
      return "countTrailingZeros";
    case BuiltinType::kCross:
      return "cross";
    case BuiltinType::kDegrees:
      return "degrees";
    case BuiltinType::kDeterminant:
      return "determinant";
    case BuiltinType::kDistance:
      return "distance";
    case BuiltinType::kDot:
      return "dot";
    case BuiltinType::kDpdx:
      return "dpdx";
    case BuiltinType::kDpdxCoarse:
      return "dpdxCoarse";
    case BuiltinType::kDpdxFine:
      return "dpdxFine";
    case BuiltinType::kDpdy:
      return "dpdy";
    case BuiltinType::kDpdyCoarse:
      return "dpdyCoarse";
    case BuiltinType::kDpdyFine:
      return "dpdyFine";
    case BuiltinType::kExp:
      return "exp";
    case BuiltinType::kExp2:
      return "exp2";
    case BuiltinType::kExtractBits:
      return "extractBits";
    case BuiltinType::kFaceForward:
      return "faceForward";
    case BuiltinType::kFirstLeadingBit:
      return "firstLeadingBit";
    case BuiltinType::kFirstTrailingBit:
      return "firstTrailingBit";
    case BuiltinType::kFloor:
      return "floor";
    case BuiltinType::kFma:
      return "fma";
    case BuiltinType::kFract:
      return "fract";
    case BuiltinType::kFrexp:
      return "frexp";
    case BuiltinType::kFwidth:
      return "fwidth";
    case BuiltinType::kFwidthCoarse:
      return "fwidthCoarse";
    case BuiltinType::kFwidthFine:
      return "fwidthFine";
    case BuiltinType::kInsertBits:
      return "insertBits";
    case BuiltinType::kInverseSqrt:
      return "inverseSqrt";
    case BuiltinType::kLdexp:
      return "ldexp";
    case BuiltinType::kLength:
      return "length";
    case BuiltinType::kLog:
      return "log";
    case BuiltinType::kLog2:
      return "log2";
    case BuiltinType::kMax:
      return "max";
    case BuiltinType::kMin:
      return "min";
    case BuiltinType::kMix:
      return "mix";
    case BuiltinType::kModf:
      return "modf";
    case BuiltinType::kNormalize:
      return "normalize";
    case BuiltinType::kPack2x16float:
      return "pack2x16float";
    case BuiltinType::kPack2x16snorm:
      return "pack2x16snorm";
    case BuiltinType::kPack2x16unorm:
      return "pack2x16unorm";
    case BuiltinType::kPack4x8snorm:
      return "pack4x8snorm";
    case BuiltinType::kPack4x8unorm:
      return "pack4x8unorm";
    case BuiltinType::kPow:
      return "pow";
    case BuiltinType::kRadians:
      return "radians";
    case BuiltinType::kReflect:
      return "reflect";
    case BuiltinType::kRefract:
      return "refract";
    case BuiltinType::kReverseBits:
      return "reverseBits";
    case BuiltinType::kRound:
      return "round";
    case BuiltinType::kSelect:
      return "select";
    case BuiltinType::kSign:
      return "sign";
    case BuiltinType::kSin:
      return "sin";
    case BuiltinType::kSinh:
      return "sinh";
    case BuiltinType::kSmoothStep:
      return "smoothStep";
    case BuiltinType::kSqrt:
      return "sqrt";
    case BuiltinType::kStep:
      return "step";
    case BuiltinType::kStorageBarrier:
      return "storageBarrier";
    case BuiltinType::kTan:
      return "tan";
    case BuiltinType::kTanh:
      return "tanh";
    case BuiltinType::kTranspose:
      return "transpose";
    case BuiltinType::kTrunc:
      return "trunc";
    case BuiltinType::kUnpack2x16float:
      return "unpack2x16float";
    case BuiltinType::kUnpack2x16snorm:
      return "unpack2x16snorm";
    case BuiltinType::kUnpack2x16unorm:
      return "unpack2x16unorm";
    case BuiltinType::kUnpack4x8snorm:
      return "unpack4x8snorm";
    case BuiltinType::kUnpack4x8unorm:
      return "unpack4x8unorm";
    case BuiltinType::kWorkgroupBarrier:
      return "workgroupBarrier";
    case BuiltinType::kTextureDimensions:
      return "textureDimensions";
    case BuiltinType::kTextureGather:
      return "textureGather";
    case BuiltinType::kTextureGatherCompare:
      return "textureGatherCompare";
    case BuiltinType::kTextureNumLayers:
      return "textureNumLayers";
    case BuiltinType::kTextureNumLevels:
      return "textureNumLevels";
    case BuiltinType::kTextureNumSamples:
      return "textureNumSamples";
    case BuiltinType::kTextureSample:
      return "textureSample";
    case BuiltinType::kTextureSampleBias:
      return "textureSampleBias";
    case BuiltinType::kTextureSampleCompare:
      return "textureSampleCompare";
    case BuiltinType::kTextureSampleCompareLevel:
      return "textureSampleCompareLevel";
    case BuiltinType::kTextureSampleGrad:
      return "textureSampleGrad";
    case BuiltinType::kTextureSampleLevel:
      return "textureSampleLevel";
    case BuiltinType::kTextureStore:
      return "textureStore";
    case BuiltinType::kTextureLoad:
      return "textureLoad";
    case BuiltinType::kAtomicLoad:
      return "atomicLoad";
    case BuiltinType::kAtomicStore:
      return "atomicStore";
    case BuiltinType::kAtomicAdd:
      return "atomicAdd";
    case BuiltinType::kAtomicSub:
      return "atomicSub";
    case BuiltinType::kAtomicMax:
      return "atomicMax";
    case BuiltinType::kAtomicMin:
      return "atomicMin";
    case BuiltinType::kAtomicAnd:
      return "atomicAnd";
    case BuiltinType::kAtomicOr:
      return "atomicOr";
    case BuiltinType::kAtomicXor:
      return "atomicXor";
    case BuiltinType::kAtomicExchange:
      return "atomicExchange";
    case BuiltinType::kAtomicCompareExchangeWeak:
      return "atomicCompareExchangeWeak";
  }
  return "<unknown>";
}

std::ostream& operator<<(std::ostream& out, BuiltinType i) {
  out << str(i);
  return out;
}

}  // namespace sem
}  // namespace tint
