Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
MessageId.h
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/* MessageId.h (C) 2000-2025 */
9/* */
10/* Identifier of a point-to-point message. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_MESSAGEPASSING_MESSAGEID_H
13#define ARCCORE_MESSAGEPASSING_MESSAGEID_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/message_passing/MessageTag.h"
18#include "arccore/message_passing/MessageRank.h"
19#include "arccore/message_passing/MessageSourceInfo.h"
20
21#include <cstddef>
22#include <iosfwd>
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
45class ARCCORE_MESSAGEPASSING_EXPORT MessageId
46{
48 {
49 int i;
50 long l;
51 std::size_t st;
52 void* v;
53 const void* cv;
54 };
55
56 enum Type
57 {
58 T_Int,
59 T_Long,
60 T_SizeT,
61 T_Ptr,
62 T_Null
63 };
64
65 public:
66
67 using SourceInfo = MessageSourceInfo;
68
69 MessageId()
70 : m_message(null_message)
71 {}
72
73 MessageId(MessageSourceInfo source_info, void* amessage)
74 : m_source_info(source_info)
75 {
76 m_type = T_Ptr;
77 m_message.v = amessage;
78 }
79
80 MessageId(MessageSourceInfo source_info, const void* amessage)
81 : m_source_info(source_info)
82 {
83 m_type = T_Ptr;
84 m_message.cv = amessage;
85 }
86
87 MessageId(MessageSourceInfo source_info, int amessage)
88 : m_source_info(source_info)
89 {
90 m_type = T_Int;
91 m_message.i = amessage;
92 }
93
94 MessageId(MessageSourceInfo source_info, long amessage)
95 : m_source_info(source_info)
96 {
97 m_type = T_Long;
98 m_message.l = amessage;
99 }
100
101 MessageId(MessageSourceInfo source_info, std::size_t amessage)
102 : m_source_info(source_info)
103 {
104 m_type = T_SizeT;
105 m_message.st = amessage;
106 }
107
108 MessageId(const MessageId& rhs)
109 : m_source_info(rhs.m_source_info)
110 , m_type(rhs.m_type)
111 {
112 m_message.cv = rhs.m_message.cv;
113 }
114
115 const MessageId& operator=(const MessageId& rhs)
116 {
117 m_source_info = rhs.m_source_info;
118 m_type = rhs.m_type;
119 m_message.cv = rhs.m_message.cv;
120 return (*this);
121 }
122
123 public:
124
125 template <typename T>
126 explicit operator const T*() const { return (const T*)m_message.cv; }
127 template <typename T>
128 explicit operator T*() const { return (T*)m_message.v; }
129 explicit operator int() const { return m_message.i; }
130 explicit operator long() const { return m_message.l; }
131 explicit operator size_t() const { return m_message.st; }
132
133 public:
134
135 //int returnValue() const { return m_source_info; }
136 bool isValid() const
137 {
138 if (m_type == T_Null)
139 return false;
140 if (m_type == T_Int)
141 return m_message.i != null_message.i;
142 if (m_type == T_Long)
143 return m_message.l != null_message.l;
144 if (m_type == T_SizeT)
145 return m_message.st != null_message.st;
146 return m_message.cv != null_message.cv;
147 }
148 void* messageAsVoidPtr() const { return m_message.v; }
149
150 static void setNullMessage(MessageId r) { null_message = r.m_message; }
151
152 void reset()
153 {
154 m_message = null_message;
155 }
156
157 void print(std::ostream& o) const;
158
160 MessageSourceInfo sourceInfo() const { return m_source_info; }
161
163 void setSourceInfo(MessageSourceInfo si) { m_source_info = si; }
164
165 private:
166
167 MessageSourceInfo m_source_info;
168 int m_type = T_Null;
169 _Message m_message;
170 static _Message null_message;
171};
172
173/*---------------------------------------------------------------------------*/
174/*---------------------------------------------------------------------------*/
175
176inline std::ostream&
177operator<<(std::ostream& o, const MessageId& pmessage)
178{
179 pmessage.print(o);
180 return o;
181}
182
183/*---------------------------------------------------------------------------*/
184/*---------------------------------------------------------------------------*/
185
186} // namespace Arcane::MessagePassing
187
188/*---------------------------------------------------------------------------*/
189/*---------------------------------------------------------------------------*/
190
191#endif
Int32 print(ITraceMng *tm, bool is_no_continue=true)
Prints a message for an unknown exception.
void setSourceInfo(MessageSourceInfo si)
Sets the message source information;.
Definition MessageId.h:163
MessageSourceInfo sourceInfo() const
Information about the message source;.
Definition MessageId.h:160
Information about the source of a message.
Declarations of types and methods used by message exchange mechanisms.