2012-04-27 8 views
0

私はこのようなものを作りたいと思っています:回線交換のためのデータ構造?

私は、メッセージの流れのために「回線交換」のような機能を果たすモジュールを持っています。つまり、単一のインポートと複数のアウトポートがあります。メッセージがインポートに到着すると、いくつかのロジックに基づいてアウトポートが選択されます(ロジックは質問の文脈では重要ではありません)。アウトポートに進行中のメッセージ転送があるかどうかがチェックされます(最初のメッセージの場合は、何もありません)。転送がない場合、そのアウトポートにメッセージが送信されます。それ以外の場合は、特定のアウトポートのキューに保持されます。私はこのコミュニケーションのためのデータ構造を決定する必要があります。助けてください

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

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

これは良い解決策であれば、実行時にキューを作成する方法を知りたいのですが?私は、アウトポートがいくつあるかを事前に知っていないので、要件に基づいてアウトポートを作成します。

+0

は、多分あなたは非常に素晴らしい軽量なメッセージフレームワークhttp://www.zeromq.org/を見てしたいと思います。 – snies

答えて

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) 
関連する問題