Pour compresser/décompresser des données avec zlib, je dois d'abord configurer une structure appelée z_stream
. z_stream
a deux pointeurs non const appelés next_in
et next_out
.C++ - Utilisation de zlib avec des données const
Si je veux faire une fonction comme ceci:
void ungzip(std::vector<unsigned char>& dst,const std::vector<unsigned char>& src)
{
z_stream strm;
// more code
}
et d'autres comme,
void gzip (std::vector<unsigned char>& dst,const std::vector<unsigned char>& src);
Qu'est-ce que je dois faire?
Copie src dans un contexte local std::vector<unsigned char>
std::vector<unsigned char> tmp(src);
et l'utiliser comme pointeur source ou le comme ça, strm.next_in = const_cast<char*>(&src[0])
?
Est-ce que zlib conserve les données d'entrée?
Je recommanderais d'accepter l'entrée via les itérateurs: avec ce design, il contraint l'appelant à stocker les données dans 'le vecteur' –
zlib ne touche pas les données d'entrée. Il est traité comme s'il était 'const'. 'next_in' n'est pas' const' par défaut car de nombreuses applications utilisent 'next_in' en dehors de zlib pour lire leurs données. Le faire 'const' casserait ces applications. –