0

我想创建这样的东西:

我有一个模块可以为消息流执行类似“电路切换”的操作。也就是说,它有一个入口和多个出口。一旦消息到达输入端口,就会根据某种逻辑选择输出端口(逻辑在问题的上下文中并不重要)。检查输出端口上是否有任何正在进行的消息传输(对于第一条消息,不会有任何消息)。如果没有传输,则将消息发送到该输出端口,否则,它将保留在该特定输出端口的队列中。我需要决定这种通信的数据结构。请指教

我的想法是有一个出口和相应队列的地图。

queue<message> m_incoming_queue;
typedef map<outport*,m_incoming_queue> transaction_map

如果这是一个好的解决方案,我想知道如何在运行时创建队列?如,我事先不知道会有多少个出口,我根据需要创建出口。

4

1 回答 1

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)
于 2012-04-27T23:53:00.987 回答