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