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.
Interface du gestionnaire des échanges de messages.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
Interface d'un message de sérialisation entre IMessagePassingMng.
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é.
Message de sérialisation utilisant un BasicSerializer.
static MessageTag defaultTag()
Tag par défaut pour les messages de sérialisation.
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.