Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
HashAlgorithm.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* HashAlgorithm.cc (C) 2000-2023 */
9/* */
10/* Interface d'un algorithme de hashage. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/IHashAlgorithm.h"
15#include "arcane/utils/FatalErrorException.h"
16#include "arcane/utils/NotImplementedException.h"
17#include "arcane/utils/Array.h"
18#include "arcane/utils/Ref.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29void HashAlgorithmValue::
30setSize(Int32 size)
31{
32 if (size < 0)
33 ARCANE_FATAL("Invalid negative size '{0}'", size);
34 if (size > MAX_SIZE)
35 ARCANE_FATAL("Invalid size '{0}' max value is '{1}'", size, MAX_SIZE);
36 m_size = size;
37}
38
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
41
43name() const
44{
45 ARCANE_THROW(NotImplementedException, "name() method");
46}
47
48/*---------------------------------------------------------------------------*/
49/*---------------------------------------------------------------------------*/
50
52hashSize() const
53{
54 ARCANE_THROW(NotImplementedException, "hashSize() method");
55}
56
57/*---------------------------------------------------------------------------*/
58/*---------------------------------------------------------------------------*/
59
62{
63 computeHash(input.smallView(), output);
64}
65
66/*---------------------------------------------------------------------------*/
67/*---------------------------------------------------------------------------*/
68
71{
72 const Byte* x = reinterpret_cast<const Byte*>(input.data());
73 computeHash64(Span<const Byte>(x, input.size()), output);
74}
75
76/*---------------------------------------------------------------------------*/
77/*---------------------------------------------------------------------------*/
78
81{
82 UniqueArray<Byte> legacy_bytes;
83 computeHash64(input, legacy_bytes);
84 Int32 n = legacy_bytes.size();
85 value.setSize(n);
86 SmallSpan<std::byte> value_as_bytes(value.bytes());
87 for (Int32 i = 0; i < n; ++i)
88 value_as_bytes[i] = static_cast<std::byte>(legacy_bytes[i]);
89}
90
91/*---------------------------------------------------------------------------*/
92/*---------------------------------------------------------------------------*/
93
99
100/*---------------------------------------------------------------------------*/
101/*---------------------------------------------------------------------------*/
102
103} // namespace Arcane
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Integer size() const
Nombre d'éléments du vecteur.
Valeur retournée par un algorithme de hashage.
virtual String name() const
Nom de l'algorithme.
virtual void computeHash(Span< const std::byte > input, HashAlgorithmValue &value)
Calcule la valeur du hash pour le tableau input.
virtual void computeHash64(Span< const Byte > input, ByteArray &output)
Calcule la valeur du hash pour le tableau input.
virtual Int32 hashSize() const
Taille (en octet) de la clé de hash.
virtual Ref< IHashAlgorithmContext > createContext()
Créé un contexte pour calculer la valeur du hash de manière incrémentale.
Référence à une instance.
Vue d'un tableau d'éléments de type T.
Definition Span.h:673
constexpr view_type smallView()
Vue constante sur cette vue.
Definition Span.h:273
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:212
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:422
Vue d'un tableau d'éléments de type T.
Definition Span.h:513
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Array< Byte > ByteArray
Tableau dynamique à une dimension de caractères.
Definition UtilsTypes.h:208
unsigned char Byte
Type d'un octet.
Definition BaseTypes.h:43
std::int32_t Int32
Type entier signé sur 32 bits.