Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
Dispatchers.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/* Dispatchers.h (C) 2000-2025 */
9/* */
10/* Dispatcher container. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_MESSAGEPASSING_DISPATCHERS_H
13#define ARCCORE_MESSAGEPASSING_DISPATCHERS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/message_passing/IDispatchers.h"
18
19#include "arccore/base/BuiltInDataTypeContainer.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
33class ARCCORE_MESSAGEPASSING_EXPORT Dispatchers
34: public IDispatchers
35{
36 private:
37
38 template <typename DataType>
40 {
41 public:
42
43 using InstanceType = ITypeDispatcher<DataType>*;
44 };
45
46 public:
47
48 Dispatchers();
49 ~Dispatchers() override;
50
51 public:
52
53 ITypeDispatcher<char>* dispatcher(char* v) override { return m_container.instance(v); }
54 ITypeDispatcher<signed char>* dispatcher(signed char* v) override { return m_container.instance(v); }
55 ITypeDispatcher<unsigned char>* dispatcher(unsigned char* v) override { return m_container.instance(v); }
56 ITypeDispatcher<short>* dispatcher(short* v) override { return m_container.instance(v); }
57 ITypeDispatcher<unsigned short>* dispatcher(unsigned short* v) override { return m_container.instance(v); }
58 ITypeDispatcher<int>* dispatcher(int* v) override { return m_container.instance(v); }
59 ITypeDispatcher<unsigned int>* dispatcher(unsigned int* v) override { return m_container.instance(v); }
60 ITypeDispatcher<long>* dispatcher(long* v) override { return m_container.instance(v); }
61 ITypeDispatcher<unsigned long>* dispatcher(unsigned long* v) override { return m_container.instance(v); }
62 ITypeDispatcher<long long>* dispatcher(long long* v) override { return m_container.instance(v); }
63 ITypeDispatcher<unsigned long long>* dispatcher(unsigned long long* v) override { return m_container.instance(v); }
64 ITypeDispatcher<float>* dispatcher(float* v) override { return m_container.instance(v); }
65 ITypeDispatcher<double>* dispatcher(double* v) override { return m_container.instance(v); }
66 ITypeDispatcher<long double>* dispatcher(long double* v) override { return m_container.instance(v); }
67 ITypeDispatcher<BFloat16>* dispatcher(BFloat16* v) override { return m_container.instance(v); }
68 ITypeDispatcher<Float16>* dispatcher(Float16* v) override { return m_container.instance(v); }
69
70 IControlDispatcher* controlDispatcher() override { return m_control; }
71 ISerializeDispatcher* serializeDispatcher() override { return m_serialize; }
72
73 public:
74
75 template <typename DataType> void setDispatcher(ITypeDispatcher<DataType>* x)
76 {
77 DataType* ptr = nullptr;
78 m_container.instance(ptr) = x;
79 }
80
81 void setDispatcher(IControlDispatcher* x) { m_control = x; }
82 void setDispatcher(ISerializeDispatcher* x) { m_serialize = x; }
83
86 void setDeleteDispatchers(bool v) { m_is_delete_dispatchers = v; }
87
88 private:
89
91
92 IControlDispatcher* m_control = nullptr;
93 ISerializeDispatcher* m_serialize = nullptr;
94
95 bool m_is_delete_dispatchers = false;
96
97 private:
98};
99
100/*---------------------------------------------------------------------------*/
101/*---------------------------------------------------------------------------*/
102
103} // End namespace Arcane::MessagePassing
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107
108#endif
Manage control streams for parallel messages.
Interface of the dispatcher container.
Interface for serialization messages.
Parallel message handling for the type Type.
Container containing an instance of a class per data type.
Declarations of types and methods used by message exchange mechanisms.