Program Listing for File AbstractGraph.h
↰ Return to documentation for file (src/VALfiles/misc/AbstractGraph.h)
/************************************************************************
* Copyright 2008, Strathclyde Planning Group,
* Department of Computer and Information Sciences,
* University of Strathclyde, Glasgow, UK
* http://planning.cis.strath.ac.uk/
*
* Maria Fox, Richard Howey and Derek Long - VAL
* Stephen Cresswell - PDDL Parser
*
* This file is part of VAL, the PDDL validator.
*
* VAL is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* VAL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with VAL. If not, see <http://www.gnu.org/licenses/>.
*
************************************************************************/
#ifndef __ABSTRACTGRAPH
#define __ABSTRACTGRAPH
#include "HowAnalyser.h"
namespace VAL {
class AbstractProposition {
private:
extended_pred_symbol * eps;
public:
AbstractProposition(extended_pred_symbol * e) : eps(e)
{};
};
class AbstractAction {
private:
HWWAction * hww;
public:
AbstractAction(HWWAction * h) : hww(h)
{};
void write(ostream & o) const
{
if(hww){ o << *hww; } else {o << "Nil";};
};
};
inline ostream & operator <<(ostream & o, const AbstractAction & a)
{
a.write(o);
return o;
};
class AbstractGraph {
private:
vector<AbstractProposition *> factSpike;
vector<AbstractAction *> actionSpike;
vector<int> factLayerSizes;
vector<int> actionLayerSizes;
int layers;
vector<AbstractAction *> acts;
public:
AbstractGraph() : factLayerSizes(1,0), layers(0) {};
~AbstractGraph()
{
for(vector<AbstractProposition*>::iterator i = factSpike.begin();
i != factSpike.end();++i)
{
delete (*i);
};
for(vector<AbstractAction*>::iterator i = actionSpike.begin();
i != actionSpike.end();++i)
{
delete (*i);
};
};
void addInitialFact(extended_pred_symbol * eps)
{
factSpike.push_back(new AbstractProposition(eps));
++factLayerSizes[0];
};
void addAction(HWWAction * h)
{
acts.push_back(new AbstractAction(h));
cout << "Added action\n";
};
void develop()
{
factLayerSizes.push_back(0);
while(extend())
{
cout << "Extended a layer\n";
factLayerSizes.push_back(0);
addNewFacts();
};
cout << "built\n";
};
private:
void addNewFacts()
{};
bool extend()
{
bool change = false;
actionLayerSizes.push_back(0);
for(unsigned int i = 0;i < acts.size();++i)
{
bool b = newlyApplicable(acts[i]);
cout << "Acts: ";
if(acts[i])
{
cout << *acts[i];
}
else
{
cout << "Nil";
};
cout << " " << b << "\n";
if(acts[i] && b)
{
actionSpike.push_back(acts[i]);
acts[i] = 0;
++actionLayerSizes[layers];
change = true;
};
};
return change;
};
bool newlyApplicable(AbstractAction * a)
{
static int i = 0;
++i;
return i < 3;
};
};
};
#endif