Use template specialisation

This commit is contained in:
Eddie Hung 2019-09-13 11:13:57 -07:00
parent 95e80809a5
commit 5473e597bf
1 changed files with 9 additions and 2 deletions

View File

@ -135,10 +135,10 @@ struct SigPool
}
};
template <typename T, class Compare = std::less<T>>
template <typename T, class Compare=void>
struct SigSet
{
static_assert(!std::is_pointer<T>::value || !std::is_same<Compare, std::less<T>>::value, "Explicit `Compare' class required for SigSet with pointer-type values!");
static_assert(!std::is_same<Compare,void>::value, "Default value for `Compare' class not found for SigSet<T>. Please specify.");
struct bitDef_t : public std::pair<RTLIL::Wire*, int> {
bitDef_t() : std::pair<RTLIL::Wire*, int>(NULL, 0) { }
@ -222,6 +222,13 @@ struct SigSet
}
};
template<typename T>
class SigSet<T, typename std::enable_if<!std::is_pointer<T>::value>::type> : public SigSet<T, std::less<T>> {};
template<typename T>
using sort_by_name_id_guard = typename std::enable_if<std::is_same<T,RTLIL::Cell*>::value>::type;
template<typename T>
class SigSet<T, sort_by_name_id_guard<T>> : public SigSet<T, RTLIL::sort_by_name_id<typename std::remove_pointer<T>::type>> {};
struct SigMap
{
mfp<SigBit> database;