| | |
| | | std::string MsgQIdToName(const MQId& id) { return "shmq" + to_string(id); } |
| | | MQId EmptyId() { return nil_uuid(); } |
| | | MQId NewId() { return random_generator()(); } |
| | | const int AdjustMQLength(const int len) { |
| | | const int kMaxLength = 10000; |
| | | const int kDefaultLen = 12; |
| | | if (len <= 0) { |
| | | return kDefaultLen; |
| | | } else if (len < kMaxLength) { |
| | | return len; |
| | | } else { |
| | | return kMaxLength; |
| | | } |
| | | } |
| | | |
| | | ShmMsgQueue::ShmMsgQueue(const MQId &id, ShmType &segment, const uint32_t len): |
| | | SharedQueue(segment, MsgQIdToName(id), id, len, segment.get_segment_manager()) |
| | | } |
| | | |
| | | // ShmMsgQueue memory usage: (320 + 16*length) bytes, length >= 2 |
| | | ShmMsgQueue::ShmMsgQueue(const MQId &id, ShmType &segment, const int len): |
| | | SharedQueue(segment, MsgQIdToName(id), id, AdjustMQLength(len), segment.get_segment_manager()) |
| | | { |
| | | printf("queue size: %ld cap: %ld\n", data()->size(), data()->capacity()); |
| | | } |
| | | |
| | | ShmMsgQueue::ShmMsgQueue(ShmType &segment, const uint32_t len):ShmMsgQueue(NewId(), segment, len) |
| | | ShmMsgQueue::ShmMsgQueue(ShmType &segment, const int len):ShmMsgQueue(NewId(), segment, len) |
| | | {} |
| | | |
| | | ShmMsgQueue::~ShmMsgQueue() |
| | |
| | | bool Write(const Msg &buf, const int timeout_ms) { return data()->Write(buf, timeout_ms); } |
| | | bool Read(Msg &buf, const int timeout_ms) { return data()->Read(buf, timeout_ms); } |
| | | public: |
| | | ShmMsgQueue(const MQId &id, ShmType &segment, const uint32_t len); |
| | | ShmMsgQueue(ShmType &segment, const uint32_t len); |
| | | ShmMsgQueue(const MQId &id, ShmType &segment, const int len); |
| | | ShmMsgQueue(ShmType &segment, const int len); |
| | | ~ShmMsgQueue(); |
| | | bool Send(const MQId &remote_id, const void *data, const size_t size, const int timeout_ms); |
| | | bool Recv(MQId &source_id, void *&data, size_t &size, const int timeout_ms); |