//------------------------------------------------------------------------------
/*
    Copyright (c) 2011-2013, OpenCoin, Inc.
*/
//==============================================================================

#ifndef RIPPLE_IFEEVOTE_H
#define RIPPLE_IFEEVOTE_H

/** Manager to process fee votes.
*/
class IFeeVote
{
public:
    /** Create a new fee vote manager.

        @param targetBaseFee
        @param targetReserveBase
        @param targetReserveIncrement
    */
    static IFeeVote* New (uint64 targetBaseFee,
                          uint32 targetReserveBase,
                          uint32 targetReserveIncrement);

    virtual ~IFeeVote () { }

    /** Add local fee preference to validation.

        @param lastClosedLedger
        @param baseValidation
    */
    virtual void doValidation (Ledger::ref lastClosedLedger,
                               STObject& baseValidation) = 0;

    /** Cast our local vote on the fee.

        @param lastClosedLedger
        @param initialPosition
    */
    virtual void doVoting (Ledger::ref lastClosedLedger,
                           SHAMap::ref initialPosition) = 0;
};

#endif
