git-svn-id: svn://anubis/fart/branches/scene-file-scripting@328 7f9b0f55-74a9-4bce-be96-3c2cd072584d
56 lines
1.3 KiB
C++
56 lines
1.3 KiB
C++
|
|
#ifndef SCOPE_H
|
|
#define SCOPE_H
|
|
|
|
#include <list>
|
|
#include <map>
|
|
#include <string>
|
|
|
|
class Scope
|
|
{
|
|
public:
|
|
Scope() { push(); }
|
|
bool contains(const std::string & key)
|
|
{
|
|
for (m_list_type::const_reverse_iterator it = m_list.rbegin();
|
|
it != m_list.rend();
|
|
it++)
|
|
{
|
|
if (it->find(key) != it->end())
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
double & operator[](const std::string & key)
|
|
{
|
|
for (m_list_type::reverse_iterator it = m_list.rbegin();
|
|
it != m_list.rend();
|
|
it++)
|
|
{
|
|
if (it->find(key) != it->end())
|
|
{
|
|
return (*it)[key];
|
|
}
|
|
}
|
|
return (*m_list.rbegin())[key];
|
|
}
|
|
void push()
|
|
{
|
|
m_list.push_back(std::map< std::string, double >());
|
|
}
|
|
void pop()
|
|
{
|
|
if (m_list.size() > 1)
|
|
{
|
|
m_list.pop_back();
|
|
}
|
|
}
|
|
protected:
|
|
typedef std::list< std::map< std::string, double > > m_list_type;
|
|
m_list_type m_list;
|
|
};
|
|
|
|
#endif
|