/* KDevelop CMake Support * * Copyright 2007 Aleix Pol * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include "variablemap.h" #include VariableMap::VariableMap() { m_scopes.push(QSet()); } QStringList splitVariable(const QStringList& input) { QStringList ret; foreach(const QString& v, input) { if(v.isEmpty()) continue; ret += v.split(';'); } return ret; } void VariableMap::insert(const QString& varName, const QStringList& value, bool parentScope) { QSet< QString >* current; // qDebug() << "leeeeeeeeeeeeE" << varName << value << parentScope; if(parentScope && m_scopes.size()>1) { //TODO: provide error? current = &m_scopes[m_scopes.size()-2]; m_scopes.top().remove(varName); } else current = &m_scopes.top(); QStringList ret = splitVariable(value); if(current->contains(varName)) (*this)[varName]=ret; else { current->insert(varName); QHash::insertMulti(varName, ret); } // QHash::insert(varName, ret); // qDebug() << "++++++++" << varName << QHash::value(varName); } QHash::iterator VariableMap::insertMulti(const QString & varName, const QStringList & value) { return QHash::insertMulti(varName, splitVariable(value)); } void VariableMap::insertGlobal(const QString& varName, const QStringList& value) { QHash::insert(varName, value); } void VariableMap::pushScope() { m_scopes.push(QSet()); } void VariableMap::popScope() { QSet t=m_scopes.pop(); foreach(const QString& var, t) { // qDebug() << "removing........" << var << QHash::value(var); take(var); } } int VariableMap::removeMulti(const QString& varName) { iterator it = find(varName); if(it==end()) return 0; else { erase(it); return 1; } }