348ccdaa2148780e1a951e60d631cfc43ef31a42
[alexxy/gromacs-pyapi.git] / src / sip / commandline / cmdlineoptionsmodule.sip
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 2016 by the GROMACS development team, led by
5  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
6  * and including many others, as listed in the AUTHORS file in the
7  * top-level source directory and at http://www.gromacs.org.
8  *
9  * GROMACS is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public License
11  * as published by the Free Software Foundation; either version 2.1
12  * of the License, or (at your option) any later version.
13  *
14  * GROMACS is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with GROMACS; if not, see
21  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
23  *
24  * If you want to redistribute modifications to GROMACS, please
25  * consider that scientific software is very special. Version
26  * control is crucial - bugs must be traceable. We will be happy to
27  * consider code for inclusion in the official distribution, but
28  * derived work must not be called official GROMACS. Details are found
29  * in the README & COPYING files - if they are missing, get the
30  * official version at http://www.gromacs.org.
31  *
32  * To help us fund GROMACS development, we humbly ask that you cite
33  * the research papers on the package. Check out http://www.gromacs.org.
34  */
35
36 class ICommandLineOptionsModuleSettings /NoDefaultCtors/ {
37 %TypeHeaderCode
38 #include <gromacs/utility/arrayref.h>
39 #include <gromacs/commandline/cmdlineoptionsmodule.h>
40 using gmx::ICommandLineOptionsModuleSettings;
41 %End
42 public:
43     virtual void setHelpText(const char *help) = 0;
44     %MethodCode
45         const char *const helpText[] = {a0};
46         sipCpp->setHelpText(helpText);
47     %End
48     virtual void addOptionsBehavior(
49         IOptionsBehavior *behavior /Transfer/) = 0;
50     %MethodCode
51         sipCpp->addOptionsBehavior(std::shared_ptr<IOptionsBehavior>(a0));
52     %End
53 private:
54     virtual ~ICommandLineOptionsModuleSettings();
55 };
56
57 // This class is needed by Pipeline python implementation.
58 // ICommandLineOptionsModuleSettings can't be subclassed in Python
59 // due to private destructor, so subclass it here.
60
61 %ModuleHeaderCode
62 #include <gromacs/commandline/cmdlineoptionsmodule.h>
63 #include <memory>
64
65 namespace pygmx {
66     class DummyOptionsModuleSettings : public gmx::ICommandLineOptionsModuleSettings {
67     public:
68         virtual void setHelpText(const gmx::ConstArrayRef<const char*>&) {};
69         virtual void addOptionsBehavior(const std::shared_ptr<gmx::IOptionsBehavior>&) {};
70     };
71 }
72 %End
73
74 class DummyOptionsModuleSettings : public ICommandLineOptionsModuleSettings {
75 %TypeHeaderCode
76 #include <gromacs/commandline/cmdlineoptionsmodule.h>
77 using gmx::ICommandLineOptionsModuleSettings;
78 using pygmx::DummyOptionsModuleSettings;
79 %End
80 private:
81     virtual void setHelpText(const char *);
82     virtual void addOptionsBehavior(IOptionsBehavior* /Transfer/);
83 };
84
85 class CommandLineModuleSettings /NoDefaultCtors/ {
86 %TypeHeaderCode
87 #include <gromacs/commandline/cmdlinemodule.h>
88 using gmx::CommandLineModuleSettings;
89 %End
90 };
91
92 class ICommandLineOptionsModule /VirtualErrorHandler=vehandler/ {
93 %TypeHeaderCode
94 #include <gromacs/commandline/cmdlineoptionsmodule.h>
95 using gmx::ICommandLineOptionsModule;
96 %End
97 public:
98     virtual void init(CommandLineModuleSettings *settings) = 0;
99     virtual void initOptions(IOptionsContainer *options, ICommandLineOptionsModuleSettings *settings) = 0;
100     virtual void optionsFinished() = 0;
101     virtual int run() = 0;
102     static int runAsMain(SIP_PYOBJECT mod, SIP_PYLIST argv, const char *name, const char *description);
103     %MethodCode
104         auto runner = [a0, a2, a3] (int argc, char **argv) -> int {
105             return ICommandLineOptionsModule::runAsMain(argc, argv, a2, a3, PyFactory<gmx::ICommandLineOptionsModule>(sipType_ICommandLineOptionsModule, a0));
106         };
107         sipRes = argv_wrapper(a1, runner);
108     %End
109 };