Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
BasicSerializeMessage.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/* BasicSerialize.h (C) 2000-2020 */
9/* */
10/* Message utilisant un BasicSerializer. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_MESSAGEPASSING_BASICSERIALIZEMESSAGE_H
13#define ARCCORE_MESSAGEPASSING_BASICSERIALIZEMESSAGE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/serialize/BasicSerializer.h"
18#include "arccore/message_passing/ISerializeMessage.h"
19#include "arccore/message_passing/MessageRank.h"
20#include "arccore/message_passing/MessageTag.h"
21#include "arccore/message_passing/MessageId.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arccore::MessagePassing::internal
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32/*!
33 * \internal
34 * \brief Message de sérialisation utilisant un BasicSerializer.
35 *
36 * Cette classe est interne à %Arccore et ne doit pas être utilisée
37 * directement. Si on souhaite créer une instance de ISerializeMessage,
38 * il faut passer créer une liste de messages via
39 * ISerializeMessageList::createMessage();
40 *
41 * Un message consiste en une série d'octets envoyés ou recu d'un rang
42 * (source()) à un autre (destination()). Si isSend() est vrai,
43 * c'est source() qui envoie des octets à destination(), sinon c'est source()
44 * qui recoit des octets de destination().
45 * S'il s'agit d'un message de réception, le serializer() est alloué
46 * et remplit automatiquement.
47 */
48class ARCCORE_MESSAGEPASSING_EXPORT BasicSerializeMessage
49: public ISerializeMessage
50{
51 public:
52
53 static const Int32 DEFAULT_SERIALIZE_TAG_VALUE = 101;
54
55 //! Tag par défaut pour les messages de sérialisation
56 static MessageTag defaultTag() { return MessageTag(DEFAULT_SERIALIZE_TAG_VALUE); }
57
58 protected:
59
60
61 public:
62
63 ~BasicSerializeMessage() override;
64 BasicSerializeMessage& operator=(const BasicSerializeMessage&) = delete;
66
67 protected:
68
75 BasicSerializer* serializer);
78 BasicSerializer* serializer);
79
80 BasicSerializeMessage(MessageRank orig_rank,MessageId message_id,
81 BasicSerializer* serializer);
82 public:
83
84 static Ref<ISerializeMessage>
85 create(MessageRank source,MessageRank destination,ePointToPointMessageType type);
86 static Ref<ISerializeMessage>
87 create(MessageRank source,MessageRank destination,MessageTag tag,
89 static Ref<ISerializeMessage>
90 create(MessageRank source,MessageId message_id);
91
92 public:
93
94 bool isSend() const override { return m_is_send; }
95 eMessageType messageType() const override { return m_old_message_type; }
96 Int32 destRank() const override { return m_dest_rank.value(); }
97 Int32 origRank() const override { return m_orig_rank.value(); }
98 MessageRank destination() const override { return m_dest_rank; }
99 MessageRank source() const override { return m_orig_rank; }
100 ISerializer* serializer() override { return m_buffer; }
101 bool finished() const override { return m_finished; }
102 void setFinished(bool v) override { m_finished = v; }
103 void setTag(Int32 tag) override { m_tag = MessageTag(tag); }
104 Int32 tag() const override { return m_tag.value(); }
105 void setInternalTag(MessageTag tag) override { m_tag = tag; }
106 MessageTag internalTag() const override { return m_tag; }
107 MessageId _internalMessageId() const override { return m_message_id; }
108 void setStrategy(eStrategy strategy) override;
109 eStrategy strategy() const override { return m_strategy; }
110 bool isProcessed() const override { return m_is_processed; }
111
112 public:
113
114 BasicSerializer& buffer() { return *m_buffer; }
115 BasicSerializer* trueSerializer() const { return m_buffer; }
116 Int32 messageNumber() const { return m_message_number; }
117 void setMessageNumber(Int32 v) { m_message_number = v; }
118 void setIsProcessed(bool v) { m_is_processed = v; }
119 ePointToPointMessageType _internalMessageType() const { return m_message_type; }
120
121 protected:
122
123 static ePointToPointMessageType _toP2PType(eMessageType mtype);
124 static eMessageType _toMessageType(ePointToPointMessageType mtype);
125
126 private:
127
128 MessageRank m_orig_rank; //!< Rang de l'expéditeur de la requête
129 MessageRank m_dest_rank; //!< Rang du destinataire du message
130 MessageTag m_tag = defaultTag();
131 eMessageType m_old_message_type; //!< Type du message (obsolète)
132 ePointToPointMessageType m_message_type; //!< Type du message
133 eStrategy m_strategy = eStrategy::Default;
134 bool m_is_send; //!< \c true si envoie, \c false si réception
135 BasicSerializer* m_buffer = nullptr; //!< Tampon contenant les infos
136 bool m_finished = false; //!< \c true si message terminé
137 MessageId m_message_id; //!< MessageId associé (peut être nul)
138 Int32 m_message_number = 0; //! Numéro du message lorsqu'on utilise plusieurs messages
139 bool m_is_processed = false;
140
141 private:
142
143 void _init();
144};
145
146/*---------------------------------------------------------------------------*/
147/*---------------------------------------------------------------------------*/
148
149} // End namespace Arccore::MessagePassing
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
153
154#endif
155
Int32 origRank() const override
Rang de l'envoyeur du message Voir aussi destRank() pour une interprétation suivant la valeur de isSe...
MessageRank destination() const override
Rang du destinataire (si isSend() est vrai) ou de l'envoyeur.
eStrategy strategy() const override
Stratégie utilisée pour les envois/réceptions.
static MessageTag defaultTag()
Tag par défaut pour les messages de sérialisation.
eMessageType messageType() const override
Type du message.
bool isSend() const override
true s'il faut envoyer, false s'il faut recevoir
Int32 destRank() const override
Rang du destinataire (si isSend() est vrai) ou envoyeur.
bool finished() const override
true si le message est terminé
bool isProcessed() const override
Indique si le message a déjà été traité.
MessageRank source() const override
Rang de l'envoyeur du message.
ePointToPointMessageType
Type de message point à point.
eMessageType
Flot sur lequel on envoie les messages.
std::int32_t Int32
Type entier signé sur 32 bits.