diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-03-28 15:59:06 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-03-28 16:03:35 +0200 |
commit | 96f2131e593e206f0e458409f22adfff8c1b5356 (patch) | |
tree | fdb71a7a435d631872e0413dbe13113a636932de /build2/variable | |
parent | 69801c4e23f877359118e55ed291737f4fbece04 (diff) |
Clean up variable usage
Diffstat (limited to 'build2/variable')
-rw-r--r-- | build2/variable | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/build2/variable b/build2/variable index 57debfa..931b4f7 100644 --- a/build2/variable +++ b/build2/variable @@ -200,6 +200,15 @@ namespace build2 template <typename T> T& cast (const lookup<value>&); template <typename T> const T& cast (const lookup<const value>&); + // As above but returns NULL if the value is NULL (or not defined, in + // case of lookup). + // + template <typename T> T* cast_null (value&); + template <typename T> const T* cast_null (const value&); + + template <typename T> T* cast_null (const lookup<value>&); + template <typename T> const T* cast_null (const lookup<const value>&); + // Assign value type to the value. Variable is normally only used for // diagnostics. // @@ -367,6 +376,20 @@ namespace build2 static const build2::value_type value_type; }; + template <> + struct value_traits<uint64_t> + { + static_assert (sizeof (uint64_t) <= value::size_, "insufficient space"); + + static uint64_t convert (name&&, name*); + static bool assign (value&, uint64_t); + static bool append (value&, uint64_t); // ADD. + static name reverse (uint64_t x) {return name (to_string (x));} + static int compare (uint64_t, uint64_t); + + static const build2::value_type value_type; + }; + // string // template <> @@ -384,6 +407,23 @@ namespace build2 static const build2::value_type value_type; }; + // path + // + template <> + struct value_traits<path> + { + static_assert (sizeof (path) <= value::size_, "insufficient space"); + + static path convert (name&&, name*); + static bool assign (value&, path&&); + static bool append (value&, path&&); // operator/ + static bool prepend (value&, path&&); // operator/ + static name reverse (const path& x) {return name (x.string ());} + static int compare (const path&, const path&); + + static const build2::value_type value_type; + }; + // dir_path // template <> |