Fixed bugs, fixed sorting
Binär -> Gray = X ^ X/2 Gray -> Binär = n-1 times X ^ X/2
This commit is contained in:
		
							parent
							
								
									827043ab3e
								
							
						
					
					
						commit
						9ca02c9100
					
				
					 1 changed files with 16 additions and 10 deletions
				
			
		| 
						 | 
					@ -3,10 +3,12 @@
 | 
				
			||||||
#include <algorithm>
 | 
					#include <algorithm>
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
#include "PrimImplikant.h"
 | 
					#include "PrimImplikant.h"
 | 
				
			||||||
#include "Implikant_localisation.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern uint dimension;
 | 
				
			||||||
 | 
					extern uint numElements;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool PrimImplikant::valueAt(uint pos) {
 | 
					bool PrimImplikant::valueAt(uint pos) {
 | 
				
			||||||
	for (vector<uint>::iterator i = elements.begin(); i < elements.end(); ++i)
 | 
						for (vector<uint>::iterator i = elements.begin(); i < elements.end(); ++i)
 | 
				
			||||||
		if (*i == pos)
 | 
							if (*i == pos)
 | 
				
			||||||
| 
						 | 
					@ -42,30 +44,34 @@ void PrimImplikant::parser(string input) {  // Analyser
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	elements.push_back(implikant);
 | 
						elements.push_back(implikant);
 | 
				
			||||||
	I_Vector.push_back(new Implikant_localisation(implikant));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void PrimImplikant::sort()
 | 
					void PrimImplikant::sort()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	sort(this->elements.begin(), this->elements.end(), PrimImplikant::compareGray);
 | 
						std::sort(this->elements.begin(), this->elements.end(), &PrimImplikant::compareGray);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool PrimImplikant::compareGray(uint &a, uint &b)
 | 
					bool PrimImplikant::compareGray(uint a, uint b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (a ^ (a/2)) < (b ^ (b/2));
 | 
						for (uint i = 1; i < dimension; i++)
 | 
				
			||||||
 | 
							a ^= a / 2;		// convert a from gray to binary
 | 
				
			||||||
 | 
						for (uint i = 1; i < dimension; i++)
 | 
				
			||||||
 | 
							b ^= b / 2;		// convert b from gray to binary
 | 
				
			||||||
 | 
						return a < b;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void PrimImplikant::makeLocations()
 | 
					void PrimImplikant::makeLocations()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	this->sort();
 | 
						this->sort();
 | 
				
			||||||
	this->locations = new vector<KV_PiEleLoc*>();
 | 
						this->_locations = new vector<KV_PiEleLoc*>();
 | 
				
			||||||
 | 
						this->_locations->resize(this->elements.size());
 | 
				
			||||||
	for (uint i = 0; i < this->elements.size(); i++)
 | 
						for (uint i = 0; i < this->elements.size(); i++)
 | 
				
			||||||
		this->locations.push_back(new KV_PiEleLoc(this->elements[i]));
 | 
							(*this->_locations)[i] = new KV_PiEleLoc(this->elements[i]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vector<KV_PiEleLoc*>* locations()
 | 
					vector<KV_PiEleLoc*>* PrimImplikant::locations()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (this->locations == NULL)
 | 
						if (this->_locations == NULL)
 | 
				
			||||||
		this->makeLocations();
 | 
							this->makeLocations();
 | 
				
			||||||
	return this->locations;
 | 
						return this->_locations;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in a new issue