0

私はこのようなものを作成したいと思います:

メッセージのストリームに対して「回線交換」のようなことを行うモジュールがあります。つまり、単一の入力ポートと複数の出力ポートがあります。メッセージが入力ポートに到着すると、何らかのロジックに基づいて出力ポートが選択されます (質問のコンテキストではロジックは重要ではありません)。outport で進行中のメッセージ転送があるかどうかがチェックされます (最初のメッセージについては、何もありません)。転送がない場合、メッセージはその outport に送信されます。それ以外の場合は、その特定の outport のキューに保持されます。この通信のデータ構造を決める必要があります。ご意見をお聞かせください

私の考えは、出力ポートと対応するキューのマップを持つことです。

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 に答える