Arcane  v4.1.2.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
IHashAlgorithm.h
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/* IHashAlgorithm.h (C) 2000-2023 */
9/* */
10/* Interface d'un algorithme de hashage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_IHASHALGORITHM_H
13#define ARCANE_UTILS_IHASHALGORITHM_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include "arccore/base/Span.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
33class ARCANE_UTILS_EXPORT HashAlgorithmValue
34{
35 public:
36
37 static constexpr Int32 MAX_SIZE = 64;
38
39 public:
40
42 {
43 return { m_value.data(), m_size };
44 }
45 SmallSpan<const std::byte> bytes() const
46 {
47 return { m_value.data(), m_size };
48 }
49 SmallSpan<const Byte> asLegacyBytes() const
50 {
51 return { reinterpret_cast<const Byte*>(m_value.data()), m_size };
52 }
53 void setSize(Int32 size);
54
55 private:
56
57 std::array<std::byte, MAX_SIZE> m_value = {};
58 Int32 m_size = MAX_SIZE;
59};
60
61/*---------------------------------------------------------------------------*/
62/*---------------------------------------------------------------------------*/
82class ARCANE_UTILS_EXPORT IHashAlgorithmContext
83{
84 public:
85
86 virtual ~IHashAlgorithmContext() = default;
87
88 public:
89
91 virtual void reset() = 0;
92
94 virtual void updateHash(Span<const std::byte> input) = 0;
95
97 virtual void computeHashValue(HashAlgorithmValue& hash_value) = 0;
98};
99
100/*---------------------------------------------------------------------------*/
101/*---------------------------------------------------------------------------*/
105class ARCANE_UTILS_EXPORT IHashAlgorithm
106{
107 public:
108
109 virtual ~IHashAlgorithm() = default;
110
111 public:
112
113 //NOTE: pour l'instant (version 3.10) par encore virtuel pure pour rester
114 // compatible avec l'existant
116 virtual String name() const;
117
118 //NOTE: pour l'instant (version 3.10) par encore virtuel pure pour rester
119 // compatible avec l'existant. Envoi FatalErrorException si pas surchargée
121 virtual Int32 hashSize() const;
122
129 virtual void computeHash64(Span<const Byte> input, ByteArray& output);
130
137 virtual void computeHash64(Span<const std::byte> input, ByteArray& output);
138
139 //NOTE: pour l'instant (version 3.11) par encore virtuel pure pour rester
140 // compatible avec l'existant
146 virtual void computeHash(Span<const std::byte> input, HashAlgorithmValue& value);
147
148 //NOTE: pour l'instant (version 3.11) par encore virtuel pure pour rester
149 // compatible avec l'existant
158
159 //NOTE: pour l'instant (version 3.11) par encore virtuel pure pour rester
160 // compatible avec l'existant
162 virtual bool hasCreateContext() const { return false; }
163
164 public:
165
172 ARCANE_DEPRECATED_REASON("Y2023: Use computeHash64(Span<const std::byte> input,ByteArray& output) instead")
173 virtual void computeHash(ByteConstArrayView input, ByteArray& output) = 0;
174};
175
176/*---------------------------------------------------------------------------*/
177/*---------------------------------------------------------------------------*/
178
179} // namespace Arcane
180
181/*---------------------------------------------------------------------------*/
182/*---------------------------------------------------------------------------*/
183
184#endif
185
Types et fonctions associés aux classes SpanImpl, SmallSpan and Span.
Déclarations des types utilisés dans Arcane.
Valeur retournée par un algorithme de hashage.
Contexte pour calculer un hash de manière incrémentale.
virtual void updateHash(Span< const std::byte > input)=0
Ajoute le tableau input au hash calculé
virtual void reset()=0
Réinitialise l'instance pour calculer une nouvelle valeur de hash.
virtual void computeHashValue(HashAlgorithmValue &hash_value)=0
Calcule la valeur de hashage et la retourne dans hash_value.
Interface d'un algorithme de hashage.
virtual bool hasCreateContext() const
Indique si l'implémentation supporte un hash incrémental.
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
Vue d'un tableau d'éléments de type T.
Definition Span.h:633
Chaîne de caractères unicode.
-*- 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:121
ConstArrayView< Byte > ByteConstArrayView
Equivalent C d'un tableau à une dimension de caractères.
Definition UtilsTypes.h:476
unsigned char Byte
Type d'un octet.
Definition BaseTypes.h:43
std::int32_t Int32
Type entier signé sur 32 bits.