//---------------------------------------------------------------------------

#ifndef BoomAlgH
#define BoomAlgH
//---------------------------------------------------------------------------

class BoomOpts {
	friend class BoomAlg;
	private:
		unsigned int CD_FC;
		unsigned int iterations;
		unsigned int CD_mutations;
		bool CD_implcheck;
		IE_method IE;
		IR_method IR;
		unsigned int DF;

	public:
		void SetCD_FC( const unsigned int i ) { CD_FC = i; };
		void SetCD_mutations( const unsigned int i ) { CD_mutations = i; };
		void SetIterations ( const unsigned int i ) { iterations = i; };
		void SetIE ( const IE_method i ) { IE = i; };
		void SetIR ( const IR_method i ) { IR = i; };
		void SetDF ( const unsigned int i ) { DF = i; };

		BoomOpts(void);
		~BoomOpts(void) {};
};

class BoomAlg {
    private:
        PLA *source;				// source PLA. Must not be modified
		PLA *implpool;				// implicant pool
		PLA *FC_pool;
        PLA *result;				// minimization result
		BoomOpts options;

    public:
		BoomAlg(void);
        BoomAlg( PLA *_pla );		// _pla is the source
        ~BoomAlg(void);

		void SetOpts( const BoomOpts _opt ) { options = _opt; };
		PLA *Run(void);
};

#endif
