From d3dbad6489340876d3b0b4d139970df11718de3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=A1vio=20Lisb=C3=B4a?= Date: Sun, 11 Jun 2017 22:31:40 -0300 Subject: [PATCH] #14: adl/oct: Create Literal-named Units for Component Unit `adl/oct/var` Closes #14 --- include/adl/oct/var/base_.hpp | 5 ++- include/adl/oct/var/identity_.hpp | 58 +++-------------------------- include/adl/oct/var/view_named_.hpp | 7 +++- 3 files changed, 15 insertions(+), 55 deletions(-) diff --git a/include/adl/oct/var/base_.hpp b/include/adl/oct/var/base_.hpp index 9a4e61c..d53e3c6 100644 --- a/include/adl/oct/var/base_.hpp +++ b/include/adl/oct/var/base_.hpp @@ -696,7 +696,10 @@ constexpr string_view lit_named_var_base_::name() const noex template adl_IMPL std::string lit_named_var_base_::to_string() const { - return var_id_traits::id_to_name(id(), std::string(name_.data(), name_.size())); + std::string base_name = !name_.empty() + ? std::string(name_.data(), name_.size()) + : std::string(var_id_limits::base_var_name_format); + return var_id_traits::id_to_name(id(), base_name); } template diff --git a/include/adl/oct/var/identity_.hpp b/include/adl/oct/var/identity_.hpp index b616e05..594186d 100644 --- a/include/adl/oct/var/identity_.hpp +++ b/include/adl/oct/var/identity_.hpp @@ -19,7 +19,8 @@ // // [[ API ]] // -adl_BEGIN_MAIN_MODULE(oct) +adl_BEGIN_ROOT_MODULE +namespace oct { template <> struct adl_CLASS var_traits { @@ -35,10 +36,6 @@ struct adl_CLASS var_traits { constexpr static const bool valid = true; constexpr static const auto space = var_id_traits::space; constexpr static const auto counterpart_space = var_id_traits::counterpart_space; - - // static functions - constexpr static var_type var_with_id(const var_type& var, var_id_type id); - constexpr static counterpart_var_type var_to_counterpart(const var_type& var, var_id_type counterpart_id); }; template <> @@ -55,10 +52,6 @@ struct adl_CLASS var_traits { constexpr static const bool valid = true; constexpr static const auto space = var_id_traits::space; constexpr static const auto counterpart_space = var_id_traits::counterpart_space; - - // static functions - constexpr static var_type var_with_id(const var_type& var, var_id_type id); - constexpr static counterpart_var_type var_to_counterpart(const var_type& var, var_id_type counterpart_id); }; class adl_CLASS oct_var : public unnamed_var_base_ { @@ -75,59 +68,20 @@ class adl_CLASS octdiff_var : public unnamed_var_base_ { using unnamed_var_base_::operator=; }; +} // namespace oct + namespace literals { inline namespace oct { constexpr adl::oct::oct_var operator "" _ov(unsigned long long int id); } // oct } // literals +adl_END_ROOT_MODULE -adl_END_MAIN_MODULE - -// -// [[ TEMPLATE IMPLEMENTATION ]] -// -adl_BEGIN_MAIN_MODULE(oct) - -// -// specialization: var_traits -// -constexpr typename var_traits::var_type -var_traits::var_with_id( - const var_traits::var_type& var, - var_id_type id -) { - return var_type(id); -} - -constexpr typename var_traits::counterpart_var_type -var_traits::var_to_counterpart( - const var_traits::var_type& var, - var_id_type counterpart_id -) { - return counterpart_var_type(counterpart_id); -} // -// specialization: var_traits +// [[ IMPLEMENTATION ]] // -constexpr typename var_traits::var_type -var_traits::var_with_id( - const var_traits::var_type& var, - var_id_type id -) { - return var_type(id); -} - -constexpr typename var_traits::counterpart_var_type -var_traits::var_to_counterpart( - const var_traits::var_type& var, - var_id_type counterpart_id -) { - return counterpart_var_type(counterpart_id); -} - -adl_END_MAIN_MODULE adl_BEGIN_ROOT_MODULE namespace literals { diff --git a/include/adl/oct/var/view_named_.hpp b/include/adl/oct/var/view_named_.hpp index ac7e2a6..5522a88 100644 --- a/include/adl/oct/var/view_named_.hpp +++ b/include/adl/oct/var/view_named_.hpp @@ -21,7 +21,8 @@ // // [[ API ]] // -adl_BEGIN_MAIN_MODULE(oct) +adl_BEGIN_ROOT_MODULE +namespace oct { template <> struct adl_CLASS var_traits { @@ -69,6 +70,8 @@ class adl_CLASS octdiff_lvar : public lit_named_var_base_ { using lit_named_var_base_::operator=; }; +} // namespace oct + namespace literals { inline namespace oct { constexpr adl::oct::oct_lvar operator "" _ol(unsigned long long int id); @@ -76,7 +79,7 @@ namespace literals { } // oct } // literals -adl_END_MAIN_MODULE +adl_END_ROOT_MODULE //