Skip to content

Commit

Permalink
Added Allocator template parameter to the dense_dbm concept (cpu::den…
Browse files Browse the repository at this point in the history
…se_dbm, context_base_)
  • Loading branch information
Flávio Lisbôa committed Jan 22, 2018
1 parent 66919ba commit cd0efd0
Show file tree
Hide file tree
Showing 5 changed files with 150 additions and 176 deletions.
3 changes: 1 addition & 2 deletions include/adl/oct.fwd.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,6 @@ template <typename Subclass, typename ConstantType, typename ValueLimits = const

// dbm/dense_dbm.hpp
template <typename Subclass, typename ConstantType, typename ValueLimits = constant_limits<ConstantType>> class dense_dbm_base_;
template <typename ConstantType, typename ValueLimits = constant_limits<ConstantType>, typename Allocator = std::allocator<ConstantType>> class dense_dbm;

//
// context.hpp
Expand All @@ -181,7 +180,7 @@ namespace cpu {
template <typename SubType, typename DbmType, typename ContextType, typename ResultType> class oper_base_;
}

template <typename ContextType, typename ConstantType, typename ValueLimits = constant_limits<ConstantType>> class dense_dbm;
template <typename ContextType, typename ConstantType, typename ValueLimits = constant_limits<ConstantType>, typename Allocator = std::allocator<ConstantType>> class dense_dbm;

// Specific
template <typename DbmType, typename ContextType> class null_oper;
Expand Down
170 changes: 72 additions & 98 deletions include/adl/oct/context/context_base_.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,26 +29,17 @@ class context_base_ {
public:
using context_traits = oct::context_traits<subclass_>;
template <
template <typename, typename, typename> class DbmClass,
template <typename, typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>>
using dbm_type = typename context_traits::template dbm_type<DbmClass, ConstantType, ValueLimits>;
typename ConstantLimits = constant_limits<ConstantType>,
typename Allocator = std::allocator<ConstantType>>
using dbm_type = DbmClass<subclass_, ConstantType, ConstantLimits, Allocator>;

template <template <typename, typename, typename> class DbmClass,
template <template <typename, typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>,
typename = std::enable_if_t<
std::is_constructible<DbmClass<subclass_, ConstantType, ValueLimits>,
dbm_tags::create_from_last_var_tag, subclass_&, octdiff_var, ConstantType, dbm_major>::value>>
using dense_dbm_return_type = dbm_type<DbmClass, ConstantType, ValueLimits>;

template <template <typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>,
typename = std::enable_if_t<
std::is_constructible<DbmClass<subclass_, ConstantType, ValueLimits>,
dbm_tags::create_from_last_var_tag, subclass_&, octdiff_var, ConstantType>::value>>
using default_dbm_return_type = dbm_type<DbmClass, ConstantType, ValueLimits>;
typename ConstantLimits = constant_limits<ConstantType>,
typename Allocator = std::allocator<ConstantType>>
using default_dbm_return_type = dbm_type<DbmClass, ConstantType, ConstantLimits, Allocator>;

using queue_type = cpu::seq_queue;

Expand All @@ -58,144 +49,127 @@ class context_base_ {
context_base_& operator=(context_base_ const&) = delete;
context_base_& operator=(context_base_ &&) noexcept = default;

//
// DENSE-LIKE DBM FACTORY FUNCTIONS
//

template <template <typename, typename, typename> class DbmClass,
template <template <typename, typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>>
dense_dbm_return_type<DbmClass, ConstantType, ValueLimits> make_dbm(
octdiff_var last_var,
dbm_major major
typename ConstantLimits = constant_limits<ConstantType>,
typename Allocator = std::allocator<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator> make_dbm(
octdiff_var last_var
) {
using return_type_ = dense_dbm_return_type<DbmClass, ConstantType, ValueLimits>;
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator>;
return return_type_(
dbm_tags::create_from_last_var_tag(),
this->as_subclass_(),
last_var,
return_type_::default_constant(),
major
dbm_tags::create_from_last_var_tag(),
this->as_subclass_(),
last_var,
return_type_::default_constant()
);
}

template <template <typename, typename, typename> class DbmClass,
template <template <typename, typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>>
dense_dbm_return_type<DbmClass, ConstantType, ValueLimits> make_dbm(
typename ConstantLimits = constant_limits<ConstantType>,
typename Allocator = std::allocator<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator> make_dbm(
octdiff_var last_var,
ConstantType default_value,
dbm_major major
) {
using return_type_ = dense_dbm_return_type<DbmClass, ConstantType, ValueLimits>;
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator>;
return return_type_(
dbm_tags::create_from_last_var_tag(),
this->as_subclass_(),
last_var,
default_value,
return_type_::default_constant(),
major
);
}

template <template <typename, typename, typename> class DbmClass,
template <template <typename, typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>>
dense_dbm_return_type<DbmClass, ConstantType, ValueLimits> make_dbm(
octdiff_system<ConstantType, ValueLimits> system,
dbm_major major
typename ConstantLimits = constant_limits<ConstantType>,
typename Allocator = std::allocator<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator> make_dbm(
octdiff_var last_var,
ConstantType default_value
) {
using return_type_ = dense_dbm_return_type<DbmClass, ConstantType, ValueLimits>;
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator>;
return return_type_(
dbm_tags::create_from_octdiff_system_tag(),
this->as_subclass_(),
system,
return_type_::default_constant(),
major
dbm_tags::create_from_last_var_tag(),
this->as_subclass_(),
last_var,
default_value
);
}

template <template <typename, typename, typename> class DbmClass,
template <template <typename, typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>>
dense_dbm_return_type<DbmClass, ConstantType, ValueLimits> make_dbm(
octdiff_system<ConstantType, ValueLimits> system,
typename ConstantLimits = constant_limits<ConstantType>,
typename Allocator = std::allocator<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator> make_dbm(
octdiff_var last_var,
ConstantType default_value,
dbm_major major
) {
using return_type_ = dense_dbm_return_type<DbmClass, ConstantType, ValueLimits>;
return return_type_(
dbm_tags::create_from_octdiff_system_tag(),
this->as_subclass_(),
system,
default_value,
major
);
}

//
// GENERIC (NON-DENSE-LIKE) DBM FACTORY FUNCTIONS
//


template <template <typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ValueLimits> make_dbm(
octdiff_var last_var
) {
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ValueLimits>;
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator>;
return return_type_(
dbm_tags::create_from_last_var_tag(),
this->as_subclass_(),
last_var,
return_type_::default_constant()
default_value,
major
);
}

template <template <typename, typename, typename> class DbmClass,
template <template <typename, typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ValueLimits> make_dbm(
octdiff_var last_var,
ConstantType default_value
typename ConstantLimits = constant_limits<ConstantType>,
typename Allocator = std::allocator<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator> make_dbm(
octdiff_system<ConstantType, ConstantLimits> system
) {
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ValueLimits>;
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator>;
return return_type_(
dbm_tags::create_from_last_var_tag(),
this->as_subclass_(),
last_var,
default_value
dbm_tags::create_from_octdiff_system_tag(),
this->as_subclass_(),
system,
return_type_::default_constant()
);
}

template <template <typename, typename, typename> class DbmClass,
template <template <typename, typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ValueLimits> make_dbm(
octdiff_system<ConstantType, ValueLimits> system
typename ConstantLimits = constant_limits<ConstantType>,
typename Allocator = std::allocator<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator> make_dbm(
octdiff_system<ConstantType, ConstantLimits> system,
dbm_major major
) {
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ValueLimits>;
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator>;
return return_type_(
dbm_tags::create_from_octdiff_system_tag(),
this->as_subclass_(),
system,
return_type_::default_constant()
return_type_::default_constant(),
major
);
}

template <template <typename, typename, typename> class DbmClass,
template <template <typename, typename, typename, typename> class DbmClass,
typename ConstantType,
typename ValueLimits = constant_limits<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ValueLimits> make_dbm(
octdiff_system<ConstantType, ValueLimits> system,
ConstantType default_value
typename ConstantLimits = constant_limits<ConstantType>,
typename Allocator = std::allocator<ConstantType>>
default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator> make_dbm(
octdiff_system<ConstantType, ConstantLimits> system,
ConstantType default_value,
dbm_major major
) {
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ValueLimits>;
using return_type_ = default_dbm_return_type<DbmClass, ConstantType, ConstantLimits, Allocator>;
return return_type_(
dbm_tags::create_from_octdiff_system_tag(),
this->as_subclass_(),
system,
default_value
default_value,
major
);
}

Expand Down
Loading

0 comments on commit cd0efd0

Please sign in to comment.