blob: bceb0a0ad8903992712e6d70f9b3f5493a6d8d38 [file] [log] [blame]
/*
* Copyright (C) 2016 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.
*/
#include "GLcommon/ObjectNameSpace.h"
#include "GLcommon/GLEScontext.h"
#include <assert.h>
NameSpace::NameSpace(NamedObjectType p_type,
GlobalNameSpace *globalNameSpace) :
m_type(p_type),
m_globalNameSpace(globalNameSpace) {}
NameSpace::~NameSpace()
{
}
ObjectLocalName
NameSpace::genName(GenNameInfo genNameInfo, ObjectLocalName p_localName, bool genLocal)
{
assert(m_type == genNameInfo.m_type);
ObjectLocalName localName = p_localName;
if (genLocal) {
do {
localName = ++m_nextName;
} while(localName == 0 ||
m_localToGlobalMap.find(localName) !=
m_localToGlobalMap.end() );
}
auto it = m_localToGlobalMap.emplace(localName,
NamedObjectPtr(
new NamedObject(genNameInfo,
m_globalNameSpace))).first;
unsigned int globalName = it->second->getGlobalName();
m_globalToLocalMap[globalName] = localName;
return localName;
}
unsigned int
NameSpace::getGlobalName(ObjectLocalName p_localName)
{
NamesMap::iterator n( m_localToGlobalMap.find(p_localName) );
if (n != m_localToGlobalMap.end()) {
// object found - return its global name map
return (*n).second->getGlobalName();
}
// object does not exist;
return 0;
}
ObjectLocalName
NameSpace::getLocalName(unsigned int p_globalName)
{
const auto it = m_globalToLocalMap.find(p_globalName);
if (it != m_globalToLocalMap.end()) {
return it->second;
}
return 0;
}
NamedObjectPtr NameSpace::getNamedObject(ObjectLocalName p_localName) {
auto it = m_localToGlobalMap.find(p_localName);
if (it != m_localToGlobalMap.end()) {
return it->second;
}
return nullptr;
}
void
NameSpace::deleteName(ObjectLocalName p_localName)
{
NamesMap::iterator n( m_localToGlobalMap.find(p_localName) );
if (n != m_localToGlobalMap.end()) {
m_globalToLocalMap.erase(n->second->getGlobalName());
m_localToGlobalMap.erase(n);
}
}
bool
NameSpace::isObject(ObjectLocalName p_localName)
{
return (m_localToGlobalMap.find(p_localName) != m_localToGlobalMap.end() );
}
void
NameSpace::replaceGlobalObject(ObjectLocalName p_localName,
NamedObjectPtr p_namedObject)
{
NamesMap::iterator n( m_localToGlobalMap.find(p_localName) );
if (n != m_localToGlobalMap.end()) {
m_globalToLocalMap.erase(n->second->getGlobalName());
(*n).second = p_namedObject;
m_globalToLocalMap.emplace(p_namedObject->getGlobalName(), p_localName);
}
}