...
This commit is contained in:
@@ -33,6 +33,12 @@ template <typename T, typename BT, typename VT>
|
||||
concept adc_from_bytes_func_c = std::invocable<T, const BT&> && std::convertible_to<traits::adc_retval_t<T>, VT>;
|
||||
|
||||
|
||||
template <typename T, typename BT, typename VT>
|
||||
concept adc_netmsg_converter_c = requires(T t) {
|
||||
{ t.template serialize<BT, VT>(std::declval<const VT&>()) } -> std::same_as<BT>;
|
||||
{ t.template deserialize<VT, BT>(std::declval<const BT&>()) } -> std::same_as<VT>;
|
||||
};
|
||||
|
||||
struct AdcTheSameTypeTag {
|
||||
};
|
||||
|
||||
@@ -63,6 +69,12 @@ protected:
|
||||
AdcNetMessageInterface& operator=(const AdcNetMessageInterface&) = default;
|
||||
AdcNetMessageInterface& operator=(AdcNetMessageInterface&&) = default;
|
||||
|
||||
virtual void updateState() = 0;
|
||||
|
||||
public:
|
||||
typedef ByteStorageT byte_storage_t;
|
||||
typedef StorageSeqT storage_seq_t;
|
||||
|
||||
template <traits::adc_input_char_range T, traits::adc_input_char_range... Ts>
|
||||
void appendBytes(const T& v, const Ts&... vs)
|
||||
{
|
||||
@@ -81,6 +93,8 @@ protected:
|
||||
{
|
||||
_byteStorage = ByteStorageT();
|
||||
appendBytes(v, vs...);
|
||||
|
||||
updateState();
|
||||
}
|
||||
|
||||
|
||||
@@ -88,17 +102,19 @@ protected:
|
||||
void setBytes(IterT begin, IterT end)
|
||||
{
|
||||
_byteStorage = ByteStorageT(begin, end);
|
||||
|
||||
updateState();
|
||||
}
|
||||
|
||||
template <std::input_iterator IterT>
|
||||
void appendBytes(IterT begin, IterT end)
|
||||
{
|
||||
std::copy(begin, end, std::back_inserter(_byteStorage));
|
||||
|
||||
updateState();
|
||||
}
|
||||
|
||||
public:
|
||||
typedef ByteStorageT byte_storage_t;
|
||||
typedef StorageSeqT storage_seq_t;
|
||||
|
||||
|
||||
virtual size_t byteSize()
|
||||
{
|
||||
@@ -135,6 +151,9 @@ public:
|
||||
using typename base_t::byte_storage_t;
|
||||
using typename base_t::storage_seq_t;
|
||||
|
||||
using base_t::appendBytes;
|
||||
using base_t::setBytes;
|
||||
|
||||
using message_view_t =
|
||||
std::conditional_t<std::is_same_v<MessageViewT, traits::AdcTheSameTypeTag>, ByteStorageT, MessageViewT>;
|
||||
|
||||
@@ -223,6 +242,12 @@ public:
|
||||
|
||||
protected:
|
||||
MessageViewT _messageView;
|
||||
|
||||
void updateState() override
|
||||
{
|
||||
if constexpr (!std::is_same_v<MessageViewT, traits::AdcTheSameTypeTag>) {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user