MWAWInputStream Class Reference

Internal class used to read the file stream Internal class used to read the file stream, this class adds some usefull functions to the basic librevenge::RVNGInputStream: More...

#include <MWAWInputStream.hxx>

List of all members.

Public Member Functions

 MWAWInputStream (shared_ptr< librevenge::RVNGInputStream > input, bool inverted)
 creates a stream with given endian
 MWAWInputStream (librevenge::RVNGInputStream *input, bool inverted, bool checkCompression=false)
 creates a stream with given endian from an existing input
 ~MWAWInputStream ()
 destructor
shared_ptr
< librevenge::RVNGInputStream > 
input ()
 returns the basic librevenge::RVNGInputStream
bool readInverted () const
 returns the endian mode (see constructor)
void setReadInverted (bool newVal)
 sets the endian mode
int seek (long offset, librevenge::RVNG_SEEK_TYPE seekType)
 seeks to a offset position, from actual, beginning or ending position
long tell ()
 returns actual offset position
long size () const
 returns the stream size
bool checkPosition (long pos) const
 checks if a position is or not a valid file position
bool isEnd ()
 returns true if we are at the end of the section/file
void pushLimit (long newLimit)
 defines a new section in the file (from actualPos to newLimit) next call of seek, tell, atEos, ... will be restrained to this section
void popLimit ()
 pops a section defined by pushLimit
unsigned long readULong (int num)
 returns a uint8, uint16, uint32 readed from actualPos
long readLong (int num)
 return a int8, int16, int32 readed from actualPos
bool readDouble8 (double &res, bool &isNotANumber)
 try to read a double of size 8: 1.5 bytes exponent, 6.5 bytes mantisse
bool readDoubleReverted8 (double &res, bool &isNotANumber)
 try to read a double of size 8: 6.5 bytes mantisse, 1.5 bytes exponent
bool readDouble10 (double &res, bool &isNotANumber)
 try to read a double of size 10: 2 bytes exponent, 8 bytes mantisse
const uint8_t * read (size_t numBytes, unsigned long &numBytesRead)
 ! reads numbytes data, WITHOUT using any endian or section consideration
bool readDataBlock (long size, librevenge::RVNGBinaryData &data)
 reads a librevenge::RVNGBinaryData with a given size in the actual section/file
bool readEndDataBlock (librevenge::RVNGBinaryData &data)
 reads a librevenge::RVNGBinaryData from actPos to the end of the section/file
bool isStructured ()
 return true if the stream is ole
unsigned subStreamCount ()
 returns the number of substream
std::string subStreamName (unsigned id)
 returns the name of the i^th substream
shared_ptr< MWAWInputStreamgetSubStreamByName (std::string const &name)
 return a new stream for a ole zone
shared_ptr< MWAWInputStreamgetSubStreamById (unsigned id)
 return a new stream for a ole zone
bool getFinderInfo (std::string &type, std::string &creator) const
 returns the finder info type and creator (if known)
bool hasDataFork () const
 returns true if the data fork block exists
bool hasResourceFork () const
 returns true if the resource fork block exists
shared_ptr< MWAWInputStreamgetResourceForkStream ()
 returns the resource fork if find

Static Public Member Functions

static shared_ptr
< MWAWInputStream
get (librevenge::RVNGBinaryData const &data, bool inverted)
 returns a new input stream corresponding to a librevenge::RVNGBinaryData
static unsigned long readULong (librevenge::RVNGInputStream *stream, int num, unsigned long a, bool inverseRead)
 internal function used to read num byte,

Protected Member Functions

void updateStreamSize ()
 update the stream size ( must be called in the constructor )
bool unBinHex ()
 unbinhex the data in the file is a BinHex 4.0 file of a mac file
bool unzipStream ()
 unzip the data in the file is a zip file of a mac file
bool unMacMIME ()
 check if some stream are in MacMIME format, if so de MacMIME
bool unMacMIME (MWAWInputStream *input, shared_ptr< librevenge::RVNGInputStream > &dataInput, shared_ptr< librevenge::RVNGInputStream > &rsrcInput) const
 de MacMIME an input stream

Static Protected Member Functions

static uint8_t readU8 (librevenge::RVNGInputStream *stream)
 internal function used to read a byte

Protected Attributes

shared_ptr
< librevenge::RVNGInputStream > 
m_stream
 the initial input
long m_streamSize
 the stream size
bool m_inverseRead
 big or normal endian
long m_readLimit
 actual section limit (-1 if no limit)
std::vector< long > m_prevLimits
 list of previous limits
std::string m_fInfoType
 finder info type
std::string m_fInfoCreator
 finder info type
shared_ptr< MWAWInputStreamm_resourceFork
 the resource fork

Private Member Functions

 MWAWInputStream (MWAWInputStream const &orig)
MWAWInputStreamoperator= (MWAWInputStream const &orig)

Detailed Description

Internal class used to read the file stream Internal class used to read the file stream, this class adds some usefull functions to the basic librevenge::RVNGInputStream:

  • read number (int8, int16, int32) in low or end endian
  • selection of a section of a stream
  • read block of data
  • interface with modified librevenge::RVNGOLEStream

Constructor & Destructor Documentation

MWAWInputStream::MWAWInputStream ( shared_ptr< librevenge::RVNGInputStream >  input,
bool  inverted 
)

creates a stream with given endian

Parameters:
inputthe given input
invertedmust be set to true for pc doc and ole part and to false for mac doc

Referenced by get(), getSubStreamById(), getSubStreamByName(), unBinHex(), unMacMIME(), and unzipStream().

MWAWInputStream::MWAWInputStream ( librevenge::RVNGInputStream *  input,
bool  inverted,
bool  checkCompression = false 
)

creates a stream with given endian from an existing input

Note: this functions does not delete input


Member Function Documentation

bool MWAWInputStream::checkPosition ( long  pos) const [inline]

checks if a position is or not a valid file position

Referenced by libmwaw_applepict1::ColorTable::read(), and libmwaw_applepict1::OpCode::readText().

bool MWAWInputStream::getFinderInfo ( std::string &  type,
std::string &  creator 
) const [inline]

returns the finder info type and creator (if known)

returns the resource fork if find

Referenced by unBinHex().

shared_ptr< MWAWInputStream > MWAWInputStream::getSubStreamById ( unsigned  id)

return a new stream for a ole zone

shared_ptr< MWAWInputStream > MWAWInputStream::getSubStreamByName ( std::string const &  name)

return a new stream for a ole zone

bool MWAWInputStream::hasDataFork ( ) const [inline]

returns true if the data fork block exists

Referenced by isEnd(), read(), readDataBlock(), readEndDataBlock(), seek(), tell(), unBinHex(), and unMacMIME().

bool MWAWInputStream::hasResourceFork ( ) const [inline]

returns true if the resource fork block exists

shared_ptr<librevenge::RVNGInputStream> MWAWInputStream::input ( ) [inline]

returns the basic librevenge::RVNGInputStream

return true if the stream is ole

Referenced by unzipStream().

MWAWInputStream& MWAWInputStream::operator= ( MWAWInputStream const &  orig) [private]
void MWAWInputStream::popLimit ( ) [inline]

pops a section defined by pushLimit

void MWAWInputStream::pushLimit ( long  newLimit) [inline]

defines a new section in the file (from actualPos to newLimit) next call of seek, tell, atEos, ... will be restrained to this section

const uint8_t * MWAWInputStream::read ( size_t  numBytes,
unsigned long &  numBytesRead 
)

! reads numbytes data, WITHOUT using any endian or section consideration

Returns:
a pointer to the read elements

Referenced by libmwaw_applepict1::Bitmap::readBitmapData(), libmwaw_applepict1::Pixmap::readPixmapData(), unBinHex(), and unMacMIME().

bool MWAWInputStream::readDataBlock ( long  size,
librevenge::RVNGBinaryData &  data 
)

reads a librevenge::RVNGBinaryData with a given size in the actual section/file

Referenced by readEndDataBlock().

bool MWAWInputStream::readDouble10 ( double &  res,
bool &  isNotANumber 
)

try to read a double of size 10: 2 bytes exponent, 8 bytes mantisse

bool MWAWInputStream::readDouble8 ( double &  res,
bool &  isNotANumber 
)

try to read a double of size 8: 1.5 bytes exponent, 6.5 bytes mantisse

bool MWAWInputStream::readDoubleReverted8 ( double &  res,
bool &  isNotANumber 
)

try to read a double of size 8: 6.5 bytes mantisse, 1.5 bytes exponent

bool MWAWInputStream::readEndDataBlock ( librevenge::RVNGBinaryData &  data)

reads a librevenge::RVNGBinaryData from actPos to the end of the section/file

bool MWAWInputStream::readInverted ( ) const [inline]

returns the endian mode (see constructor)

uint8_t MWAWInputStream::readU8 ( librevenge::RVNGInputStream *  stream) [static, protected]

internal function used to read a byte

Referenced by readULong(), and unBinHex().

unsigned long MWAWInputStream::readULong ( librevenge::RVNGInputStream *  stream,
int  num,
unsigned long  a,
bool  inverseRead 
) [static]

internal function used to read num byte,

  • where a is the previous read data
void MWAWInputStream::setReadInverted ( bool  newVal) [inline]

sets the endian mode

long MWAWInputStream::size ( ) const [inline]

returns the stream size

Referenced by isEnd(), readDataBlock(), readEndDataBlock(), seek(), unBinHex(), and unMacMIME().

returns the number of substream

std::string MWAWInputStream::subStreamName ( unsigned  id)

returns the name of the i^th substream

bool MWAWInputStream::unBinHex ( ) [protected]

unbinhex the data in the file is a BinHex 4.0 file of a mac file

Referenced by MWAWInputStream().

bool MWAWInputStream::unMacMIME ( ) [protected]

check if some stream are in MacMIME format, if so de MacMIME

Referenced by MWAWInputStream().

bool MWAWInputStream::unMacMIME ( MWAWInputStream input,
shared_ptr< librevenge::RVNGInputStream > &  dataInput,
shared_ptr< librevenge::RVNGInputStream > &  rsrcInput 
) const [protected]

de MacMIME an input stream

bool MWAWInputStream::unzipStream ( ) [protected]

unzip the data in the file is a zip file of a mac file

Referenced by MWAWInputStream().

void MWAWInputStream::updateStreamSize ( ) [protected]

update the stream size ( must be called in the constructor )

Referenced by MWAWInputStream().


Member Data Documentation

std::string MWAWInputStream::m_fInfoCreator [mutable, protected]

finder info type

Referenced by getFinderInfo(), unBinHex(), and unMacMIME().

std::string MWAWInputStream::m_fInfoType [mutable, protected]

finder info type

Referenced by getFinderInfo(), unBinHex(), and unMacMIME().

std::vector<long> MWAWInputStream::m_prevLimits [protected]

list of previous limits

Referenced by popLimit(), and pushLimit().


The documentation for this class was generated from the following files: