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 "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;
}
vector<Cell*> Cell::GetHazards()
vector<Cell*>* Cell::getHazards(vector<Cell*> &allCells)
{
vector<Cell*> neighbors;
return neighbors;
vector<Cell*>* hazardous = new vector<Cell*>();
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;
unsigned int index;
vector<Cell*> GetNeighbors(); // returns numElements Cells
vector<Cell*> GetHazards(); // returns the neighbor Cells which are hazardous
vector<Cell*>* getNeighbors(vector<Cell*> &allCells); // returns numElements Cells
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)
{
this->index = index;
this->primImplikanten = globalPIC->primImplikantenAt(index);
this->refresh(globalPIC);
this->value = this->primImplikanten.size() > 0;
}

View File

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

View File

@ -13,17 +13,20 @@ void PrimImplikantCollection::add(PrimImplikant* &PI)
void PrimImplikantCollection::add(string input)
{
PrimImplikant* PI = new PrimImplikant(input);
PIVector.push_back(PI);
PI->id = this->size();
this->add(PI);
}
void PrimImplikantCollection::add(uint input)
{
PrimImplikant* PI = new PrimImplikant(input);
PIVector.push_back(PI);
PI->id = this->size();
this->add(PI);
}
void PrimImplikantCollection::add(uint input1, uint input2)
{
PrimImplikant* PI = new PrimImplikant(input1, input2);
PIVector.push_back(PI);
PI->id = this->size();
this->add(PI);
}
bool PrimImplikantCollection::valueAt(uint position)
@ -43,6 +46,14 @@ PrimImplikantCollection PrimImplikantCollection::primImplikantenAt(uint position
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()
{
return this->PIVector.size();

View File

@ -17,6 +17,7 @@ public:
bool valueAt(uint position);
PrimImplikantCollection primImplikantenAt(uint position);
bool contains(PrimImplikant* foreign);
void Dispose();