dlvhex  2.5.0
include/dlvhex2/PythonPlugin.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 
00272 #ifndef PYTHON_PLUGIN__HPP_INCLUDED
00273 #define PYTHON_PLUGIN__HPP_INCLUDED
00274 
00275 #ifdef HAVE_CONFIG_H
00276 #include "config.h"
00277 #endif                           // HAVE_CONFIG_H
00278 
00279 #include "dlvhex2/PlatformDefinitions.h"
00280 #include "dlvhex2/PluginInterface.h"
00281 
00282 #include <string>
00283 #include <vector>
00284 
00285 #ifdef HAVE_PYTHON
00286 
00287 //#include <Python.h>
00288 
00289 DLVHEX_NAMESPACE_BEGIN
00290 
00292 class PythonPlugin:
00293 public PluginInterface
00294 {
00295     public:
00296         // stored in ProgramCtx, accessed using getPluginData<PythonPlugin>()
00297         class CtxData:
00298     public PluginData
00299     {
00300         public:
00302             std::vector<std::string> pythonScripts;
00304             std::vector<std::string> commandlineArguments;
00305 
00307             CtxData();
00309             virtual ~CtxData() {}
00310     };
00311 
00312     public:
00314         PythonPlugin();
00316         virtual ~PythonPlugin();
00317 
00318         // output help message for this plugin
00319         virtual void printUsage(std::ostream& o) const;
00320 
00321         // accepted options: --aggregate-enable
00322         //
00323         // processes options for this plugin, and removes recognized options from pluginOptions
00324         // (do not free the pointers, the const char* directly come from argv)
00325         virtual void processOptions(std::list<const char*>& pluginOptions, ProgramCtx&);
00326 
00327         // rewrite program: rewrite aggregate atoms to external atoms
00328         virtual PluginRewriterPtr createRewriter(ProgramCtx&);
00329 
00330         // register model callback which transforms all auxn(p,t1,...,tn) back to p(t1,...,tn)
00331         virtual void setupProgramCtx(ProgramCtx&);
00332 
00333         virtual std::vector<PluginAtomPtr> createAtoms(ProgramCtx&) const;
00334 
00337         void runPythonMain(std::string filename);
00338 
00339         // no atoms!
00340 };
00341 
00342 DLVHEX_NAMESPACE_END
00343 #endif
00344 #endif
00345 
00346 // vim:expandtab:ts=4:sw=4:
00347 // mode: C++
00348 // End: