Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
RequestListBase.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/* RequestListBase.h (C) 2000-2020 */
9/* */
10/* Classe de base d'une liste de requêtes. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_MESSAGEPASSING_REQUESTLISTBASE_H
13#define ARCCORE_MESSAGEPASSING_REQUESTLISTBASE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/message_passing/IRequestList.h"
18#include "arccore/message_passing/Request.h"
19#include "arccore/collections/Array.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arccore::MessagePassing::internal
25{
26/*!
27 * \internal
28 * \brief Classe de base d'une liste de requêtes.
29 */
30class ARCCORE_MESSAGEPASSING_EXPORT RequestListBase
31: public IRequestList
32{
33 public:
34
35 RequestListBase() = default;
36
37 public:
38
39 void add(Request r) override { _add(r); }
40 void add(Span<Request> r) override { _add(r); }
41 Int32 wait(eWaitType wait_type) final;
42 Int32 size() const override { return m_requests.size(); }
43 void clear() final;
44 void removeDoneRequests() override;
45 bool isRequestDone(Int32 index) const override { return m_requests_done[index]; }
46 Request request(Int32 index) const override { return m_requests[index]; }
47 ConstArrayView<Int32> doneRequestIndexes() const final;
48
49 protected:
50
51 virtual void _add(const Request& r)
52 {
53 m_requests.add(r);
54 m_requests_done.add(false);
55 }
56 virtual void _add(Span<Request> rlist)
57 {
58 m_requests.addRange(rlist);
59 m_requests_done.addRange(false,rlist.size());
60 }
61 virtual void _removeRequestAtIndex(Integer pos)
62 {
63 m_requests.remove(pos);
64 m_requests_done.remove(pos);
65 }
66 /*!
67 * \brief Effectue l'attente ou le test.
68 *
69 * L'implémentation doit remplir à \a _requestsDone() avec la
70 * valeur \a true pour chaque requête terminée sauf si
71 * \a wait_type vaut WaitAll.
72 */
73 virtual void _wait(eWaitType wait_type) =0;
74
75 protected:
76
77 ArrayView<Request> _requests() { return m_requests; }
78 ArrayView<bool> _requestsDone() { return m_requests_done; }
79
80 private:
81
82 UniqueArray<Request> m_requests;
83 UniqueArray<bool> m_requests_done;
84 UniqueArray<Int32> m_done_request_indexes;
85};
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
89
90} // End namespace Arccore::MessagePassing
91
92/*---------------------------------------------------------------------------*/
93/*---------------------------------------------------------------------------*/
94
95#endif
96
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Requête d'un message.
Definition Request.h:77
void add(Request r) override
Ajoute la requête r à la liste des requêtes.
virtual void _wait(eWaitType wait_type)=0
Effectue l'attente ou le test.
Int32 size() const override
Nombre de requêtes.
Request request(Int32 index) const override
index-ième requête de la liste
void add(Span< Request > r) override
Ajoute la liste de requêtes rlist à la liste des requêtes.
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:209
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
Vecteur 1D de données avec sémantique par valeur (style STL).
Int32 Integer
Type représentant un entier.
std::int32_t Int32
Type entier signé sur 32 bits.