Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
BasicSerializeMessage.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* BasicSerializeMessage.cc (C) 2000-2025 */
9/* */
10/* Message using a BasicSerializeMessage. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arccore/message_passing/BasicSerializeMessage.h"
15#include "arccore/base/FatalErrorException.h"
16#include "arccore/base/Ref.h"
17
18/*---------------------------------------------------------------------------*/
19/*---------------------------------------------------------------------------*/
20
21namespace Arcane::MessagePassing::internal
22{
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27ePointToPointMessageType BasicSerializeMessage::
28_toP2PType(eMessageType mtype)
29{
30 switch (mtype) {
31 case MT_Send:
32 return MsgSend;
33 case MT_Recv:
34 return MsgReceive;
35 case MT_Broadcast:
36 return MsgSend;
37 }
38 ARCCORE_FATAL("Unsupported value '{0}'", mtype);
39}
40
41/*---------------------------------------------------------------------------*/
42/*---------------------------------------------------------------------------*/
43
44ISerializeMessage::eMessageType BasicSerializeMessage::
45_toMessageType(ePointToPointMessageType type)
46{
47 switch (type) {
48 case MsgSend:
49 return MT_Send;
50 case MsgReceive:
51 return MT_Recv;
52 }
53 ARCCORE_FATAL("Unsupported value '{0}'", type);
54}
55
56/*---------------------------------------------------------------------------*/
57/*---------------------------------------------------------------------------*/
58
59BasicSerializeMessage::
60BasicSerializeMessage(MessageRank orig_rank, MessageRank dest_rank,
61 MessageTag tag, ePointToPointMessageType type,
62 BasicSerializer* s)
63: m_orig_rank(orig_rank)
64, m_dest_rank(dest_rank)
65, m_tag(tag)
66, m_old_message_type(_toMessageType(type))
67, m_message_type(type)
68, m_is_send(false)
69, m_buffer(s)
70{
71 _init();
72}
73
74/*---------------------------------------------------------------------------*/
75/*---------------------------------------------------------------------------*/
76
77BasicSerializeMessage::
78BasicSerializeMessage(MessageRank orig_rank, MessageRank dest_rank,
79 ePointToPointMessageType type,
80 BasicSerializer* s)
81: BasicSerializeMessage(orig_rank, dest_rank, defaultTag(), type, s)
82{
83}
84
85/*---------------------------------------------------------------------------*/
86/*---------------------------------------------------------------------------*/
87
88BasicSerializeMessage::
89BasicSerializeMessage(MessageRank orig_rank, MessageId message_id,
90 BasicSerializer* s)
91: m_orig_rank(orig_rank)
92, m_dest_rank(message_id.sourceInfo().rank())
93, m_tag(message_id.sourceInfo().tag())
94, m_old_message_type(MT_Recv)
95, m_message_type(MsgReceive)
96, m_is_send(false)
97, m_buffer(s)
98, m_message_id(message_id)
99{
100 _init();
101}
102
103/*---------------------------------------------------------------------------*/
104/*---------------------------------------------------------------------------*/
105
106BasicSerializeMessage::
107BasicSerializeMessage(MessageRank orig_rank, MessageRank dest_rank,
108 MessageTag tag, ePointToPointMessageType type)
109: BasicSerializeMessage(orig_rank, dest_rank, tag, type, new BasicSerializer())
110{
111}
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
115
116BasicSerializeMessage::
117BasicSerializeMessage(MessageRank orig_rank, MessageRank dest_rank,
118 ePointToPointMessageType type)
119: BasicSerializeMessage(orig_rank, dest_rank, defaultTag(), type)
120{
121}
122
123/*---------------------------------------------------------------------------*/
124/*---------------------------------------------------------------------------*/
125
126BasicSerializeMessage::
127~BasicSerializeMessage()
128{
129 delete m_buffer;
130}
131
132/*---------------------------------------------------------------------------*/
133/*---------------------------------------------------------------------------*/
134
135void BasicSerializeMessage::
136_init()
137{
138 switch (m_old_message_type) {
139 case MT_Send:
140 case MT_Broadcast:
141 m_is_send = true;
142 break;
143 case MT_Recv:
144 m_is_send = false;
145 break;
146 }
147}
148
149/*---------------------------------------------------------------------------*/
150/*---------------------------------------------------------------------------*/
151
152void BasicSerializeMessage::
153setStrategy(eStrategy strategy)
154{
155 if (m_is_processed)
156 ARCCORE_FATAL("Can not change strategy if isProcessed() is true");
157 m_strategy = strategy;
158}
159
160/*---------------------------------------------------------------------------*/
161/*---------------------------------------------------------------------------*/
162
163Ref<ISerializeMessage> BasicSerializeMessage::
164create(MessageRank source, MessageRank destination, MessageTag tag,
166{
167 ISerializeMessage* m = new BasicSerializeMessage(source, destination, tag, type);
168 return makeRef(m);
169}
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
173
174Ref<ISerializeMessage> BasicSerializeMessage::
175create(MessageRank source, MessageRank destination, ePointToPointMessageType type)
176{
177 ISerializeMessage* m = new BasicSerializeMessage(source, destination, type);
178 return makeRef(m);
179}
180
181/*---------------------------------------------------------------------------*/
182/*---------------------------------------------------------------------------*/
183
184Ref<ISerializeMessage> BasicSerializeMessage::
185create(MessageRank source, MessageId message_id)
186{
187 ISerializeMessage* m = new BasicSerializeMessage(source, message_id, new BasicSerializer());
188 return makeRef(m);
189}
190
191/*---------------------------------------------------------------------------*/
192/*---------------------------------------------------------------------------*/
193
194} // namespace Arcane::MessagePassing::internal
195
196/*---------------------------------------------------------------------------*/
197/*---------------------------------------------------------------------------*/
#define ARCCORE_FATAL(...)
Macro throwing a FatalErrorException.
Management of references to a C++ class.
Basic implementation of 'ISerializer'.
Serializing message using a BasicSerializer.
eStrategy strategy() const override
Strategy used for sends/receives.
bool m_is_processed
Message number when using multiple messages.
Reference to an instance.
ePointToPointMessageType
Point-to-point message type.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Creates a reference on a pointer.