This commit is contained in:
2024-09-12 18:09:36 +03:00
parent 8ae489f1c5
commit f215ea7a6d
3 changed files with 202 additions and 14 deletions

View File

@@ -6,7 +6,6 @@ ABSTRACT DEVICE COMPONENTS LIBRARY
*/
#include <chrono>
#include <concepts>
#include "../common/adc_traits.h"
@@ -18,28 +17,21 @@ namespace adc::interfaces
{
template <typename T>
// from https://stackoverflow.com/questions/74383254/concept-that-models-only-the-stdchrono-duration-types
concept adc_time_duration_c = requires {
[]<class Rep, class Period>(std::type_identity<std::chrono::duration<Rep, Period>>) {}(std::type_identity<T>());
};
template <adc_time_duration_c... Ts>
template <traits::adc_time_duration_c... Ts>
struct adc_duration_common_type;
template <adc_time_duration_c T1, adc_time_duration_c T2>
template <traits::adc_time_duration_c T1, traits::adc_time_duration_c T2>
struct adc_duration_common_type<T1, T2> : std::common_type<T1, T2> {
};
template <adc_time_duration_c T1, adc_time_duration_c T2, adc_time_duration_c... Ts>
template <traits::adc_time_duration_c T1, traits::adc_time_duration_c T2, traits::adc_time_duration_c... Ts>
struct adc_duration_common_type<T1, T2, Ts...> : adc_duration_common_type<std::common_type_t<T1, T2>, Ts...> {
};
template <adc_time_duration_c... Ts>
template <traits::adc_time_duration_c... Ts>
using adc_duration_common_type_t = typename adc_duration_common_type<Ts...>::type;
@@ -92,7 +84,7 @@ template <typename SRVT,
typename RMSGT = std::string, // receiving message type
typename DURT = adc_common_duration_t // time duration type
>
concept adc_netservice_c = traits::adc_input_char_range<SMSGT> && traits::adc_output_char_range<RMSGT> && adc_time_duration_c<DURT> &&
concept adc_netservice_c = traits::adc_input_char_range<SMSGT> && traits::adc_output_char_range<RMSGT> && traits::adc_time_duration_c<DURT> &&
requires(SRVT srv, const SRVT srv_const) {
typename SRVT::netservice_ident_t;