// file : cutl/compiler/context.hxx // author : Boris Kolpackov // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC // license : MIT; see accompanying LICENSE file #ifndef CUTL_COMPILER_CONTEXT_HXX #define CUTL_COMPILER_CONTEXT_HXX #include #include #include // std::size_t #include #include #include #include namespace cutl { namespace compiler { class LIBCUTL_EXPORT context { public: struct LIBCUTL_EXPORT no_entry: exception {}; struct LIBCUTL_EXPORT typing: exception {}; public: context () {} void swap (context& c) { map_.swap (c.map_); } private: context (context const&); context& operator= (context const&); public: std::size_t count (char const* key) const { return count (std::string (key)); } std::size_t count (std::string const& key) const { return map_.count (key); } template X& get (char const* key) { return get (std::string (key)); } template X& get (std::string const& key); template X const& get (char const* key) const { return get (std::string (key)); } template X const& get (std::string const& key) const; template X const& get (char const* key, X const& default_value) const { return get (std::string (key), default_value); } template X const& get (std::string const& key, X const& default_value) const; template X& set (char const* key, X const& value) { return set (std::string (key), value); } template X& set (std::string const& key, X const& value); void remove (char const* key) { remove (std::string (key)); } void remove (std::string const& key); std::type_info const& type_info (char const* key) const { return type_info (std::string (key)); } std::type_info const& type_info (std::string const& key) const; private: typedef std::map map; map map_; }; } } #include #endif // CUTL_COMPILER_CONTEXT_HXX