#ifndef ReduceH
#define ReduceH
//---------------------------------------------------------------------------

typedef enum {no_IR, fast_IR, multiple_IR, exhaustive_IR} IR_method;

class Reduce { 
	private:
        PLA *source;                 // source PLA. Must not be modified
        PLA *implpool;              // implicant pool. Here Expand feeds the result

          // Reduce parameters

        IR_method method;

        void FastReduce(void);
        void MultipleReduce(void);
        void ExhaustiveReduce(void);
		
		int NewOutput( const Term &t );
        
    public:
        Reduce( PLA *_source, PLA *_implpool );
		~Reduce(void) {};
        void Run(void);

		void SetMethod( const IR_method m ) { method = m; };
};

#endif
