Remove dynamic exceptions
[anna.git] / include / anna / core / util / ZBlock.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #ifndef anna_core_util_ZBlock_hpp
10 #define anna_core_util_ZBlock_hpp
11
12 #include <anna/core//DataBlock.hpp>
13
14 namespace anna {
15
16 /**
17    Facilita la compresión y descompresión de bloques de datos.
18
19    Para más información: \see http://zlib.net/manual.html
20
21    Para optimizar el acceso no se ha establecido ningun tipo de proteccion para ejecucion MT.
22 */
23 class ZBlock : public DataBlock {
24 public:
25   /**
26    * Nivel de compresión que pueden ser aplicados.
27    */
28   struct Mode { enum _v { Default = -1, NoCompression, BestSpeed = 1, BestCompression = 9 }; };
29
30   /**
31    * Constructor vacio.
32    */
33   ZBlock() : DataBlock(true) {;}
34
35   /**
36    * Comprime el contenido del bloque de datos recibido como parámetro y lo guarda
37    * en la estructura interna.
38    * \param data Bloque de datos a comprimir.
39    * \param mode Modo de compresión realizado.
40    * \return El bloque de datos una vez comprimido y con la información suficiente para ser descomprimido.
41    */
42   const DataBlock& compress(const DataBlock& data, const Mode::_v mode = Mode::Default) noexcept(false);
43
44   /**
45    * Descomprime el bloque de datos recibido como parámetro.
46    * \param zdata Bloque de datos obtenido como resultado de aplicar con ZBlock::compress.
47    * \param originalSize Tamaño original que tenía el buffer antes de ser comprimido.
48    * \return El bloque de datos descomprimdo.
49    */
50   const DataBlock& uncompress(const DataBlock& zdata) noexcept(false);
51
52 private:
53   ZBlock(const ZBlock&);
54 };
55
56 }
57
58 #endif
59
60