Some cleanup in API and data structures

bug: 115618941

- Fix glGetStringi bug
- Stop using KeyedVector/String8/Vector in favor
  of STL

Change-Id: I61787b81742c01c84810d856e83304218d7cbcb7
diff --git a/shared/OpenglCodecCommon/KeyedVectorUtils.h b/shared/OpenglCodecCommon/KeyedVectorUtils.h
new file mode 100644
index 0000000..97dc9f1
--- /dev/null
+++ b/shared/OpenglCodecCommon/KeyedVectorUtils.h
@@ -0,0 +1,38 @@
+/*
+* Copyright (C) 2018 The Android Open Source Project
+*
+* 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.
+*/
+#pragma once
+
+#include <map>
+
+template <typename T>
+void clearObjectMap(std::map<GLuint, T>& v) {
+    typename std::map<GLuint, T>::iterator it = v.begin();
+    for (; it != v.end(); ++it) {
+        delete it->second;
+    }
+    v.clear();
+}
+
+template <typename K, typename V>
+V findObjectOrDefault(const std::map<K, V>& m, K key, V defaultValue = 0) {
+    typename std::map<K, V>::const_iterator it = m.find(key);
+
+    if (it == m.end()) {
+        return defaultValue;
+    }
+
+    return it->second;
+}