// file : build/variable.cxx -*- C++ -*- // copyright : Copyright (c) 2014-2015 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file #include #include using namespace std; namespace build { variable_set variable_pool; // value_proxy // template <> string& value_proxy:: as () const { list_value& lv (as ()); assert (lv.size () == 1); name& n (lv.front ()); assert (n.simple ()); return n.value; } template <> const string& value_proxy:: as () const { const list_value& lv (as ()); assert (lv.size () < 2); if (lv.empty ()) return empty_string; const name& n (lv.front ()); assert (n.simple ()); return n.value; } template <> dir_path& value_proxy:: as () const { list_value& lv (as ()); assert (lv.size () == 1); name& n (lv.front ()); assert (n.directory ()); return n.dir; } template <> const dir_path& value_proxy:: as () const { const list_value& lv (as ()); assert (lv.size () < 2); if (lv.empty ()) return empty_dir_path; const name& n (lv.front ()); if (n.empty ()) return empty_dir_path; assert (n.directory ()); return n.dir; } template <> bool value_proxy:: as () const { const list_value& lv (as ()); assert (lv.size () == 1); const name& n (lv.front ()); assert (n.simple ()); if (n.value == "true") return true; else if (n.value == "false") return false; else assert (false); // Bool value should be 'true' or 'false'. } }