#ifndef SCOPE_H #define SCOPE_H #include #include #include 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