LCOV - code coverage report
Current view: top level - zipios - fileentry.hpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1 100.0 %
Date: 2019-04-24 14:10:30 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : #pragma once
       2             : #ifndef ZIPIOS_FILEENTRY_HPP
       3             : #define ZIPIOS_FILEENTRY_HPP
       4             : 
       5             : /*
       6             :   Zipios -- a small C++ library that provides easy access to .zip files.
       7             : 
       8             :   Copyright (C) 2000-2007  Thomas Sondergaard
       9             :   Copyright (C) 2015-2019  Made to Order Software Corporation
      10             : 
      11             :   This library is free software; you can redistribute it and/or
      12             :   modify it under the terms of the GNU Lesser General Public
      13             :   License as published by the Free Software Foundation; either
      14             :   version 2.1 of the License, or (at your option) any later version.
      15             : 
      16             :   This library is distributed in the hope that it will be useful,
      17             :   but WITHOUT ANY WARRANTY; without even the implied warranty of
      18             :   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      19             :   Lesser General Public License for more details.
      20             : 
      21             :   You should have received a copy of the GNU Lesser General Public
      22             :   License along with this library; if not, write to the Free Software
      23             :   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
      24             : */
      25             : 
      26             : /** \file
      27             :  * \brief Define the zipios::FileEntry class.
      28             :  *
      29             :  * The zipios::FileEntry class is an interface defining a virtual
      30             :  * representation to a file in a Zip archive or on disk.
      31             :  *
      32             :  * File entries are found in various file collections.
      33             :  *
      34             :  * \sa zipios::FileCollection
      35             :  */
      36             : 
      37             : #include "zipios/filepath.hpp"
      38             : #include "zipios/dosdatetime.hpp"
      39             : 
      40             : #include <memory>
      41             : #include <vector>
      42             : 
      43             : 
      44             : namespace zipios
      45             : {
      46             : 
      47             : 
      48             : enum class StorageMethod : uint8_t
      49             : {
      50             :     STORED      =  0,
      51             :     SHRUNK      =  1,
      52             :     REDUCED1    =  2,
      53             :     REDUCED2    =  3,
      54             :     REDUCED3    =  4,
      55             :     REDUCED4    =  5,
      56             :     IMPLODED    =  6,
      57             :     TOKENIZED   =  7,
      58             :     DEFLATED    =  8,
      59             :     DEFLATED64  =  9,
      60             :     OLD_TERSE   = 10,
      61             :     RESERVED11  = 11,
      62             :     BZIP2       = 12,
      63             :     REVERVED13  = 13,
      64             :     LZMA        = 14,
      65             :     RESERVED15  = 15,
      66             :     RESERVED16  = 16,
      67             :     RESERVED17  = 17,
      68             :     NEW_TERSE   = 18,
      69             :     LZ77        = 19,
      70             :     WAVPACK     = 97,
      71             :     PPMD_I_1    = 98
      72             : };
      73             : 
      74             : 
      75      258114 : class FileEntry
      76             : {
      77             : public:
      78             :     typedef std::shared_ptr<FileEntry>      pointer_t;
      79             :     typedef std::vector<pointer_t>          vector_t;
      80             :     typedef std::vector<unsigned char>      buffer_t;
      81             :     typedef uint32_t                        crc32_t;
      82             : 
      83             :     // we use our own compression level type, it gets converted as
      84             :     // required when the level is to be used by a compression scheme
      85             :     typedef int                     CompressionLevel;
      86             : 
      87             :     static CompressionLevel const   COMPRESSION_LEVEL_DEFAULT   =  -3;
      88             :     static CompressionLevel const   COMPRESSION_LEVEL_SMALLEST  =  -2;
      89             :     static CompressionLevel const   COMPRESSION_LEVEL_FASTEST   =  -1;
      90             :     static CompressionLevel const   COMPRESSION_LEVEL_NONE      =   0;
      91             :     static CompressionLevel const   COMPRESSION_LEVEL_MINIMUM   =   1;
      92             :     static CompressionLevel const   COMPRESSION_LEVEL_MAXIMUM   = 100;
      93             : 
      94             :                                 FileEntry(FilePath const & filename, std::string const & comment = std::string());
      95             :     virtual pointer_t           clone() const = 0;
      96             :     virtual                     ~FileEntry();
      97             : 
      98             :     virtual std::string         getComment() const;
      99             :     virtual size_t              getCompressedSize() const;
     100             :     virtual crc32_t             getCrc() const;
     101             :     std::streampos              getEntryOffset() const;
     102             :     virtual buffer_t            getExtra() const;
     103             :     virtual size_t              getHeaderSize() const;
     104             :     virtual CompressionLevel    getLevel() const;
     105             :     virtual StorageMethod       getMethod() const;
     106             :     virtual std::string         getName() const;
     107             :     virtual std::string         getFileName() const;
     108             :     virtual size_t              getSize() const;
     109             :     virtual DOSDateTime::dosdatetime_t
     110             :                                 getTime() const;
     111             :     virtual std::time_t         getUnixTime() const;
     112             :     bool                        hasCrc() const;
     113             :     virtual bool                isDirectory() const;
     114             :     virtual bool                isEqual(FileEntry const& file_entry) const;
     115             :     virtual bool                isValid() const;
     116             :     virtual void                setComment(std::string const& comment);
     117             :     virtual void                setCompressedSize(size_t size);
     118             :     virtual void                setCrc(crc32_t crc);
     119             :     void                        setEntryOffset(std::streampos offset);
     120             :     virtual void                setExtra(buffer_t const& extra);
     121             :     virtual void                setLevel(CompressionLevel level);
     122             :     virtual void                setMethod(StorageMethod method);
     123             :     virtual void                setSize(size_t size);
     124             :     virtual void                setTime(DOSDateTime::dosdatetime_t time);
     125             :     virtual void                setUnixTime(std::time_t time);
     126             :     virtual std::string         toString() const;
     127             : 
     128             :     virtual void                read(std::istream& is);
     129             :     virtual void                write(std::ostream& os);
     130             : 
     131             : protected:
     132             :     FilePath                    m_filename;
     133             :     std::string                 m_comment;
     134             :     size_t                      m_uncompressed_size = 0;
     135             :     time_t                      m_unix_time = 0;
     136             :     std::streampos              m_entry_offset = 0;
     137             :     StorageMethod               m_compress_method = StorageMethod::STORED;
     138             :     CompressionLevel            m_compression_level = COMPRESSION_LEVEL_DEFAULT;
     139             :     uint32_t                    m_crc_32 = 0;
     140             :     buffer_t                    m_extra_field;
     141             :     bool                        m_has_crc_32 = false;
     142             :     bool                        m_valid = false;
     143             : };
     144             : 
     145             : 
     146             : std::ostream& operator << (std::ostream& os, FileEntry const& entry);
     147             : 
     148             : 
     149             : } // zipios namespace
     150             : 
     151             : // Local Variables:
     152             : // mode: cpp
     153             : // indent-tabs-mode: nil
     154             : // c-basic-offset: 4
     155             : // tab-width: 4
     156             : // End:
     157             : 
     158             : // vim: ts=4 sw=4 et
     159             : #endif

Generated by: LCOV version 1.12