hackedteam/libmelter

View on GitHub
Melter.h

Summary

Maintainability
Test Coverage
/*
* 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_ */