// file : cutl/compiler/context.hxx // copyright : Copyright (c) 2009-2017 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 no_entry: exception {}; struct 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 set (char const* key, container::any const& value) { return set (std::string (key), value); } void set (std::string const& key, container::any 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