fixed buffer being released instead of discarded

This commit is contained in:
Martchus 2015-12-21 00:03:04 +01:00
parent fa52b09b68
commit 000eb92506
2 changed files with 22 additions and 7 deletions

View File

@ -26,7 +26,7 @@ public:
std::istream::pos_type size() const;
const std::unique_ptr<char[]> &buffer() const;
void makeBuffer() const;
void releaseBuffer();
void discardBuffer();
protected:
StreamDataBlock();
@ -80,11 +80,11 @@ inline const std::unique_ptr<char[]> &StreamDataBlock::buffer() const
}
/*!
* \brief Releases buffered data.
* \brief Discards buffered data.
*/
inline void StreamDataBlock::releaseBuffer()
inline void StreamDataBlock::discardBuffer()
{
m_buffer.release();
m_buffer.reset();
}
class LIB_EXPORT FileDataBlock : public StreamDataBlock

View File

@ -192,7 +192,7 @@ public:
void copyWithoutChilds(std::ostream &targetStream);
void copyEntirely(std::ostream &targetStream);
void makeBuffer();
void releaseBuffer();
void discardBuffer();
void copyBuffer(std::ostream &targetStream);
const std::unique_ptr<char[]> &buffer();
implementationType *denoteFirstChild(uint32 offset);
@ -816,6 +816,10 @@ void GenericFileElement<ImplementationType>::copyEntirely(std::ostream &targetSt
copyInternal(targetStream, startOffset(), totalSize());
}
/*!
* \brief Buffers the element (header and data).
* \remarks The element must have been parsed.
*/
template <class ImplementationType>
void GenericFileElement<ImplementationType>::makeBuffer()
{
@ -824,18 +828,29 @@ void GenericFileElement<ImplementationType>::makeBuffer()
container().stream().read(m_buffer.get(), totalSize());
}
/*!
* \brief Discards buffered data.
*/
template <class ImplementationType>
inline void GenericFileElement<ImplementationType>::releaseBuffer()
inline void GenericFileElement<ImplementationType>::discardBuffer()
{
m_buffer.release();
m_buffer.reset();
}
/*!
* \brief Copies buffered data to \a targetStream.
* \remarks Data must have been buffered using the makeBuffer() method.
*/
template <class ImplementationType>
inline void GenericFileElement<ImplementationType>::copyBuffer(std::ostream &targetStream)
{
targetStream.write(m_buffer.get(), totalSize());
}
/*!
* \brief Returns buffered data. The returned array is totalSize() bytes long.
* \remarks Data must have been buffered using the makeBuffer() method.
*/
template <class ImplementationType>
inline const std::unique_ptr<char[]> &GenericFileElement<ImplementationType>::buffer()
{