//
// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

#ifndef COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_
#define COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_

#include <map>
#include <string>

typedef enum { EBhRequire, EBhEnable, EBhWarn, EBhDisable, EBhUndefined } TBehavior;

inline const char *getBehaviorString(TBehavior b)
{
    switch (b)
    {
        case EBhRequire:
            return "require";
        case EBhEnable:
            return "enable";
        case EBhWarn:
            return "warn";
        case EBhDisable:
            return "disable";
        default:
            return nullptr;
    }
}

// Mapping between extension name and behavior.
typedef std::map<std::string, TBehavior> TExtensionBehavior;

inline bool IsExtensionEnabled(const TExtensionBehavior &extBehavior, const char *extension)
{
    auto iter = extBehavior.find(extension);
    return iter != extBehavior.end() && (iter->second == EBhEnable || iter->second == EBhRequire);
}

#endif  // COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_
