2008-07-11 16:51:25 +00:00
|
|
|
/*
|
|
|
|
* OutputBuffer.h - Part of the PeLib library.
|
|
|
|
*
|
|
|
|
* Copyright (c) 2004 - 2005 Sebastian Porst (webmaster@the-interweb.com)
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This software is licensed under the zlib/libpng License.
|
|
|
|
* For more details see http://www.opensource.org/licenses/zlib-license.php
|
|
|
|
* or the license information file (license.htm) in the root directory
|
|
|
|
* of PeLib.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef OUTPUTBUFFER_H
|
|
|
|
#define OUTPUTBUFFER_H
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
#include <iterator>
|
|
|
|
|
|
|
|
namespace PeLib
|
|
|
|
{
|
|
|
|
class OutputBuffer
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
std::vector<unsigned char>& m_vBuffer;
|
|
|
|
|
|
|
|
public:
|
|
|
|
OutputBuffer(std::vector<unsigned char>& vBuffer);
|
|
|
|
const unsigned char* data() const;
|
|
|
|
unsigned long size();
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
OutputBuffer& operator<<(const T& value)
|
|
|
|
{
|
|
|
|
const unsigned char* p = reinterpret_cast<const unsigned char*>(&value);
|
|
|
|
std::copy(p, p + sizeof(value), std::back_inserter(m_vBuffer));
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
void add(const char* lpBuffer, unsigned long ulSize);
|
|
|
|
void reset();
|
|
|
|
void resize(unsigned int uiSize);
|
|
|
|
void set(unsigned int uiPosition);
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
void update(unsigned long ulIndex, const T& value)
|
|
|
|
{
|
|
|
|
*(T*)(&m_vBuffer[ulIndex]) = value;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|