From cb9ea47e7825b5073d4d645afb94f6326cb7cf4d Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sun, 6 Sep 2009 12:52:53 +0200 Subject: Start the libcutl repository --- cutl/compiler/context.txx | 85 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 cutl/compiler/context.txx (limited to 'cutl/compiler/context.txx') diff --git a/cutl/compiler/context.txx b/cutl/compiler/context.txx new file mode 100644 index 0000000..55a24f7 --- /dev/null +++ b/cutl/compiler/context.txx @@ -0,0 +1,85 @@ +// file : cutl/compiler/context.txx +// author : Boris Kolpackov +// copyright : Copyright (c) 2009 Code Synthesis Tools CC +// license : MIT; see accompanying LICENSE file + +namespace cutl +{ + namespace compiler + { + template + X& context:: + get (char const* key) + { + map::iterator i (map_.find (key)); + + if (i == map_.end ()) + throw no_entry (); + + try + { + return i->second.value (); + } + catch (container::any::typing const&) + { + throw typing (); + } + } + + template + X const& context:: + get (char const* key) const + { + map::const_iterator i (map_.find (key)); + + if (i == map_.end ()) + throw no_entry (); + + try + { + return i->second.value (); + } + catch (container::any::typing const&) + { + throw typing (); + } + } + + template + X const& context:: + get (char const* key, X const& default_value) const + { + map::const_iterator i (map_.find (key)); + + if (i == map_.end ()) + return default_value; + + try + { + return i->second.value (); + } + catch (container::any::typing const&) + { + throw typing (); + } + } + + template + void context:: + set (char const* key, X const& value) + { + try + { + std::pair r ( + map_.insert (map::value_type (key, value))); + + if (!r.second) + r.first->second.value () = value; + } + catch (container::any::typing const&) + { + throw typing (); + } + } + } +} -- cgit v1.1