00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 00002 /* 00003 * This file is part of the libe-book project. 00004 * 00005 * This Source Code Form is subject to the terms of the Mozilla Public 00006 * License, v. 2.0. If a copy of the MPL was not distributed with this 00007 * For further information visit http://libebook.sourceforge.net 00008 */ 00009 00010 #ifndef IMPLZSSSTREAM_H_INCLUDED 00011 #define IMPLZSSSTREAM_H_INCLUDED 00012 00013 #include <boost/scoped_ptr.hpp> 00014 00015 #include <librevenge-stream/librevenge-stream.h> 00016 00017 namespace libebook 00018 { 00019 00020 class IMPLZSSStream : public librevenge::RVNGInputStream 00021 { 00022 // disable copying 00023 IMPLZSSStream(const IMPLZSSStream &other); 00024 IMPLZSSStream &operator=(const IMPLZSSStream &other); 00025 00026 public: 00027 struct Configuration 00028 { 00029 unsigned offsetBits; 00030 unsigned lengthBits; 00031 unsigned uncompressedLength; 00032 unsigned fillPos; 00033 char fillChar; 00034 bool allowOverflow; 00035 bool bigEndian; 00036 00037 Configuration(); 00038 }; 00039 00040 public: 00041 explicit IMPLZSSStream(librevenge::RVNGInputStream *stream, const Configuration &configuration = Configuration()); 00042 virtual ~IMPLZSSStream(); 00043 00044 virtual bool isStructured(); 00045 virtual unsigned subStreamCount(); 00046 virtual const char *subStreamName(unsigned id); 00047 virtual bool existsSubStream(const char *name); 00048 virtual librevenge::RVNGInputStream *getSubStreamByName(const char *name); 00049 virtual RVNGInputStream *getSubStreamById(unsigned id); 00050 00051 virtual const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead); 00052 virtual int seek(long offset, librevenge::RVNG_SEEK_TYPE seekType); 00053 virtual long tell(); 00054 virtual bool isEnd(); 00055 00056 private: 00057 boost::scoped_ptr<librevenge::RVNGInputStream> m_stream; 00058 }; 00059 00060 } 00061 00062 #endif // IMPLZSSSTREAM_H_INCLUDED 00063 00064 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */