hackedteam/libmelter

View on GitHub
prototypes.h

Summary

Maintainability
Test Coverage
/* 
* File:   interfaces.h
* Author: daniele
*
* Created on November 3, 2010, 12:25 PM
*/

#ifndef INTERFACES_H
#define    INTERFACES_H

#include <string>
#include <boost/utility.hpp>
#include "BufferDescriptor.h"

class IOBuffer;
class IOManager;
class Chunk;
class BufferObserver;

namespace prototype {

    class BufferObserver : boost::noncopyable
    {
    public:
        virtual ~BufferObserver() {}

        /**
        * Function called each time new data will be available in the observed buffer.
        */
        virtual void update() = 0;
    };

    class IOOperation : boost::noncopyable {
    public:
        virtual ~IOOperation() {}
        virtual void execute( IOManager* io ) = 0;
    };

    class Parser {
    public:
        virtual ~Parser() {}

        /**
        * Call the first action registered.
        *
        * @param chunk data on which the action will operate.
        * @return return true if action is completed, false if reparsing needed.
        */
        virtual bool call( Chunk& chunk ) = 0;

        /**
        * Returns a tag identifying the current action.
        * @return a string.
        */
        virtual std::string tag() = 0;

        /**
        * Returns a descriptor identifying the current action.
        * @return a BufferDescriptor.
        */
        virtual BufferDescriptor descriptor() = 0;

        /**
        * Removes the action described by descriptor from the queue.
        * @param descriptor a descriptor identifying the action.
        */
        virtual void expire_action() = 0;

        /**
        * Returns the number of registered actions
        * @return a std::size_t
        */
        virtual std::size_t num_registered_actions() = 0;

        virtual bool is_defective() = 0;
    };

    class Mangler {
    public:
        virtual ~Mangler() {}

        /**
        * Calls the current managler operation, if any available for the specified tag, on the selected chunk.
        * @param io a reference to an IOManager object.
        * @param tag a tag identifying the managling operation to be run.
        * @param chunk a reference to a Chunk.
        * @return true if the action is expired and can be unregistered
        */
        virtual bool call( IOManager& io, std::string tag, Chunk& chunk ) = 0;
    };

} // namespace

#endif    /* INTERFACES_H */