#pragma once #include namespace sp { namespace details { // ID retrieval chunk template class MessageInterfaceIdTypeBase : public TBase { public: using MsgIdType = TId; MsgIdType GetId() const { return GetIdImpl(); } protected: virtual MsgIdType GetIdImpl() const = 0; }; // Big endian serialisation chunk template class MessageInterfaceBigEndian : public TBase { protected: template void ReadData(T& value, DataBuffer& buffer) { buffer >> value; FromNetwork(value); } template void WriteData(T value, DataBuffer& buffer) { ToNetwork(value); buffer << value; } }; // Little endian serialisation chunk template class MessageInterfaceLittleEndian : public TBase { protected: template void ReadData(T& value, DataBuffer& buffer) { buffer >> value; TrySwapBytes(value); FromNetwork(value); } template void WriteData(const T& value, DataBuffer& buffer) { ToNetwork(value); TrySwapBytes(value); buffer << value; } }; // Read functionality chunk template class MessageInterfaceReadBase : public TBase { public: void Read(DataBuffer& buffer) { return ReadImpl(buffer); } protected: virtual void ReadImpl(DataBuffer& buffer) = 0; }; // Write functionality chunk template class MessageInterfaceWriteBase : public TBase { public: void Write(DataBuffer& buffer) { WriteImpl(buffer); } protected: virtual void WriteImpl(DataBuffer& buffer) = 0; }; // Handler functionality chunk template class MessageInterfaceHandlerBase : public TBase { public: using HandlerType = typename THandler::HandlerT; void Dispatch(HandlerType& handler) { DispatchImpl(handler); } protected: virtual void DispatchImpl(HandlerType& handler) = 0; }; // Validity functionality chunk template class MessageInterfaceValidityBase : public TBase { public: bool Valid() const { return ValidImpl(); } protected: virtual bool ValidImpl() const = 0; }; // Writing id functionality chunk template class MessageInterfaceWriteIdBase : public TBase { public: void Write(DataBuffer& buffer) { this->WriteData(this->GetId(), buffer); this->WriteImpl(buffer); } }; } // namespace details } // namespace sp