我想创建这样的东西:
我有一个模块可以为消息流执行类似“电路交换”的操作。也就是说,它有一个入口和多个出口。一旦消息到达输入端,就会根据某些逻辑选择一个输出端(逻辑在问题的上下文中并不重要)。检查在出口上是否有正在进行的消息传输(对于第一个消息,将不会有任何消息)。如果没有传输,则将消息发送到该输出端口,否则,它将保留在该特定输出端口的队列中。我需要决定这种沟通的数据结构。请建议
我的想法是拥有一个出口和相应队列的地图。
queue<message> m_incoming_queue;
typedef map<outport*,m_incoming_queue> transaction_map
如果这是一个很好的解决方案,我想知道如何在运行时创建队列?因为,我事先并不知道会有多少出口,我会根据要求创建出口。
答案 0 :(得分:0)
可能是这样的:
// At beginning
typedef queue<message> MessageQueue
typedef map<outport*, MessageQueue> transaction_map
transaction_map tm() // Create the transaction map
// On receipt of each message
// (Some logic that determines outport* op and message m)
if(tm.count(*op) == 0)
{
// There are no queues yet, create one and insert it
tm.insert(transaction_map::value_type(*op, MessageQueue()))
}
// There is already a queue created, so add to it
tm[*op].push(m)