// // Copyright (c) 2014 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. // #include "libANGLE/AttributeMap.h" #include "common/debug.h" namespace egl { AttributeMap::AttributeMap() { } AttributeMap::AttributeMap(const AttributeMap &other) = default; AttributeMap::~AttributeMap() = default; void AttributeMap::insert(EGLAttrib key, EGLAttrib value) { mAttributes[key] = value; } bool AttributeMap::contains(EGLAttrib key) const { return (mAttributes.find(key) != mAttributes.end()); } EGLAttrib AttributeMap::get(EGLAttrib key) const { auto iter = mAttributes.find(key); ASSERT(iter != mAttributes.end()); return iter->second; } EGLAttrib AttributeMap::get(EGLAttrib key, EGLAttrib defaultValue) const { auto iter = mAttributes.find(key); return (mAttributes.find(key) != mAttributes.end()) ? iter->second : defaultValue; } EGLint AttributeMap::getAsInt(EGLAttrib key) const { return static_cast(get(key)); } EGLint AttributeMap::getAsInt(EGLAttrib key, EGLint defaultValue) const { return static_cast(get(key, static_cast(defaultValue))); } bool AttributeMap::isEmpty() const { return mAttributes.empty(); } std::vector AttributeMap::toIntVector() const { std::vector ret; for (const auto &pair : mAttributes) { ret.push_back(static_cast(pair.first)); ret.push_back(static_cast(pair.second)); } ret.push_back(EGL_NONE); return ret; } AttributeMap::const_iterator AttributeMap::begin() const { return mAttributes.begin(); } AttributeMap::const_iterator AttributeMap::end() const { return mAttributes.end(); } // static AttributeMap AttributeMap::CreateFromIntArray(const EGLint *attributes) { AttributeMap map; if (attributes) { for (const EGLint *curAttrib = attributes; curAttrib[0] != EGL_NONE; curAttrib += 2) { map.insert(static_cast(curAttrib[0]), static_cast(curAttrib[1])); } } return map; } // static AttributeMap AttributeMap::CreateFromAttribArray(const EGLAttrib *attributes) { AttributeMap map; if (attributes) { for (const EGLAttrib *curAttrib = attributes; curAttrib[0] != EGL_NONE; curAttrib += 2) { map.insert(curAttrib[0], curAttrib[1]); } } return map; } }