#pragma once

#ifndef PLA_operationsH
#define PLA_operationsH

class PLA;

class PLA_op {

	public:
		//PLA_op() {};
		//~PLA_op() {};

		PLA *Sharp( const Term& t1, const Term& t2 );		// returns t1 # t2
		SoPLA *Sharp( const Cube& t1, const Cube& t2 ); // returns t1 # t2
		PLA *Sharp( const PLA &pla, const Term &t );				// returns PLA obtained as pla # t. New PLA is generated
		SoPLA *Sharp( const SoPLA &pla, const Cube &t );
		PLA *Sharp( const PLA &pla1, const PLA &pla2 );			// Returns PLA obtained as pla1 # pla2. New PLA is generated
		SoPLA *Sharp( const SoPLA &pla1, const SoPLA &pla2 );

		PLA *Sharp_Complement( const PLA &pla );		//	Returns a complement of a PLA, computed by Sharp
		SoPLA *Sharp_Complement( const SoPLA &pla );

};

#endif
