14#include "arccore/message_passing/PointToPointSerializerMng.h"
16#include "arccore/message_passing/BasicSerializeMessage.h"
18#include "arccore/message_passing/ISerializeMessageList.h"
19#include "arccore/base/NotImplementedException.h"
20#include "arccore/base/FatalErrorException.h"
36 : m_message_passing_mng(mpm), m_rank(mpm->
commRank())
43 message->setStrategy(m_strategy);
44 m_pending_messages.add(message);
46 void processPendingMessages()
48 for(
auto& x : m_pending_messages ){
49 m_message_list->addMessage(x.get());
50 m_waiting_messages.add(x);
52 m_pending_messages.clear();
56 processPendingMessages();
57 Integer n = m_message_list->waitMessages(wt);
59 for(
auto& x : m_waiting_messages ){
64 new_waiting_messages.
add(x);
66 m_waiting_messages.
clear();
67 m_waiting_messages.copy(new_waiting_messages);
70 bool hasMessages()
const {
return !m_pending_messages.empty() || !m_waiting_messages.empty(); }
85PointToPointSerializerMng::
94PointToPointSerializerMng::
95~PointToPointSerializerMng()
106 return m_p->m_message_passing_mng;
115 m_p->processPendingMessages();
124 return m_p->waitMessages(wt,functor);
133 return m_p->hasMessages();
143 ARCCORE_FATAL(
"Can not call setDefaultTag() if hasMessages()==true");
144 m_p->m_tag = default_tag;
154 ARCCORE_FATAL(
"Can not call setStrategy() if hasMessages()==true");
155 m_p->m_strategy = strategy;
164 auto x = BasicSerializeMessage::create(m_p->m_rank,receiver_rank,m_p->m_tag,MsgSend);
175 auto x = BasicSerializeMessage::create(m_p->m_rank,sender_rank,m_p->m_tag,MsgReceive);
186 auto x = BasicSerializeMessage::create(m_p->m_rank,message_id);
Liste des fonctions d'échange de message.
void clear()
Supprime les éléments du tableau.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
static MessageTag defaultTag()
Tag par défaut pour les messages de sérialisation.
Interface du gestionnaire des échanges de messages.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
eStrategy
Stratégie d'envoi/réception.
@ Default
Stratégie par défaut.
IMessagePassingMng * messagePassingMng() const
Gestionnaire de message associé
bool hasMessages() const
Indique s'il reste des messages qui ne sont pas encore terminés.
void setStrategy(ISerializeMessage::eStrategy strategy)
Stratégie utilisée pour les messages.
Integer waitMessages(eWaitType wt, std::function< void(ISerializeMessage *)> functor)
Attend que les messages aient terminé leur exécution.
Ref< ISerializeMessage > addSendMessage(MessageRank receiver_rank)
Créé message de sérialisation en envoi.
void setDefaultTag(MessageTag default_tag)
Tag par défaut utilisé pour les messages.
Ref< ISerializeMessage > addReceiveMessage(MessageRank sender_rank)
Créé un message de sérialisation en réception.
void processPendingMessages()
Envoie les messages de la liste qui ne l'ont pas encore été.
Référence à une instance.
Vecteur 1D de données avec sémantique par valeur (style STL).
Déclarations des types et méthodes utilisés par les mécanismes d'échange de messages.
Ref< ISerializeMessageList > mpCreateSerializeMessageListRef(IMessagePassingMng *pm)
Créé une liste de messages de sérialisation.
Int32 Integer
Type représentant un entier.