1 // 2 // Copyright 2014 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 #include "libANGLE/AttributeMap.h" 8 9 #include "common/debug.h" 10 11 namespace egl 12 { 13 14 AttributeMap::AttributeMap() = default; 15 16 AttributeMap::AttributeMap(const AttributeMap &other) = default; 17 18 AttributeMap &AttributeMap::operator=(const AttributeMap &other) = default; 19 20 AttributeMap::~AttributeMap() = default; 21 insert(EGLAttrib key,EGLAttrib value)22void AttributeMap::insert(EGLAttrib key, EGLAttrib value) 23 { 24 mAttributes[key] = value; 25 } 26 contains(EGLAttrib key) const27bool AttributeMap::contains(EGLAttrib key) const 28 { 29 return (mAttributes.find(key) != mAttributes.end()); 30 } 31 get(EGLAttrib key) const32EGLAttrib AttributeMap::get(EGLAttrib key) const 33 { 34 auto iter = mAttributes.find(key); 35 ASSERT(iter != mAttributes.end()); 36 return iter->second; 37 } 38 get(EGLAttrib key,EGLAttrib defaultValue) const39EGLAttrib AttributeMap::get(EGLAttrib key, EGLAttrib defaultValue) const 40 { 41 auto iter = mAttributes.find(key); 42 return (iter != mAttributes.end()) ? iter->second : defaultValue; 43 } 44 getAsInt(EGLAttrib key) const45EGLint AttributeMap::getAsInt(EGLAttrib key) const 46 { 47 return static_cast<EGLint>(get(key)); 48 } 49 getAsInt(EGLAttrib key,EGLint defaultValue) const50EGLint AttributeMap::getAsInt(EGLAttrib key, EGLint defaultValue) const 51 { 52 return static_cast<EGLint>(get(key, static_cast<EGLAttrib>(defaultValue))); 53 } 54 isEmpty() const55bool AttributeMap::isEmpty() const 56 { 57 return mAttributes.empty(); 58 } 59 toIntVector() const60std::vector<EGLint> AttributeMap::toIntVector() const 61 { 62 std::vector<EGLint> ret; 63 for (const auto &pair : mAttributes) 64 { 65 ret.push_back(static_cast<EGLint>(pair.first)); 66 ret.push_back(static_cast<EGLint>(pair.second)); 67 } 68 ret.push_back(EGL_NONE); 69 70 return ret; 71 } 72 begin() const73AttributeMap::const_iterator AttributeMap::begin() const 74 { 75 return mAttributes.begin(); 76 } 77 end() const78AttributeMap::const_iterator AttributeMap::end() const 79 { 80 return mAttributes.end(); 81 } 82 83 // static CreateFromIntArray(const EGLint * attributes)84AttributeMap AttributeMap::CreateFromIntArray(const EGLint *attributes) 85 { 86 AttributeMap map; 87 if (attributes) 88 { 89 for (const EGLint *curAttrib = attributes; curAttrib[0] != EGL_NONE; curAttrib += 2) 90 { 91 map.insert(static_cast<EGLAttrib>(curAttrib[0]), static_cast<EGLAttrib>(curAttrib[1])); 92 } 93 } 94 return map; 95 } 96 97 // static CreateFromAttribArray(const EGLAttrib * attributes)98AttributeMap AttributeMap::CreateFromAttribArray(const EGLAttrib *attributes) 99 { 100 AttributeMap map; 101 if (attributes) 102 { 103 for (const EGLAttrib *curAttrib = attributes; curAttrib[0] != EGL_NONE; curAttrib += 2) 104 { 105 map.insert(curAttrib[0], curAttrib[1]); 106 } 107 } 108 return map; 109 } 110 } // namespace egl 111