2012-04-27 5 views
0

다음과 같이 작성하고 싶습니다.회로 전환을위한 데이터 구조?

메시지 스트림에 '회선 교환'과 같은 기능을하는 모듈이 있습니다. 즉, 단일 인입구 및 다중 출력 포트가 있습니다. 일단 메시지가 inport에 도착하면 outport는 어떤 논리에 근거하여 선택됩니다 (논리는 질문의 맥락에서 중요하지 않습니다). 아웃 포트에 진행중인 메시지 전송이 있는지 여부가 확인됩니다 (첫 번째 메시지의 경우 아무 것도 표시되지 않음). 전송이 없으면 해당 아웃 포트에 메시지가 전송되고, 그렇지 않으면 해당 아웃 포트에 대한 대기열에 보관됩니다. 이 통신을위한 데이터 구조를 결정해야합니다. 제발 조언을주세요

제 아이디어는 아웃 포트와 해당 큐의 맵을 갖는 것입니다.

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)