LCOV - code coverage report
Current view: top level - pression - decompressor.h (source / functions) Hit Total Coverage
Test: Pression Lines: 2 2 100.0 %
Date: 2016-12-06 05:44:58 Functions: 3 3 100.0 %

          Line data    Source code
       1             : 
       2             : /* Copyright (c) 2013-2014, Stefan.Eilemann@epfl.ch
       3             :  *
       4             :  * This file is part of Pression <https://github.com/Eyescale/Pression>
       5             :  *
       6             :  * This library is free software; you can redistribute it and/or modify it under
       7             :  * the terms of the GNU Lesser General Public License version 2.1 as published
       8             :  * by the Free Software Foundation.
       9             :  *
      10             :  * This library is distributed in the hope that it will be useful, but WITHOUT
      11             :  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
      12             :  * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
      13             :  * details.
      14             :  *
      15             :  * You should have received a copy of the GNU Lesser General Public License
      16             :  * along with this library; if not, write to the Free Software Foundation, Inc.,
      17             :  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      18             :  */
      19             : 
      20             : #ifndef PRESSION_DECOMPRESSOR_H
      21             : #define PRESSION_DECOMPRESSOR_H
      22             : 
      23             : #include <pression/api.h>
      24             : #include <pression/types.h>
      25             : #include <lunchbox/thread.h>         // thread-safety macros
      26             : 
      27             : namespace pression
      28             : {
      29             : namespace detail { class Decompressor; }
      30             : 
      31             : /**
      32             :  * A C++ class to handle one decompressor plugin instance.
      33             :  *
      34             :  * Example: @include tests/compressor.cpp
      35             :  */
      36             : class Decompressor
      37             : {
      38             :     typedef detail::Decompressor* const Decompressor::*bool_t;
      39             : 
      40             : public:
      41             :     /** Construct a new, invalid decompressor instance. @version 1.7.1 */
      42             :     PRESSION_API Decompressor();
      43             : 
      44             :     /**
      45             :      * Construct a new decompressor instance.
      46             :      *
      47             :      * @param from the plugin registry.
      48             :      * @param name the name of the decompressor.
      49             :      * @version 1.7.1
      50             :      */
      51             :     PRESSION_API Decompressor( PluginRegistry& from, const uint32_t name );
      52             : 
      53             :     /** Destruct this decompressor. @version 1.7.1 */
      54             :     PRESSION_API virtual ~Decompressor();
      55             : 
      56             :      /** @return true if the instance is usable. @version 1.7.1 */
      57             :     PRESSION_API bool isGood() const;
      58             : 
      59             :     /**
      60             :      * @return true if the instance is usable, false otherwise.
      61             :      * @version 1.9.1
      62             :      */
      63             :     operator bool_t() const { return isGood() ? &Decompressor::impl_ : 0; }
      64             : 
      65             :     /** @return true if the instance is not usable. @version 1.9.1 */
      66         186 :     bool operator ! () const { return !isGood(); }
      67             : 
      68             :     /**
      69             :      * @return true if the instance is usable for the given name.
      70             :      * @version 1.7.1
      71             :      */
      72             :     PRESSION_API bool uses( const uint32_t name ) const;
      73             : 
      74             :     /** @return the information about the allocated instance. @version 1.7.1 */
      75             :     PRESSION_API const EqCompressorInfo& getInfo() const;
      76             : 
      77             :     /**
      78             :      * Set up a new, named decompressor instance.
      79             :      *
      80             :      * @param from the plugin registry.
      81             :      * @param name the name of the decompressor.
      82             :      * @return true on success, false otherwise.
      83             :      * @version 1.7.1
      84             :      */
      85             :     PRESSION_API bool setup( PluginRegistry& from, const uint32_t name );
      86             : 
      87             :     /** Reset to EQ_COMPRESSOR_NONE. @version 1.7.1 */
      88             :     PRESSION_API void clear();
      89             : 
      90             :     /**
      91             :      * Decompress one-dimensional data.
      92             :      *
      93             :      * @param in the pointer to an array of input data pointers
      94             :      * @param inSizes the array of input data sizes in bytes
      95             :      * @param numInputs the number of input data elements
      96             :      * @param out the pointer to a pre-allocated buffer for the
      97             :      *            uncompressed output result.
      98             :      * @param outDim the dimensions of the output data.
      99             :      * @version 1.7.1
     100             :      */
     101             :     PRESSION_API void decompress( const void* const* in,
     102             :                                   const uint64_t* const inSizes,
     103             :                                   const unsigned numInputs, void* const out,
     104             :                                   uint64_t outDim[2] );
     105             :     /**
     106             :      * Decompress two-dimensional data.
     107             :      *
     108             :      * The output is not modified on error.
     109             :      *
     110             :      * @param input the compressed data
     111             :      * @param out the pointer to a pre-allocated buffer for the
     112             :      *            uncompressed output result.
     113             :      * @param pvpOut the dimensions of the output data.
     114             :      * @param flags capability flags for the decompression.
     115             :      * @return true on success, false otherwise
     116             :      * @version 1.9.1
     117             :      */
     118             :     PRESSION_API bool decompress( const CompressorResult& input,
     119             :                                   void* const out, uint64_t pvpOut[4],
     120             :                                   const uint64_t flags );
     121             :     PRESSION_API void decompress( const void* const* in,
     122             :                                   const uint64_t* const inSizes,
     123             :                                   const unsigned numInputs, void* const out,
     124             :                                   uint64_t pvpOut[4], const uint64_t flags )
     125             :         LB_DEPRECATED;
     126             : 
     127             : private:
     128             :     Decompressor( const Decompressor& );
     129             :     Decompressor operator=( const Decompressor& );
     130             :     detail::Decompressor* const impl_;
     131         372 :     LB_TS_VAR( _thread );
     132             : };
     133             : }
     134             : #endif  // PRESSION_DECOMPRESSOR_H

Generated by: LCOV version 1.11