.. _program_listing_file_src_VALfiles_Environment.h: Program Listing for File Environment.h ====================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/VALfiles/Environment.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp /************************************************************************ * 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 . * ************************************************************************/ /*----------------------------------------------------------------------------- VAL - The Automatic Plan Validator for PDDL+ $Date: 2009-02-05 10:50:12 $ $Revision: 1.2 $ Maria Fox, Richard Howey and Derek Long - PDDL+ and VAL Stephen Cresswell - PDDL Parser maria.fox@cis.strath.ac.uk derek.long@cis.strath.ac.uk stephen.cresswell@cis.strath.ac.uk richard.howey@cis.strath.ac.uk By releasing this code we imply no warranty as to its reliability and its use is entirely at your own risk. Strathclyde Planning Group http://planning.cis.strath.ac.uk ----------------------------------------------------------------------------*/ #include #include namespace VAL { class var_symbol; class const_symbol; class Validator; }; //#undef vector //#undef map using std::map; using std::vector; #ifndef __MYENVIRONMENT #define __MYENVIRONMENT //#define vector std::vector namespace VAL { template bool operator != (T & t1,T & t2) {return ! (t1==t2);}; struct Environment : public map { static map > copies; double duration; Environment * copy(Validator * v) const { Environment * e = new Environment(*this); copies[v].push_back(e); //cout << "Copy of "<::iterator i = copies[v].begin();i != copies[v].end();++i) delete *i; copies[v].clear(); //cout << "Deleting the copies of enviroments here!\\\\\n"; }; }; template struct EnvironmentParameterIterator { Environment * env; TI pi; EnvironmentParameterIterator(Environment * f,TI p) : env(f), pi(p) {}; // Having to cast the const is not good...currently we are forced to do it in order // to interact with Cascader, but should look at fixing it. const_symbol * operator*() { if(const_symbol * s = const_cast(dynamic_cast(*pi))) { return s; }; return const_cast((*env)[dynamic_cast(*pi)]); }; EnvironmentParameterIterator & operator++() { ++pi; return *this; }; bool operator==(const EnvironmentParameterIterator & li) const { return pi==li.pi; }; bool operator!=(const EnvironmentParameterIterator & li) const { return pi!=li.pi; }; }; template EnvironmentParameterIterator makeIterator(Environment * f,TI p) { return EnvironmentParameterIterator(f,p); }; }; #endif