Arcane  v4.1.1.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-2025 */
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 ARCANE_FATAL_IF((size < 0), "Invalid negative size '{0}'", size);
33 ARCANE_FATAL_IF((size > MAX_SIZE), "Invalid size '{0}' max value is '{1}'", size, MAX_SIZE);
34 m_size = size;
35}
36
37/*---------------------------------------------------------------------------*/
38/*---------------------------------------------------------------------------*/
39
41name() const
42{
43 ARCANE_THROW(NotImplementedException, "name() method");
44}
45
46/*---------------------------------------------------------------------------*/
47/*---------------------------------------------------------------------------*/
48
50hashSize() const
51{
52 ARCANE_THROW(NotImplementedException, "hashSize() method");
53}
54
55/*---------------------------------------------------------------------------*/
56/*---------------------------------------------------------------------------*/
57
60{
61 computeHash(input.smallView(), output);
62}
63
64/*---------------------------------------------------------------------------*/
65/*---------------------------------------------------------------------------*/
66
69{
70 const Byte* x = reinterpret_cast<const Byte*>(input.data());
71 computeHash64(Span<const Byte>(x, input.size()), output);
72}
73
74/*---------------------------------------------------------------------------*/
75/*---------------------------------------------------------------------------*/
76
79{
80 UniqueArray<Byte> legacy_bytes;
81 computeHash64(input, legacy_bytes);
82 Int32 n = legacy_bytes.size();
83 value.setSize(n);
84 SmallSpan<std::byte> value_as_bytes(value.bytes());
85 for (Int32 i = 0; i < n; ++i)
86 value_as_bytes[i] = static_cast<std::byte>(legacy_bytes[i]);
87}
88
89/*---------------------------------------------------------------------------*/
90/*---------------------------------------------------------------------------*/
91
97
98/*---------------------------------------------------------------------------*/
99/*---------------------------------------------------------------------------*/
100
101} // namespace Arcane
102
103/*---------------------------------------------------------------------------*/
104/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL_IF(const,...)
Macro envoyant une exception FatalErrorException si cond est vrai.
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
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:801
constexpr view_type smallView()
Vue constante sur cette vue.
Definition Span.h:390
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:537
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:325
Vue d'un tableau d'éléments de type T.
Definition Span.h:633
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:137
unsigned char Byte
Type d'un octet.
Definition BaseTypes.h:43
std::int32_t Int32
Type entier signé sur 32 bits.