libqxp::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...

## Public Member Functions
| MWAWInputStream (std::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
std::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)
| !
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
std::shared_ptr< MWAWInputStream > | getSubStreamByName (std::string const &name)
| return a new stream for a ole zone
std::shared_ptr< MWAWInputStream > | getSubStreamById (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
std::shared_ptr< MWAWInputStream > | getResourceForkStream ()
| returns the resource fork if find

## Static Public Member Functions
static std::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, std::shared_ptr< librevenge::RVNGInputStream > &dataInput, std::shared_ptr< librevenge::RVNGInputStream > &rsrcInput) const
| de MacMIME an input stream
bool | unsplitInternalMergeStream ()
| check if a stream is an internal merge stream

## Static Protected Member Functions
static uint8_t | readU8 (librevenge::RVNGInputStream *stream)
| internal function used to read a byte

## Protected Attributes
std::shared_ptr< librevenge::RVNGInputStream > | m_stream
| the initial input
long | m_streamSize
| the stream size
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
std::shared_ptr< MWAWInputStream > | m_resourceFork
| the resource fork
bool | m_inverseRead
| big or normal endian

## Private Member Functions
| MWAWInputStream (MWAWInputStream const &orig)=delete
MWAWInputStream & | operator= (MWAWInputStream const &orig)=delete

## 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() [1/3]

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

creates a stream with given endian

Parameters

  input | the given input
  inverted | must be set to true for pc doc and ole part and to false for mac doc

Referenced by get(), getSubStreamById(), getSubStreamByName(), MWAWInputStream(), operator=(), unBinHex(), unMacMIME(), unMacMIME(), unsplitInternalMergeStream(), and unzipStream().

## ◆ MWAWInputStream() [2/3]

libqxp::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

## ◆ ~MWAWInputStream()

libqxp::MWAWInputStream::~MWAWInputStream | ( |  | ) |

destructor

## ◆ MWAWInputStream() [3/3]

libqxp::MWAWInputStream::MWAWInputStream | ( | MWAWInputStream const & | orig | ) |
| private delete

## Member Function Documentation

## ◆ checkPosition()

bool libqxp::MWAWInputStream::checkPosition | ( | long | pos | ) | const
| inline

checks if a position is or not a valid file position

Referenced by unMacMIME().

## ◆ get()

std::shared_ptr< MWAWInputStream > libqxp::MWAWInputStream::get | ( | librevenge::RVNGBinaryData const & | data,
|  | bool | inverted )
| static

returns a new input stream corresponding to a librevenge::RVNGBinaryData

## ◆ getFinderInfo()

bool libqxp::MWAWInputStream::getFinderInfo | ( | std::string & | type,
|  | std::string & | creator ) const
| inline

returns the finder info type and creator (if known)

Referenced by libqxp::QXPMacFileParser::parse().

## ◆ getResourceForkStream()

std::shared_ptr< MWAWInputStream > libqxp::MWAWInputStream::getResourceForkStream | ( |  | ) |
| inline

returns the resource fork if find

Referenced by unBinHex().

## ◆ getSubStreamById()

std::shared_ptr< MWAWInputStream > libqxp::MWAWInputStream::getSubStreamById | ( | unsigned | id | ) |

return a new stream for a ole zone

## ◆ getSubStreamByName()

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

return a new stream for a ole zone

## ◆ hasDataFork()

bool libqxp::MWAWInputStream::hasDataFork | ( |  | ) | const
| inline

returns true if the data fork block exists

Referenced by isEnd(), libqxp::QXPMacFileParser::parse(), read(), readDataBlock(), readEndDataBlock(), seek(), tell(), unBinHex(), and unMacMIME().

## ◆ hasResourceFork()

bool libqxp::MWAWInputStream::hasResourceFork | ( |  | ) | const
| inline

returns true if the resource fork block exists

## ◆ input()

std::shared_ptr< librevenge::RVNGInputStream > libqxp::MWAWInputStream::input | ( |  | ) |
| inline

returns the basic librevenge::RVNGInputStream

Referenced by libqxp::QXPMacFileParser::parse().

## ◆ isEnd()

bool libqxp::MWAWInputStream::isEnd | ( |  | ) |

returns true if we are at the end of the section/file

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

## ◆ isStructured()

bool libqxp::MWAWInputStream::isStructured | ( |  | ) |

return true if the stream is ole

Referenced by unsplitInternalMergeStream(), and unzipStream().

## ◆ operator=()

MWAWInputStream & libqxp::MWAWInputStream::operator= | ( | MWAWInputStream const & | orig | ) |
| private delete

## ◆ popLimit()

void libqxp::MWAWInputStream::popLimit | ( |  | ) |
| inline

pops a section defined by pushLimit

## ◆ pushLimit()

void libqxp::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

## ◆ read()

const uint8_t * libqxp::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 unBinHex(), and unMacMIME().

## ◆ readDataBlock()

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

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

Referenced by readEndDataBlock().

## ◆ readDouble10()

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

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

## ◆ readDouble8()

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

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

## ◆ readDoubleReverted8()

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

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

## ◆ readEndDataBlock()

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

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

## ◆ readInverted()

bool libqxp::MWAWInputStream::readInverted | ( |  | ) | const
| inline

returns the endian mode (see constructor)

## ◆ readLong()

long libqxp::MWAWInputStream::readLong | ( | int | num | ) |

return a int8, int16, int32 readed from actualPos

Referenced by unBinHex().

## ◆ readU8()

uint8_t libqxp::MWAWInputStream::readU8 | ( | librevenge::RVNGInputStream * | stream | ) |
| static protected

internal function used to read a byte

Referenced by readULong(), and unBinHex().

## ◆ readULong() [1/2]

unsigned long libqxp::MWAWInputStream::readULong | ( | int | num | ) |
| inline

returns a uint8, uint16, uint32 readed from actualPos

Referenced by readDouble10(), readDouble8(), readDoubleReverted8(), readLong(), readULong(), readULong(), unBinHex(), and unMacMIME().

## ◆ readULong() [2/2]

unsigned long libqxp::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

## ◆ seek()

int libqxp::MWAWInputStream::seek | ( | long | offset,
|  | librevenge::RVNG_SEEK_TYPE | seekType )

seeks to a offset position, from actual, beginning or ending position

Returns
  0 if ok

See also
  pushLimit popLimit

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

## ◆ setReadInverted()

void libqxp::MWAWInputStream::setReadInverted | ( | bool | newVal | ) |
| inline

sets the endian mode

## ◆ size()

long libqxp::MWAWInputStream::size | ( |  | ) | const
| inline

returns the stream size

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

## ◆ subStreamCount()

unsigned libqxp::MWAWInputStream::subStreamCount | ( |  | ) |

returns the number of substream

## ◆ subStreamName()

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

returns the name of the i^th substream

## ◆ tell()

long libqxp::MWAWInputStream::tell | ( |  | ) |

returns actual offset position

Referenced by getSubStreamById(), getSubStreamByName(), readDataBlock(), readDouble10(), readDouble8(), readDoubleReverted8(), readEndDataBlock(), seek(), unMacMIME(), and updateStreamSize().

## ◆ unBinHex()

bool libqxp::MWAWInputStream::unBinHex | ( |  | ) |
| protected

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

Referenced by MWAWInputStream().

## ◆ unMacMIME() [1/2]

bool libqxp::MWAWInputStream::unMacMIME | ( |  | ) |
| protected

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

Referenced by MWAWInputStream(), and unMacMIME().

## ◆ unMacMIME() [2/2]

bool libqxp::MWAWInputStream::unMacMIME | ( | MWAWInputStream * | input,
|  | std::shared_ptr< librevenge::RVNGInputStream > & | dataInput,
|  | std::shared_ptr< librevenge::RVNGInputStream > & | rsrcInput ) const
| protected

de MacMIME an input stream

## ◆ unsplitInternalMergeStream()

bool libqxp::MWAWInputStream::unsplitInternalMergeStream | ( |  | ) |
| protected

check if a stream is an internal merge stream

Referenced by MWAWInputStream().

## ◆ unzipStream()

bool libqxp::MWAWInputStream::unzipStream | ( |  | ) |
| protected

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

Referenced by MWAWInputStream().

## ◆ updateStreamSize()

void libqxp::MWAWInputStream::updateStreamSize | ( |  | ) |
| protected

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

Referenced by MWAWInputStream(), and MWAWInputStream().

## Member Data Documentation

## ◆ m_fInfoCreator

std::string libqxp::MWAWInputStream::m_fInfoCreator
| mutable protected

finder info type

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

## ◆ m_fInfoType

std::string libqxp::MWAWInputStream::m_fInfoType
| mutable protected

finder info type

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

## ◆ m_inverseRead

bool libqxp::MWAWInputStream::m_inverseRead
| protected

big or normal endian

Referenced by getSubStreamById(), getSubStreamByName(), MWAWInputStream(), MWAWInputStream(), readInverted(), readULong(), setReadInverted(), and unsplitInternalMergeStream().

## ◆ m_prevLimits

std::vector<long> libqxp::MWAWInputStream::m_prevLimits
| protected

list of previous limits

Referenced by MWAWInputStream(), MWAWInputStream(), popLimit(), and pushLimit().

## ◆ m_readLimit

long libqxp::MWAWInputStream::m_readLimit
| protected

actual section limit (-1 if no limit)

Referenced by checkPosition(), isEnd(), MWAWInputStream(), MWAWInputStream(), popLimit(), pushLimit(), readDataBlock(), readDouble10(), readDouble8(), readDoubleReverted8(), readEndDataBlock(), and seek().

## ◆ m_resourceFork

std::shared_ptr<MWAWInputStream> libqxp::MWAWInputStream::m_resourceFork
| protected

the resource fork

Referenced by getResourceForkStream(), hasResourceFork(), MWAWInputStream(), MWAWInputStream(), unBinHex(), unMacMIME(), unsplitInternalMergeStream(), and unzipStream().

## ◆ m_stream

std::shared_ptr<librevenge::RVNGInputStream> libqxp::MWAWInputStream::m_stream
| protected

the initial input

Referenced by getSubStreamById(), getSubStreamByName(), hasDataFork(), input(), isEnd(), isStructured(), MWAWInputStream(), MWAWInputStream(), read(), readDataBlock(), readDouble10(), readDouble8(), readDoubleReverted8(), readULong(), seek(), subStreamCount(), subStreamName(), tell(), unBinHex(), unMacMIME(), unsplitInternalMergeStream(), unzipStream(), and updateStreamSize().

## ◆ m_streamSize

long libqxp::MWAWInputStream::m_streamSize
| protected

the stream size

Referenced by checkPosition(), MWAWInputStream(), MWAWInputStream(), pushLimit(), readDouble10(), readDouble8(), readDoubleReverted8(), seek(), size(), and updateStreamSize().

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

- QXPMacFileParser.cpp