1 #include "hmbdc/Copyright.hpp" 3 #include "hmbdc/app/Message.hpp" 8 namespace hmbdc {
namespace tips {
20 enum DisableSendMask {
22 INTER_THREAD = 1 << 0,
23 INTER_PROCESS = 1 << 1,
24 OVER_NETWORK = 1 << 2,
27 HMBDC_CLASS_HAS_DECLARE(tipsDisableSendMask);
28 HMBDC_CLASS_HAS_DECLARE(hmbdc0cpyShmRefCount);
41 template <MessageC Message,
typename T>
43 using SP = std::shared_ptr<T>;
44 static_assert(std::is_trivially_copyable<T>::value);
63 : attachmentSp(attachmentIn)
74 , Message::tagBase::type {
76 using tagBase =
typename Message::tagBase;
77 static constexpr
size_t meatOffsetInMessage =
sizeof(SP) +
sizeof(
size_t)
79 char meat[
sizeof(Message) - meatOffsetInMessage];
83 is_att_0cpyshm = has_hmbdc0cpyShmRefCount<T>::value,
85 uint64_t hmbdcShmRefCount = 0;
87 : tagBase::type(message) {
89 auto psp = (SP*)h->app::hasMemoryAttachment::clientData;
91 h->app::hasMemoryAttachment::afterConsumedCleanupFunc =
nullptr;
93 attachment = message.hasSharedPtrAttachment::attachmentSp.get();
94 len = message.hasSharedPtrAttachment::len;
95 new (this->
clientData) SP(message.hasSharedPtrAttachment::attachmentSp);
96 memcpy(meat, (
char*)&message + meatOffsetInMessage,
sizeof(meat));
99 Message toHmbdcUnserialized() {
101 assert(att.attachment);
102 char resSpace[
sizeof(Message)] = {0};
103 auto& res = *(Message*)resSpace;
104 if constexpr (Message::hasRange) {
105 res.resetTypeTagOffsetInRange(this->typeTagOffsetInRange);
107 memcpy((
char*)&res + meatOffsetInMessage, meat,
sizeof(meat));
109 res.Message::hasSharedPtrAttachment::attachmentSp
110 = SP((
typename SP::element_type*)(att.attachment)
112 hasMemoryAttachment.release();
115 res.Message::hasSharedPtrAttachment::len = app::hasMemoryAttachment::len;
116 Message toReturn = res;
117 res.Message::~Message();
118 att.attachment =
nullptr;
138 HMBDC_CLASS_HAS_DECLARE(toHmbdcSerialized);
139 HMBDC_CLASS_HAS_DECLARE(toHmbdcUnserialized);
internal use
Definition: Messages.hpp:72
hasMemoryAttachment()
default ctor
Definition: Message.hpp:130
auto toHmbdcSerialized() const
internal use
Definition: Messages.hpp:126
hasSharedPtrAttachment()
the length of the POD data
Definition: Messages.hpp:52
size_t len
the attachment
Definition: Messages.hpp:46
hasSharedPtrAttachment(SP attachmentIn, size_t len=sizeof(T))
Construct a new has Shared Ptr Attachment object.
Definition: Messages.hpp:62
if a specific hmbdc network transport (for example tcpcast, rmcast, and rnetmap) supports message wit...
Definition: Message.hpp:125
uint64_t clientData[2]
byte size of the above
Definition: Message.hpp:183
internal use
Definition: Messages.hpp:42