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

#ifndef CoverH
#define CoverH
//---------------------------------------------------------------------------

class Cover {
    private:
        PLA *source;                 // source PLA. Must not be modified
        PLA *implpool;              // implicant pool. Here Cover processes the pool

    public:
        Cover( PLA *_source, PLA *_implpool );
        ~Cover(void) {};

        void GenerateOM(void);			// Generates OM values in the implicant pool (only from void "~" values)
		void RemoveAbsorbedByCover(void);					// removes absorbed terms by comparing their covers
		void GenerateCoverVector( Term &t );
		void GenerateCoverVectors(void);

		PLA *Run(void);							// Runs the CP. Returns new PLA as a solution
		void Sparse_output( PLA *pla );		// Removes unnecessary 1's from the output matrix
};
#endif
