00001 /* 00002 ----------------------------------------------------------------------------- 00003 This source file is part of OGRE 00004 (Object-oriented Graphics Rendering Engine) 00005 For the latest info, see http://www.ogre3d.org/ 00006 00007 Copyright (c) 2000-2006 Torus Knot Software Ltd 00008 Also see acknowledgements in Readme.html 00009 00010 This program is free software; you can redistribute it and/or modify it under 00011 the terms of the GNU Lesser General Public License as published by the Free Software 00012 Foundation; either version 2 of the License, or (at your option) any later 00013 version. 00014 00015 This program is distributed in the hope that it will be useful, but WITHOUT 00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 00018 00019 You should have received a copy of the GNU Lesser General Public License along with 00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple 00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to 00022 http://www.gnu.org/copyleft/lesser.txt. 00023 00024 You may alternatively use this source under the terms of a specific version of 00025 the OGRE Unrestricted License provided you have obtained such a license from 00026 Torus Knot Software Ltd. 00027 ----------------------------------------------------------------------------- 00028 */ 00029 #ifndef __Zip_H__ 00030 #define __Zip_H__ 00031 00032 #include "OgrePrerequisites.h" 00033 00034 #include "OgreArchive.h" 00035 #include "OgreArchiveFactory.h" 00036 00037 // Forward declaration for zziplib to avoid header file dependency. 00038 typedef struct zzip_dir ZZIP_DIR; 00039 typedef struct zzip_file ZZIP_FILE; 00040 00041 namespace Ogre { 00042 00049 class _OgreExport ZipArchive : public Archive 00050 { 00051 protected: 00053 ZZIP_DIR* mZzipDir; 00055 void checkZzipError(int zzipError, const String& operation) const; 00057 FileInfoList mFileList; 00058 public: 00059 ZipArchive(const String& name, const String& archType ); 00060 ~ZipArchive(); 00062 bool isCaseSensitive(void) const { return false; } 00063 00065 void load(); 00067 void unload(); 00068 00070 DataStreamPtr open(const String& filename) const; 00071 00073 StringVectorPtr list(bool recursive = true, bool dirs = false); 00074 00076 FileInfoListPtr listFileInfo(bool recursive = true, bool dirs = false); 00077 00079 StringVectorPtr find(const String& pattern, bool recursive = true, 00080 bool dirs = false); 00081 00083 FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true, 00084 bool dirs = false); 00085 00087 bool exists(const String& filename); 00088 00090 time_t getModifiedTime(const String& filename); 00091 }; 00092 00094 class _OgrePrivate ZipArchiveFactory : public ArchiveFactory 00095 { 00096 public: 00097 virtual ~ZipArchiveFactory() {} 00099 const String& getType(void) const; 00101 Archive *createInstance( const String& name ) 00102 { 00103 return OGRE_NEW ZipArchive(name, "Zip"); 00104 } 00106 void destroyInstance( Archive* arch) { OGRE_DELETE arch; } 00107 }; 00108 00110 class _OgrePrivate ZipDataStream : public DataStream 00111 { 00112 protected: 00113 ZZIP_FILE* mZzipFile; 00114 public: 00116 ZipDataStream(ZZIP_FILE* zzipFile, size_t uncompressedSize); 00118 ZipDataStream(const String& name, ZZIP_FILE* zzipFile, size_t uncompressedSize); 00119 ~ZipDataStream(); 00121 size_t read(void* buf, size_t count); 00123 void skip(long count); 00125 void seek( size_t pos ); 00127 size_t tell(void) const; 00129 bool eof(void) const; 00131 void close(void); 00132 00133 00134 }; 00135 00136 00137 } 00138 00139 #endif
Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Sep 27 22:02:26 2009