Implemented Cell
getNeighbors() & getHazards()
This commit is contained in:
		
							parent
							
								
									049e6a4a95
								
							
						
					
					
						commit
						b360e34a4a
					
				
					 5 changed files with 62 additions and 11 deletions
				
			
		| 
						 | 
					@ -4,14 +4,50 @@
 | 
				
			||||||
#include "PrimImplikantCollection.h"
 | 
					#include "PrimImplikantCollection.h"
 | 
				
			||||||
#include "Cell.h"
 | 
					#include "Cell.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vector<Cell*> Cell::GetNeighbors()
 | 
					using namespace std;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern uint dimension;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Cell::refresh(PrimImplikantCollection* &globalPIC)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	vector<Cell*> neighbors;
 | 
						this->primImplikanten = globalPIC->primImplikantenAt(index);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vector<Cell*>* Cell::getNeighbors(vector<Cell*> &allCells)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						vector<Cell*>* neighbors = new vector<Cell*>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						uint j = 1;
 | 
				
			||||||
 | 
						for (unsigned char i = 0; i < dimension; i++)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							neighbors->push_back(allCells[this->index ^ j]);
 | 
				
			||||||
 | 
							j <<= 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	return neighbors;
 | 
						return neighbors;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vector<Cell*> Cell::GetHazards()
 | 
					vector<Cell*>* Cell::getHazards(vector<Cell*> &allCells)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	vector<Cell*> neighbors;
 | 
						vector<Cell*>* hazardous = new vector<Cell*>();
 | 
				
			||||||
	return neighbors;
 | 
						vector<Cell*>* neighbors = this->getNeighbors(allCells);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (vector<Cell*>::iterator neighbor = neighbors->begin(); neighbor < neighbors->end(); neighbor++)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if ((*neighbor)->value == false)
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
							if ((*neighbor)->hasOneOfThose(this->primImplikanten) == false)
 | 
				
			||||||
 | 
								hazardous->push_back(*neighbor);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						delete neighbors;
 | 
				
			||||||
 | 
						return hazardous;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool Cell::hasOneOfThose(PrimImplikantCollection &foreignPic)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						for (uint i = 0; i < foreignPic.size(); i++)
 | 
				
			||||||
 | 
							if (this->primImplikanten.contains(foreignPic[i]))
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
						return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -12,13 +12,15 @@ public:
 | 
				
			||||||
	bool value;
 | 
						bool value;
 | 
				
			||||||
	unsigned int index;
 | 
						unsigned int index;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vector<Cell*> GetNeighbors();			// returns numElements Cells
 | 
						vector<Cell*>* getNeighbors(vector<Cell*> &allCells);			// returns numElements Cells
 | 
				
			||||||
	vector<Cell*> GetHazards();				// returns the neighbor Cells which are hazardous
 | 
						vector<Cell*>* getHazards(vector<Cell*> &allCells);				// returns the neighbor Cells which are hazardous
 | 
				
			||||||
 | 
						bool hasOneOfThose(PrimImplikantCollection &foreignPIC);
 | 
				
			||||||
 | 
						void refresh(PrimImplikantCollection* &globalPIC);				// refreshes the local primImplikantCollection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Cell(unsigned int index, PrimImplikantCollection* &globalPIC)
 | 
						Cell(unsigned int index, PrimImplikantCollection* &globalPIC)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this->index = index;
 | 
							this->index = index;
 | 
				
			||||||
		this->primImplikanten = globalPIC->primImplikantenAt(index);
 | 
							this->refresh(globalPIC);
 | 
				
			||||||
		this->value = this->primImplikanten.size() > 0;
 | 
							this->value = this->primImplikanten.size() > 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,7 @@ class PrimImplikant
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	string name;
 | 
						string name;
 | 
				
			||||||
 | 
						uint id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	PrimImplikant(string input)
 | 
						PrimImplikant(string input)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,17 +13,20 @@ void PrimImplikantCollection::add(PrimImplikant* &PI)
 | 
				
			||||||
void PrimImplikantCollection::add(string input)
 | 
					void PrimImplikantCollection::add(string input)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	PrimImplikant* PI = new PrimImplikant(input);
 | 
						PrimImplikant* PI = new PrimImplikant(input);
 | 
				
			||||||
	PIVector.push_back(PI);
 | 
						PI->id = this->size();
 | 
				
			||||||
 | 
						this->add(PI);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void PrimImplikantCollection::add(uint input)
 | 
					void PrimImplikantCollection::add(uint input)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	PrimImplikant* PI = new PrimImplikant(input);
 | 
						PrimImplikant* PI = new PrimImplikant(input);
 | 
				
			||||||
	PIVector.push_back(PI);
 | 
						PI->id = this->size();
 | 
				
			||||||
 | 
						this->add(PI);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void PrimImplikantCollection::add(uint input1, uint input2)
 | 
					void PrimImplikantCollection::add(uint input1, uint input2)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	PrimImplikant* PI = new PrimImplikant(input1, input2);
 | 
						PrimImplikant* PI = new PrimImplikant(input1, input2);
 | 
				
			||||||
	PIVector.push_back(PI);
 | 
						PI->id = this->size();
 | 
				
			||||||
 | 
						this->add(PI);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool PrimImplikantCollection::valueAt(uint position)
 | 
					bool PrimImplikantCollection::valueAt(uint position)
 | 
				
			||||||
| 
						 | 
					@ -43,6 +46,14 @@ PrimImplikantCollection PrimImplikantCollection::primImplikantenAt(uint position
 | 
				
			||||||
	return pic;
 | 
						return pic;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool PrimImplikantCollection::contains(PrimImplikant* foreign)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						for (vector<PrimImplikant*>::iterator i = PIVector.begin(); i < PIVector.end(); i++)
 | 
				
			||||||
 | 
							if ((*i)->id == foreign->id)
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
						return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint PrimImplikantCollection::size()
 | 
					uint PrimImplikantCollection::size()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return this->PIVector.size();
 | 
						return this->PIVector.size();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,6 +17,7 @@ public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool valueAt(uint position);
 | 
						bool valueAt(uint position);
 | 
				
			||||||
	PrimImplikantCollection primImplikantenAt(uint position);
 | 
						PrimImplikantCollection primImplikantenAt(uint position);
 | 
				
			||||||
 | 
						bool contains(PrimImplikant* foreign);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void Dispose();
 | 
						void Dispose();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue