Exemple #1
0
bool MPI_Base :: MakeAssignsFromMasks( unsigned *full_mask, 
									   unsigned *part_mask, 
									   unsigned *mask_value,
									   vec< vec<Lit> > &dummy_vec )
{
// for predict with minisat2.2. convert masks to vector of Literals
	unsigned variate_vars_count = 0;
	full_mask_var_count = 0;
	for ( unsigned i = 0; i < FULL_MASK_LEN; i++ ) {
		variate_vars_count  += BitCount( full_mask[i] ^ part_mask[i] );
		full_mask_var_count += BitCount( full_mask[i] );
	}
	
	// determine count of assumptions and lenght of every one
	int problems_count = 1 << variate_vars_count;
	dummy_vec.resize( problems_count );
	for( int i=0; i < dummy_vec.size(); ++i )
		dummy_vec[i].resize( full_mask_var_count );

	unsigned mask, range_mask_ind;
	int range_mask;
	unsigned index;
	int cur_var_ind;
	bool IsPositiveLiteral, IsAddingLiteral;

	for ( int lint = 0; lint < problems_count; lint++ ) {
		range_mask = 1;
		range_mask_ind = 1;
		index = 0;
		for ( unsigned i = 0; i < FULL_MASK_LEN; i++ ) {
			for ( unsigned j = 0; j < UINT_LEN; j++ ) {
				mask = ( 1 << j );
				cur_var_ind = i * UINT_LEN + j;
				IsAddingLiteral = false;
				if ( part_mask[i] & mask ) { // one common vector send by control process
					IsPositiveLiteral = ( mask_value[i] & mask ) ? true : false;
					IsAddingLiteral = true;
				}
				else if ( full_mask[i] & mask ) { // set of vectors
					IsPositiveLiteral = ( lint & range_mask ) ? true : false;
					range_mask = 1 << range_mask_ind;
					range_mask_ind++;
					IsAddingLiteral = true;
				}
				if ( !IsAddingLiteral ) continue;
				dummy_vec[lint][index++] = IsPositiveLiteral ? mkLit( cur_var_ind ) : ~mkLit( cur_var_ind );
			}
		}
	}
	return true;
}
Exemple #2
0
inline Lit  mkNegLit	(Atom var) 	{ return mkLit(var, true); }
Exemple #3
0
inline Lit  mkPosLit	(Atom var) 	{ return mkLit(var, false); }