Skip to content

Commit

Permalink
#14: adl/oct: Create Literal-named Units for Component Unit `adl/oct/…
Browse files Browse the repository at this point in the history
…var`

Closes #14
  • Loading branch information
flisboac committed Jun 12, 2017
1 parent aee6198 commit d3dbad6
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 55 deletions.
5 changes: 4 additions & 1 deletion include/adl/oct/var/base_.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -696,7 +696,10 @@ constexpr string_view lit_named_var_base_<VarType, VarTraits>::name() const noex

template <typename VarType, typename VarTraits>
adl_IMPL std::string lit_named_var_base_<VarType, VarTraits>::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 <typename VarType, typename VarTraits>
Expand Down
58 changes: 6 additions & 52 deletions include/adl/oct/var/identity_.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
//
// [[ API ]]
//
adl_BEGIN_MAIN_MODULE(oct)
adl_BEGIN_ROOT_MODULE
namespace oct {

template <>
struct adl_CLASS var_traits<oct_var> {
Expand All @@ -35,10 +36,6 @@ struct adl_CLASS var_traits<oct_var> {
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 <>
Expand All @@ -55,10 +52,6 @@ struct adl_CLASS var_traits<octdiff_var> {
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_<oct_var> {
Expand All @@ -75,59 +68,20 @@ class adl_CLASS octdiff_var : public unnamed_var_base_<octdiff_var> {
using unnamed_var_base_<octdiff_var>::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<oct_var>
//
constexpr typename var_traits<oct_var>::var_type
var_traits<oct_var>::var_with_id(
const var_traits<oct_var>::var_type& var,
var_id_type id
) {
return var_type(id);
}

constexpr typename var_traits<oct_var>::counterpart_var_type
var_traits<oct_var>::var_to_counterpart(
const var_traits<oct_var>::var_type& var,
var_id_type counterpart_id
) {
return counterpart_var_type(counterpart_id);
}

//
// specialization: var_traits<octdiff_var>
// [[ IMPLEMENTATION ]]
//
constexpr typename var_traits<octdiff_var>::var_type
var_traits<octdiff_var>::var_with_id(
const var_traits<octdiff_var>::var_type& var,
var_id_type id
) {
return var_type(id);
}

constexpr typename var_traits<octdiff_var>::counterpart_var_type
var_traits<octdiff_var>::var_to_counterpart(
const var_traits<octdiff_var>::var_type& var,
var_id_type counterpart_id
) {
return counterpart_var_type(counterpart_id);
}

adl_END_MAIN_MODULE
adl_BEGIN_ROOT_MODULE

namespace literals {
Expand Down
7 changes: 5 additions & 2 deletions include/adl/oct/var/view_named_.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
//
// [[ API ]]
//
adl_BEGIN_MAIN_MODULE(oct)
adl_BEGIN_ROOT_MODULE
namespace oct {

template <>
struct adl_CLASS var_traits<oct_lvar> {
Expand Down Expand Up @@ -69,14 +70,16 @@ class adl_CLASS octdiff_lvar : public lit_named_var_base_<octdiff_lvar> {
using lit_named_var_base_<octdiff_lvar>::operator=;
};

} // namespace oct

namespace literals {
inline namespace oct {
constexpr adl::oct::oct_lvar operator "" _ol(unsigned long long int id);
constexpr adl::oct::oct_lvar operator "" _ol(const char* name, size_t name_size);
} // oct
} // literals

adl_END_MAIN_MODULE
adl_END_ROOT_MODULE


//
Expand Down

0 comments on commit d3dbad6

Please sign in to comment.