Implemented Cell

getNeighbors() & getHazards()
This commit is contained in:
Jonny007-MKD 2013-11-25 07:49:02 +01:00
parent 049e6a4a95
commit b360e34a4a
5 changed files with 62 additions and 11 deletions

View file

@ -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;
} }

View file

@ -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;
} }

View file

@ -10,6 +10,7 @@ class PrimImplikant
{ {
public: public:
string name; string name;
uint id;
PrimImplikant(string input) PrimImplikant(string input)
{ {

View file

@ -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();

View file

@ -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();