14#include "arcane/utils/IOException.h"
15#include "arcane/utils/Array.h"
16#include "arcane/utils/TraceInfo.h"
17#include "arcane/utils/IDataCompressor.h"
19#include "arcane/FactoryService.h"
20#include "arcane/AbstractService.h"
21#include "arcane/IDeflateService.h"
36class Bzip2DeflateService
56 compressed_values.
resize(compressed_init_size);
59 char* dest = (
char*)compressed_values.
data();
60 unsigned int dest_len = (
unsigned int)compressed_init_size;
62 char* source = (
char*)values.
data();
63 unsigned int source_len = (
unsigned int)input_size;
65 int blockSize100k = 9;
70 info() <<
"CHECK COMPRESS dest=" << (
void*)dest
71 <<
" dest_len=" << dest_len
72 <<
" source=" << (
void*)source
73 <<
" source_len=" << source_len;
76 int r = BZ2_bzBuffToBuffCompress(dest,
84 throw IOException(A_FUNCINFO,String::format(
"io error during compression r={0}",r));
88 ratio = ((double)dest_len * 100.0 ) / (
double)source_len;
89 info() <<
"Bzip2 compress r=" << r <<
" source_len=" << source_len
90 <<
" dest_len=" << dest_len <<
" ratio=" << ratio;
91 compressed_values.
resize(dest_len);
96 char* dest = (
char*)values.
data();
97 unsigned int dest_len = (
unsigned int)values.
size();
99 char* source = (
char*)compressed_values.
data();
100 unsigned int source_len = (
unsigned int)compressed_values.
size();
106 int r = BZ2_bzBuffToBuffDecompress(dest,&dest_len,
109 info() <<
"Bzip2 decompress r=" << r <<
" source_len=" << source_len
110 <<
" dest_len=" << dest_len;
121class Bzip2DataCompressor
142 compressed_values.
resize(compressed_init_size);
144 char* dest =
reinterpret_cast<char*
>(compressed_values.
data());
145 unsigned int dest_len = _toUInt(compressed_init_size);
147 char* source =
const_cast<char*
>(
reinterpret_cast<const char*
>(values.
data()));
148 unsigned int source_len = _toUInt(input_size);
150 int blockSize100k = 9;
154 int r = BZ2_bzBuffToBuffCompress(dest,
167 ratio = ((double)dest_len * 100.0 ) / (
double)source_len;
168 info() <<
"Bzip2 compress r=" << r <<
" source_len=" << source_len
169 <<
" dest_len=" << dest_len <<
" ratio=" << ratio;
170 compressed_values.
resize(dest_len);
175 char* dest =
reinterpret_cast<char*
>(values.
data());
176 unsigned int dest_len = _toUInt(values.
size());
178 char* source =
const_cast<char*
>(
reinterpret_cast<const char*
>(compressed_values.
data()));
179 unsigned int source_len = _toUInt(compressed_values.
size());
185 int r = BZ2_bzBuffToBuffDecompress(dest,&dest_len,
188 info(5) <<
"Bzip2 decompress r=" << r <<
" source_len=" << source_len
189 <<
" dest_len=" << dest_len;
196 unsigned int _toUInt(
Int64 vsize)
199 Int64 max_uint_size = std::numeric_limits<unsigned int>::max();
200 if (vsize>max_uint_size)
202 vsize,max_uint_size);
203 return static_cast<unsigned int>(vsize);
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_SERVICE_INTERFACE(ainterface)
Macro pour déclarer une interface lors de l'enregistrement d'un service.
AbstractService(const ServiceBuildInfo &)
Constructeur à partir d'un ServiceBuildInfo.
constexpr const_pointer data() const noexcept
Pointeur sur le début de la vue.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
Tableau d'items de types quelconques.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
const T * data() const
Accès à la racine du tableau hors toute protection.
Service de compression utilisant la bibliothèque 'Bzip2'.
Int64 minCompressSize() const override
Taille minimale du tableau en dessous de laquelle il n'est pas utile de compresser.
void decompress(Span< const std::byte > compressed_values, Span< std::byte > values) override
Décompresse les données compressed_values et les stocke dans values.
String name() const override
Nom de l'algorithme.
void build() override
Construction de niveau build du service.
void compress(Span< const std::byte > values, Array< std::byte > &compressed_values) override
Compresse les données values et les stocke dans compressed_values.
Service de compression utilisant la bibliothèque 'Bzip2'.
void build() override
Construction de niveau build du service.
void compress(ByteConstArrayView values, ByteArray &compressed_values) override
Compresse les données values et les stocke dans compressed_values.
void decompress(ByteConstArrayView compressed_values, ByteArrayView values) override
Décompresse les données compressed_values et les stocke dans values.
constexpr const_pointer data() const noexcept
Pointeur sur la mémoire allouée.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Interface d'un service permettant de compresser/décompresser des données.
Interface d'un service permettant de compresser/décompresser des données.
Exception lorsqu'une erreur d'entrée/sortie est détectée.
virtual String localName() const =0
Partie locale du nom du service.
Structure contenant les informations pour créer un service.
IServiceInfo * serviceInfo() const
Accès au IServiceInfo associé
Propriétés de création d'un service.
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Vue d'un tableau d'éléments de type T.
Chaîne de caractères unicode.
TraceMessage info() const
Flot pour un message d'information.
#define ARCANE_REGISTER_SERVICE(aclass, a_service_property,...)
Macro pour enregistrer un service.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ArrayView< Byte > ByteArrayView
Equivalent C d'un tableau à une dimension de caractères.
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
Array< Byte > ByteArray
Tableau dynamique à une dimension de caractères.
@ ST_Application
Le service s'utilise au niveau de l'application.
@ ST_CaseOption
Le service s'utilise au niveau du jeu de données.
double Real
Type représentant un réel.
ConstArrayView< Byte > ByteConstArrayView
Equivalent C d'un tableau à une dimension de caractères.