2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
20 * @brief This file is the header file of zip input
22 #ifndef DPL_ZIP_INPUT_H
23 #define DPL_ZIP_INPUT_H
25 #include <dpl/exception.h>
26 #include <dpl/noncopyable.h>
27 #include <dpl/abstract_input.h>
41 DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
42 DECLARE_EXCEPTION_TYPE(Base, OpenFailed)
43 DECLARE_EXCEPTION_TYPE(Base, ReadGlobalInfoFailed)
44 DECLARE_EXCEPTION_TYPE(Base, ReadGlobalCommentFailed)
45 DECLARE_EXCEPTION_TYPE(Base, SeekFileFailed)
46 DECLARE_EXCEPTION_TYPE(Base, FileInfoFailed)
47 DECLARE_EXCEPTION_TYPE(Base, OpenFileFailed)
48 DECLARE_EXCEPTION_TYPE(Base, ReadFileFailed)
51 typedef std::pair<size_t, size_t> FileHandle;
58 // File name and comment
63 off64_t compressedSize; //< compressed size
64 off64_t uncompressedSize; //< uncompressed size
75 FileInfo(const FileHandle &handleArg,
76 const std::string &nameArg,
77 const std::string &commentArg,
78 const off64_t &compressedSizeArg,
79 const off64_t &uncompressedSizeArg)
83 compressedSize(compressedSizeArg),
84 uncompressedSize(uncompressedSizeArg)
90 : public DPL::AbstractInput
95 friend class ZipInput;
96 File(class Device *device, FileHandle handle);
101 virtual DPL::BinaryQueueAutoPtr Read(size_t size);
105 class Device *m_device;
108 size_t m_numberOfFiles;
109 size_t m_globalCommentSize;
110 std::string m_globalComment;
112 // At least cache handles
113 typedef std::vector<FileInfo> FileInfoList;
114 FileInfoList m_fileInfos;
116 void ReadGlobalInfo(void *masterFile);
117 void ReadGlobalComment(void *masterFile);
118 void ReadInfos(void *masterFile);
121 typedef FileInfoList::const_iterator const_iterator;
122 typedef FileInfoList::const_reverse_iterator const_reverse_iterator;
123 typedef FileInfoList::size_type size_type;
127 * Open zip file from file
129 explicit ZipInput(const std::string &fileName);
137 const_iterator begin() const;
138 const_iterator end() const;
140 const_reverse_iterator rbegin() const;
141 const_reverse_iterator rend() const;
144 size_type size() const;
148 * Open a binary file for given file name
150 * @return file object
151 * @param[in] fileName Zip file name to open
152 * @exception std::bad_alloc Cannot allocate memory to hold additional data
153 * @exception SteamOpenFailed Cannot find file with given handle
154 * @see BinaryQueue::BufferDeleterFree
156 File *OpenFile(const std::string &fileName);
159 * Get archive global comment
161 * @return Global archive comment
163 const std::string &GetGlobalComment() const;
167 #endif // DPL_ZIP_INPUT_H