Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
IRandomNumberGenerator.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/* IRandomNumberGenerator.h (C) 2000-2022 */
9/* */
10/* Interface pour générateur de nombres aléatoires. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#ifndef ARCANE_IRANDOMNUMBERGENERATOR_H
15#define ARCANE_IRANDOMNUMBERGENERATOR_H
16
17/*---------------------------------------------------------------------------*/
18/*---------------------------------------------------------------------------*/
19
20#include "arcane/utils/Array.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
45class ARCANE_CORE_EXPORT RNGSeedHelper
46{
47 public:
48
55 {
56 m_seed = av;
57 }
58
66 template <class T>
68 {
69 m_seed = ByteArrayView(sizeof(T), (Byte*)var);
70 }
71
72 virtual ~RNGSeedHelper() = default;
73
74 public:
75
84 template <class T>
86 {
87 if (m_seed.empty()) {
88 return false;
89 }
90 memcpy(m_seed.data(), &value_in, std::min(m_seed.size(), (Integer)sizeof(T)));
91 for (Integer i = sizeof(T); i < m_seed.size(); i++) {
92 m_seed[i] = 0x00;
93 }
94 return true;
95 }
96
107 template <class T>
108 bool value(T& value_out, bool without_size_check = true) const
109 {
110 if (m_seed.empty() || (!without_size_check && sizeof(T) != m_seed.size())) {
111 return false;
112 }
113 value_out = 0;
114 memcpy(&value_out, m_seed.data(), std::min(m_seed.size(), (Integer)sizeof(T)));
115 return true;
116 }
117
128 template <class T>
129 bool value(T* value_out, bool without_size_check = true) const
130 {
131 if (m_seed.empty() || (sizeof(T) != m_seed.size() && !without_size_check)) {
132 return false;
133 }
134 *value_out = 0;
135 memcpy(value_out, m_seed.data(), std::min(m_seed.size(), (Integer)sizeof(T)));
136 return true;
137 }
138
144 Integer sizeOfSeed() const
145 {
146 return m_seed.size();
147 }
148
155 {
156 return m_seed.constView();
157 }
158
165 {
166 return m_seed;
167 }
168
176 template <class T>
178 {
179 setValue(new_value);
180 return *this;
181 }
182
190 {
191 return ByteUniqueArray(m_seed);
192 }
193
194 protected:
195 ByteArrayView m_seed;
196};
197
202class ARCANE_CORE_EXPORT IRandomNumberGenerator
203{
204 public:
205 virtual ~IRandomNumberGenerator() = default;
206
207 public:
217 virtual bool initSeed() = 0;
218
228 virtual bool initSeed(ByteArrayView seed) = 0;
229
237
244
251 virtual Integer neededSizeOfSeed() = 0;
252
260 virtual bool isLeapSeedSupported() = 0;
261
269 virtual ByteUniqueArray generateRandomSeed(Integer leap = 0) = 0;
270
283
291 virtual bool isLeapNumberSupported() = 0;
292
300 virtual Real generateRandomNumber(Integer leap = 0) = 0;
301
313 virtual Real generateRandomNumber(ByteArrayView seed, Integer leap = 0) = 0;
314};
315
316/*---------------------------------------------------------------------------*/
317/*---------------------------------------------------------------------------*/
318
319} // End namespace Arcane
320
321/*---------------------------------------------------------------------------*/
322/*---------------------------------------------------------------------------*/
323
324#endif
Déclarations des types utilisés dans Arcane.
Interface pour un générateur de nombre aléatoire.
virtual ByteConstArrayView viewSeed()=0
Méthode permettant de récupérer une vue constante sur la graine actuelle.
virtual ByteUniqueArray emptySeed()=0
Méthode permettant de récupérer une graine vide de bonne taille.
virtual Real generateRandomNumber(ByteArrayView seed, Integer leap=0)=0
Méthode permettant de générer un nombre aléatoire avec la graine transmise en paramètre.
virtual ByteUniqueArray generateRandomSeed(Integer leap=0)=0
Méthode permettant de générer une graine "enfant" à partir d'une graine "parent".
virtual bool isLeapSeedSupported()=0
Méthode permettant de savoir si les sauts sont permis sur le générateur de graines.
virtual Real generateRandomNumber(Integer leap=0)=0
Méthode permettant de générer un nombre aléatoire avec la graine en mémoire.
virtual ByteUniqueArray generateRandomSeed(ByteArrayView parent_seed, Integer leap=0)=0
Méthode permettant de générer une graine "enfant" à partir d'une graine "parent".
virtual bool isLeapNumberSupported()=0
Méthode permettant de savoir si les sauts sont permis sur le générateur de nombres.
virtual bool initSeed(ByteArrayView seed)=0
Méthode permettant d'initialiser le service.
virtual Integer neededSizeOfSeed()=0
Méthode permettant de connaitre la taille de seed nécessaire pour l'implémentation.
virtual bool initSeed()=0
Méthode permettant d'initialiser le service.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Classe permettant de manipuler facilement une graine.
bool value(T &value_out, bool without_size_check=true) const
Méthode permettant de récupérer la valeur de la graine.
Integer sizeOfSeed() const
Méthode permettant de récupérer la taille de la graine.
bool setValue(T value_in)
Méthode permettant de définir une valeur dans la graine.
ByteConstArrayView constView() const
Méthode permettant de récupérer une vue constante.
ByteUniqueArray copy()
Méthode permettant de récupérer une copie du tableau de Byte.
bool value(T *value_out, bool without_size_check=true) const
Méthode permettant de récupérer la valeur de la graine.
ByteArrayView view()
Méthode permettant de récupérer une vue.
RNGSeedHelper(T *var)
Constructeur de classe.
RNGSeedHelper(ByteArrayView av)
Constructeur de la classe.
RNGSeedHelper & operator=(T new_value)
Opérateur de copie depuis une valeur de graine.
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-