Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
PointToPointMessageInfo.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* PointToPointMessageInfo.h (C) 2000-2022 */
9/* */
10/* Informations pour les messages point à point. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_MESSAGEPASSING_POINTTOPOINTINFO_H
13#define ARCCORE_MESSAGEPASSING_POINTTOPOINTINFO_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/message_passing/MessageId.h"
18#include "arccore/message_passing/MessageTag.h"
19#include "arccore/message_passing/MessageRank.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
25{
51class ARCCORE_MESSAGEPASSING_EXPORT PointToPointMessageInfo
52{
53 public:
54
55 enum class Type
56 {
57 T_RankTag,
58 T_MessageId,
59 T_Null
60 };
61
62 public:
63
66
69 : m_destination_rank(dest_rank)
70 , m_type(Type::T_RankTag)
71 {}
72
75 : m_destination_rank(dest_rank)
76 , m_is_blocking(blocking_type == Blocking)
77 , m_type(Type::T_RankTag)
78 {}
79
82 : m_destination_rank(dest_rank)
83 , m_tag(tag)
84 , m_type(Type::T_RankTag)
85 {}
86
89 : m_destination_rank(dest_rank)
90 , m_tag(tag)
91 , m_is_blocking(blocking_type == Blocking)
92 , m_type(Type::T_RankTag)
93 {}
94
97 : m_message_id(message_id)
98 , m_type(Type::T_MessageId)
99 {
100 _setInfosFromMessageId();
101 }
102
105 : m_message_id(message_id)
106 , m_is_blocking(blocking_type == Blocking)
107 , m_type(Type::T_MessageId)
108 {
109 _setInfosFromMessageId();
110 }
111
112 public:
113
118 ARCCORE_DEPRECATED_REASON("Y2022: This constructor is internal to Arcane and deprecated")
119 PointToPointMessageInfo(MessageRank emiter_rank, MessageRank dest_rank, eBlockingType blocking_type)
120 : m_emiter_rank(emiter_rank)
121 , m_destination_rank(dest_rank)
122 , m_is_blocking(blocking_type == Blocking)
123 , m_type(Type::T_RankTag)
124 {}
125
127 ARCCORE_DEPRECATED_REASON("Y2022: This constructor is internal to Arcane and deprecated")
129 : m_emiter_rank(emiter_rank)
130 , m_destination_rank(dest_rank)
131 , m_tag(tag)
132 , m_type(Type::T_RankTag)
133 {}
134
136 ARCCORE_DEPRECATED_REASON("Y2022: This constructor is internal to Arcane and deprecated")
138 : m_emiter_rank(emiter_rank)
139 , m_destination_rank(dest_rank)
140 , m_type(Type::T_RankTag)
141 {}
142
143 public:
144
150 PointToPointMessageInfo(MessageRank emiter_rank, MessageRank dest_rank, MessageTag tag, eBlockingType blocking_type)
151 : m_emiter_rank(emiter_rank)
152 , m_destination_rank(dest_rank)
153 , m_tag(tag)
154 , m_is_blocking(blocking_type == Blocking)
155 , m_type(Type::T_RankTag)
156 {}
157
158 public:
159
160 PointToPointMessageInfo& setBlocking(bool is_blocking)
161 {
162 m_is_blocking = is_blocking;
163 return (*this);
164 }
166 bool isBlocking() const { return m_is_blocking; }
168 bool isMessageId() const { return m_type == Type::T_MessageId; }
170 bool isRankTag() const { return m_type == Type::T_RankTag; }
172 MessageId messageId() const { return m_message_id; }
174 void setMessageId(const MessageId& message_id)
175 {
176 m_type = Type::T_MessageId;
177 m_message_id = message_id;
178 _setInfosFromMessageId();
179 }
182 {
183 m_type = Type::T_RankTag;
184 // Attention à bien appeler les méthodes pour mettre à jour
185 // les valeurs associées de `m_message_id`
186 setDestinationRank(rank);
187 setTag(tag);
188 }
190 MessageRank destinationRank() const { return m_destination_rank; }
193 {
194 m_destination_rank = rank;
195 MessageId::SourceInfo si = m_message_id.sourceInfo();
196 si.setRank(rank);
197 m_message_id.setSourceInfo(si);
198 }
199
201 MessageRank emiterRank() const { return m_emiter_rank; }
203 void setEmiterRank(MessageRank rank) { m_emiter_rank = rank; }
204
206 MessageTag tag() const { return m_tag; }
209 {
210 m_tag = tag;
211 MessageId::SourceInfo si = m_message_id.sourceInfo();
212 si.setTag(tag);
213 m_message_id.setSourceInfo(si);
214 }
216 void print(std::ostream& o) const;
217
218 friend std::ostream& operator<<(std::ostream& o, const PointToPointMessageInfo& pmessage)
219 {
220 pmessage.print(o);
221 return o;
222 }
223
224 public:
225
226 // Indique si le message est valide (i.e: il a été initialisé avec un message valide)
227 bool isValid() const
228 {
229 if (m_type == Type::T_Null)
230 return false;
231 if (m_type == Type::T_MessageId)
232 return m_message_id.isValid();
233 if (m_type == Type::T_RankTag)
234 return true;
235 return false;
236 }
237
238 public:
239
241 ARCCORE_DEPRECATED_REASON("Y2022: Use emiterRank() instead")
242 MessageRank sourceRank() const { return m_emiter_rank; }
243
245 ARCCORE_DEPRECATED_REASON("Y2022: Use setEmiterRank() instead")
246 void setSourceRank(MessageRank rank) { m_emiter_rank = rank; }
247
248 private:
249
250 MessageRank m_emiter_rank;
251 MessageRank m_destination_rank;
252 MessageTag m_tag = MessageTag::defaultTag();
253 MessageId m_message_id;
254 bool m_is_blocking = true;
255 Type m_type = Type::T_Null;
256
257 void _setInfosFromMessageId()
258 {
259 m_destination_rank = m_message_id.sourceInfo().rank();
260 m_tag = m_message_id.sourceInfo().tag();
261 }
262};
263
264/*---------------------------------------------------------------------------*/
265/*---------------------------------------------------------------------------*/
266
267} // End namespace Arccore::MessagePassing
268
269/*---------------------------------------------------------------------------*/
270/*---------------------------------------------------------------------------*/
271
272#endif
273
MessageSourceInfo sourceInfo() const
Informations sur la source du message;.
Definition MessageId.h:153
Informations sur la source d'un message.
MessageTag tag() const
Tag du message.
MessageRank rank() const
Rang de la source.
void setTag(MessageTag tag)
Positionne le tag du message.
void setRank(MessageRank rank)
Positionne le rang de la source.
Informations pour envoyer/recevoir un message point à point.
MessageId messageId() const
Identifiant du message.
void setDestinationRank(MessageRank rank)
Positionne le rang de la destination du message.
PointToPointMessageInfo(MessageRank dest_rank, MessageTag tag)
Message bloquant avec tag tag et ayant pour destination rank.
PointToPointMessageInfo(MessageId message_id)
Message bloquant associé à message_id.
PointToPointMessageInfo(MessageRank dest_rank)
Message bloquant avec tag par défaut et ayant pour destination rank.
MessageRank emiterRank() const
Rang de l'émetteur du message.
PointToPointMessageInfo(MessageRank emiter_rank, MessageRank dest_rank, MessageTag tag, eBlockingType blocking_type)
Message avec tag tag, ayant pour source emiter_rank, pour destination dest_rank et mode bloquant bloc...
void setEmiterRank(MessageRank rank)
Positionne le rang de l'émetteur du message.
MessageRank destinationRank() const
Rang de la destination du message.
void setRankTag(MessageRank rank, MessageTag tag)
Positionne le rang destination et le tag du message et change le type du message.
void setTag(MessageTag tag)
Positionne le tag du message.
PointToPointMessageInfo(MessageId message_id, eBlockingType blocking_type)
Message associé à message_id avec le mode bloquant blocking_type.
PointToPointMessageInfo(MessageRank dest_rank, eBlockingType blocking_type)
Message avec tag par défaut, ayant destination dest_rank et mode bloquant blocking_type.
bool isBlocking() const
Indique si le message est bloquant.
bool isMessageId() const
Vrai si l'instance a été créée avec un MessageId. Dans ce cas messageId() est valide.
PointToPointMessageInfo(MessageRank dest_rank, MessageTag tag, eBlockingType blocking_type)
Message avec tag tag, ayant pour destination dest_rank et mode bloquant blocking_type.
void setMessageId(const MessageId &message_id)
Positionne l'identifiant du message et change le type du message.
void print(std::ostream &o) const
Affiche le message.
bool isRankTag() const
Vrai si l'instance a été créée avec un couple (rank,tag). Dans ce cas rank() et tag() sont valides.
Espace de nommage contenant les types et déclarations qui gèrent le mécanisme de parallélisme par éch...
eBlockingType
Type indiquant si un message est bloquant ou non.
Type
Type of JSON value.
Definition rapidjson.h:665