From e2569c0a5450f9c2a9a39e61e3f30ca335e76204 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Fri, 1 Oct 2010 15:49:40 +0000 Subject: [PATCH] added util/Scope.h git-svn-id: svn://anubis/fart/branches/scene-file-scripting@328 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- main/Scene-load.cc | 1 + util/Scope.h | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 util/Scope.h diff --git a/main/Scene-load.cc b/main/Scene-load.cc index 9a4c75a..e4b982c 100644 --- a/main/Scene-load.cc +++ b/main/Scene-load.cc @@ -9,6 +9,7 @@ #include "parser/parser.h" #include "parser/nodes.h" #include "util/Polygon.h" +#include "util/Scope.h" using namespace std; diff --git a/util/Scope.h b/util/Scope.h new file mode 100644 index 0000000..9089053 --- /dev/null +++ b/util/Scope.h @@ -0,0 +1,55 @@ + +#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