git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5000 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
241 lines
8.5 KiB
C++
241 lines
8.5 KiB
C++
#ifndef FILEENTRY_H
|
|
#define FILEENTRY_H
|
|
|
|
#include "zipios-config.h"
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include "meta-iostreams.h"
|
|
|
|
#include "simplesmartptr.h"
|
|
#include "zipios_defs.h"
|
|
|
|
namespace zipios {
|
|
|
|
using std::vector ;
|
|
using std::ostream ;
|
|
using std::istream ;
|
|
using std::string ;
|
|
|
|
/** The types used with FileEntry::setMethod and
|
|
FileEntry::getMethod. The current entries are the types supported
|
|
by the zip format. The numbering also matches the numbering used
|
|
in the zip file format, ie STORED is indicated by a 0 in the
|
|
method field in a zip file and so on. */
|
|
enum StorageMethod { STORED = 0, SHRUNK, REDUCED1, REDUCED2,
|
|
REDUCED3, REDUCED4, IMPLODED, RESERVED,
|
|
DEFLATED } ;
|
|
|
|
class FileEntry ;
|
|
|
|
/** \typedef typedef SimpleSmartPointer< FileEntry > EntryPointer
|
|
EntryPointer is a SimpleSmartPointer for FileEntry's. */
|
|
typedef SimpleSmartPointer< FileEntry > EntryPointer ;
|
|
|
|
|
|
/** ConstEntryPointer is a SimpleSmartPointer for const FileEntry's. */
|
|
typedef SimpleSmartPointer< const FileEntry > ConstEntryPointer ;
|
|
|
|
/** Entries is a vector of EntryPointer's */
|
|
typedef vector< EntryPointer > Entries ;
|
|
|
|
/** ConstEntries is a vector of ConstEntryPointer's */
|
|
typedef vector< EntryPointer > ConstEntries ;
|
|
|
|
|
|
|
|
/** A FileEntry represents an entry in a FileCollection. The interface
|
|
is a copy of the ZipEntry interface from the java.util.zip
|
|
package. The name has been changed to FileEntry, as FileCollection
|
|
is a more general abstraction, that covers other types of file
|
|
collections than just zip files. */
|
|
class BaseExport FileEntry {
|
|
public:
|
|
|
|
/* Default construcotr, copy constructor and copy assignment
|
|
operator are sufficient. */
|
|
|
|
/** Returns the comment of the entry, if it has one. Otherwise it
|
|
returns an empty string.
|
|
@return the comment associated with the entry, if there is one.
|
|
*/
|
|
virtual string getComment() const = 0 ;
|
|
/** Returns the compressed size of the entry. If the entry is not
|
|
stored in a compressed format, the uncompressed size is
|
|
returned.
|
|
@return the compressed size of the entry. If the entry is stored without
|
|
compression the uncompressed size is returned.
|
|
*/
|
|
virtual uint32 getCompressedSize() const = 0 ;
|
|
/** Returns the Crc for the entry, if it has one. FIXME: what is
|
|
returned if it doesn't have one?
|
|
@return the Crc for the entry, if it has one.
|
|
*/
|
|
virtual uint32 getCrc() const = 0 ;
|
|
/** Returns a vector of bytes of extra data that may be stored with
|
|
the entry.
|
|
@return A vector< unsigned char > of extra bytes that may potentially
|
|
be associated with an entry.
|
|
*/
|
|
virtual vector< unsigned char > getExtra() const = 0 ;
|
|
/** Returns the method used to store the entry in the FileCollection.
|
|
@return the storage method used to store the entry in the collection.
|
|
@see StorageMethod.
|
|
*/
|
|
virtual StorageMethod getMethod() const = 0 ;
|
|
/** Returns the full filename of the entry, including a path if the
|
|
entry is stored in a subfolder.
|
|
@return the filename of the entry, including path if the entry is stored
|
|
in a sub-folder.
|
|
*/
|
|
virtual string getName() const = 0 ;
|
|
/** Returns the filename of the entry.
|
|
@return Returns the filename of the entry.
|
|
*/
|
|
virtual string getFileName() const = 0 ;
|
|
/** Returns the (uncompressed) size of the entry data.
|
|
@return Returns the (uncompressed) size of the entry.
|
|
*/
|
|
virtual uint32 getSize() const = 0 ;
|
|
/** Returns the date and time of FIXME: what?
|
|
@return the date and time of the entry.
|
|
*/
|
|
virtual int getTime() const = 0 ;
|
|
/** Any method or operator that initializes a FileEntry may set a
|
|
flag, that specifies whether the read entry is valid or not. If
|
|
it isn't this method returns false.
|
|
@return true if the FileEntry has been parsed succesfully.
|
|
*/
|
|
virtual bool isValid() const = 0 ;
|
|
// virtual int hashCode() const = 0 ;
|
|
/** Returns true if the entry is a directory. A directory entry is
|
|
an entry which name ends with a separator ('/' for Unix systems,
|
|
'\' for Windows and DOS systems.
|
|
@return true if the entry is a directory.
|
|
*/
|
|
virtual bool isDirectory() const = 0 ;
|
|
|
|
/** Sets the comment field for the FileEntry.
|
|
@param comment string with the new comment.
|
|
*/
|
|
virtual void setComment( const string &comment ) = 0 ;
|
|
/** Set the compressed size field of the entry.
|
|
@param size value to set the compressed size field of the entry to.
|
|
*/
|
|
virtual void setCompressedSize( uint32 size ) = 0 ;
|
|
/** Sets the crc field.
|
|
@param crc value to set the crc field to.
|
|
*/
|
|
virtual void setCrc( uint32 crc ) = 0 ;
|
|
/** Sets the extra field.
|
|
@param extra the extra field is set to this value.
|
|
*/
|
|
virtual void setExtra( const vector< unsigned char > &extra ) = 0 ;
|
|
/** Sets the storage method field for the entry.
|
|
@param method the method field is set to the specified value.
|
|
*/
|
|
virtual void setMethod( StorageMethod method ) = 0 ;
|
|
/** Sets the name field for the entry.
|
|
@param name the name field is set to the specified value.
|
|
*/
|
|
virtual void setName( const string &name ) = 0 ;
|
|
/** Sets the size field for the entry.
|
|
@param size the size field is set to this value.
|
|
*/
|
|
virtual void setSize( uint32 size ) = 0 ;
|
|
/** Sets the time field for the entry.
|
|
@param time the time field is set to the specified value.
|
|
*/
|
|
virtual void setTime( int time ) = 0 ;
|
|
|
|
/** Returns a human-readable string representation of the entry.
|
|
@return a human-readable string representation of the entry.
|
|
*/
|
|
virtual string toString() const = 0 ;
|
|
|
|
/** Create a heap allocated clone of the object this method is called for. The
|
|
caller is responsible for deallocating the clone when he is done with it.
|
|
@return A heap allocated copy of the object this method is called for.
|
|
*/
|
|
virtual FileEntry *clone() const = 0 ;
|
|
|
|
/** FileEntry destructor. */
|
|
virtual ~FileEntry() {}
|
|
|
|
// protected:
|
|
class MatchName ;
|
|
class MatchFileName ;
|
|
protected:
|
|
friend class SimpleSmartPointer< FileEntry > ;
|
|
friend class SimpleSmartPointer< const FileEntry > ;
|
|
void ref() const { _refcount.ref() ; }
|
|
unsigned int unref() const { return _refcount.unref() ; }
|
|
|
|
ReferenceCount< FileEntry > _refcount ;
|
|
};
|
|
|
|
/** Function object to be used with the STL find_if algorithm to
|
|
find a FileEntry in a container, which name (as obtained with
|
|
FileEntry::getName()) is identical to the name specified in the
|
|
MatchName constructor. */
|
|
class FileEntry::MatchName {
|
|
public:
|
|
explicit MatchName( const string &name ) : _name( name ) {}
|
|
bool operator() ( const ConstEntryPointer &entry ) {
|
|
return entry->getName() == _name ;
|
|
}
|
|
private:
|
|
string _name ;
|
|
};
|
|
|
|
/** Function object to be used with the STL find_if algorithm to
|
|
find a FileEntry in a container, which name (as obtained with
|
|
FileEntry::getFileName()) is identical to the name specified in the
|
|
MatchName constructor. */
|
|
class FileEntry::MatchFileName {
|
|
public:
|
|
explicit MatchFileName( const string &name ) : _name( name ) {}
|
|
bool operator() ( const ConstEntryPointer &entry ) {
|
|
return entry->getFileName() == _name ;
|
|
}
|
|
private:
|
|
string _name ;
|
|
};
|
|
|
|
BaseExport ostream &operator<< ( ostream &os, const FileEntry &entry ) ;
|
|
|
|
inline ostream &operator<< ( ostream &os, const ConstEntryPointer &entry ) {
|
|
os << *entry ;
|
|
return os ;
|
|
}
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
#endif
|
|
|
|
|
|
/** \file
|
|
Header file that defines FileEntry.
|
|
*/
|
|
|
|
/*
|
|
Zipios++ - a small C++ library that provides easy access to .zip files.
|
|
Copyright (C) 2000 Thomas Søndergaard
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|