Melter.h
/*
* Melter.h
*
* Created on: Oct 4, 2010
* Author: daniele
*/
#ifndef MELTER_H_
#define MELTER_H_
#include "BufferObserver.h"
#include "prototypes.h"
class Chunk;
class IOManager;
class Melter : public ::prototype::BufferObserver
{
public:
/**
* Create a new Melter using the specified parser e mangler.
* @param parser
* @param mangler
*/
Melter(::prototype::Parser& parser, ::prototype::Mangler& mangler);
virtual ~Melter();
/**
*
*/
void update();
/**
*
*/
bool isDefective();
/**
* Set defective state of Melter. Default argument is true.
* When in defective state, Melter deregisters itself as observer of the input buffer, and
* writes are sent directly to output buffer.
* @param state true to enable defetive state.
*/
void setDefective(bool state = true);
/**
* Feed new data for the parser/mangler to process.
* @param data pointer to buffer containing data to be fed.
* @param len number of bytes of data in buffer.
* @return number of bytes written.
*/
std::size_t write( char const * data, std::size_t len );
/**
* Feed a chunk for the parser/mangler to process.
* @param chunk chunk of data to append.
* @return number of bytes written.
*/
std::size_t write( Chunk &chunk );
/**
* Check if buffer is empty.
* @return true if empty, false otherwise.
*/
bool empty();
/**
* Gets any available output.
* @return a chunk of data.
*/
Chunk read();
private:
IOManager* _io;
::prototype::Parser& _parser;
::prototype::Mangler& _mangler;
bool _defective;
};
#endif /* MELTER_H_ */