dlvhex  2.5.0
include/dlvhex2/PlainModelGenerator.h
Go to the documentation of this file.
00001 /* dlvhex -- Answer-Set Programming with external interfaces.
00002  * Copyright (C) 2005-2007 Roman Schindlauer
00003  * Copyright (C) 2006-2015 Thomas Krennwallner
00004  * Copyright (C) 2009-2016 Peter Schüller
00005  * Copyright (C) 2011-2016 Christoph Redl
00006  * Copyright (C) 2015-2016 Tobias Kaminski
00007  * Copyright (C) 2015-2016 Antonius Weinzierl
00008  *
00009  * This file is part of dlvhex.
00010  *
00011  * dlvhex is free software; you can redistribute it and/or modify it
00012  * under the terms of the GNU Lesser General Public License as
00013  * published by the Free Software Foundation; either version 2.1 of
00014  * the License, or (at your option) any later version.
00015  *
00016  * dlvhex is distributed in the hope that it will be useful, but
00017  * WITHOUT ANY WARRANTY; without even the implied warranty of
00018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019  * Lesser General Public License for more details.
00020  *
00021  * You should have received a copy of the GNU Lesser General Public
00022  * License along with dlvhex; if not, write to the Free Software
00023  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
00024  * 02110-1301 USA.
00025  */
00026 
00034 #ifndef PLAIN_MODEL_GENERATOR_HPP_INCLUDED__09112010
00035 #define PLAIN_MODEL_GENERATOR_HPP_INCLUDED__09112010
00036 
00037 #include "dlvhex2/PlatformDefinitions.h"
00038 #include "dlvhex2/fwd.h"
00039 #include "dlvhex2/ID.h"
00040 #include "dlvhex2/BaseModelGenerator.h"
00041 #include "dlvhex2/ComponentGraph.h"
00042 
00043 DLVHEX_NAMESPACE_BEGIN
00044 
00045 class PlainModelGeneratorFactory;
00046 
00047 //
00048 // A model generator does the following:
00049 // * it is constructed by a ModelGeneratorFactory which knows the program
00050 //   (and can precompute information for evaluation,
00051 //    and may also provide this to the model generator)
00052 // * it is evaluated on a (probably empty) input interpretation
00053 // * this evaluation can be performed online
00054 // * evaluation yields a (probably empty) set of output interpretations
00055 //
00056 
00058 class PlainModelGenerator:
00059 public BaseModelGenerator,
00060 public ostream_printable<PlainModelGenerator>
00061 {
00062     // types
00063     public:
00064         typedef PlainModelGeneratorFactory Factory;
00065 
00066         // storage
00067     protected:
00069         Factory& factory;
00070 
00072         InterpretationConstPtr postprocessedInput;
00074         ASPSolverManager::ResultsPtr currentResults;
00075 
00076         // members
00077     public:
00083         PlainModelGenerator(Factory& factory, InterpretationConstPtr input);
00084 
00088         virtual ~PlainModelGenerator() {}
00089 
00090         // generate and return next model, return null after last model
00091         virtual InterpretationPtr generateNextModel();
00092 };
00093 
00095 class PlainModelGeneratorFactory:
00096 public BaseModelGeneratorFactory,
00097 public ostream_printable<PlainModelGeneratorFactory>
00098 {
00099     // types
00100     public:
00101         friend class PlainModelGenerator;
00102         typedef ComponentGraph::ComponentInfo ComponentInfo;
00103 
00104         // storage
00105     protected:
00107         ASPSolverManager::SoftwareConfigurationPtr externalEvalConfig;
00109         ProgramCtx& ctx;
00111         std::vector<ID> eatoms;
00116         std::vector<ID> idb;
00120         std::vector<ID> xidb;
00121 
00122         // methods
00123     public:
00130         PlainModelGeneratorFactory(
00131             ProgramCtx& ctx, const ComponentInfo& ci,
00132             ASPSolverManager::SoftwareConfigurationPtr externalEvalConfig);
00134         virtual ~PlainModelGeneratorFactory() {}
00135 
00141         virtual ModelGeneratorPtr createModelGenerator(
00142             InterpretationConstPtr input)
00143             { return ModelGeneratorPtr(new PlainModelGenerator(*this, input)); }
00144 
00147         virtual std::ostream& print(std::ostream& o) const;
00148 };
00149 
00150 DLVHEX_NAMESPACE_END
00151 #endif                           // PLAIN_MODEL_GENERATOR_HPP_INCLUDED__09112010
00152 
00153 // vim:expandtab:ts=4:sw=4:
00154 // mode: C++
00155 // End: