*/
class ICommandLineOptionsModuleSettings /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/utility/arrayref.h>
#include <gromacs/commandline/cmdlineoptionsmodule.h>
-using gmx::ICommandLineOptionsModuleSettings;
-%End
-public:
- virtual void setHelpText(const char *help) = 0;
- %MethodCode
+ using gmx::ICommandLineOptionsModuleSettings;
+ %End
+ public:
+ virtual void setHelpText(const char *help) = 0;
+ %MethodCode
const char *const helpText[] = {a0};
sipCpp->setHelpText(helpText);
- %End
- virtual void addOptionsBehavior(
- IOptionsBehavior *behavior /Transfer/) = 0;
- %MethodCode
- sipCpp->addOptionsBehavior(std::shared_ptr<IOptionsBehavior>(a0));
- %End
-private:
- virtual ~ICommandLineOptionsModuleSettings();
+ %End
+ virtual void addOptionsBehavior(
+ IOptionsBehavior *behavior /Transfer/) = 0;
+ %MethodCode
+ sipCpp->addOptionsBehavior(std::shared_ptr < IOptionsBehavior > (a0));
+ %End
+ private:
+ virtual ~ICommandLineOptionsModuleSettings();
};
// This class is needed by Pipeline python implementation.
#include <memory>
namespace pygmx {
- class DummyOptionsModuleSettings : public gmx::ICommandLineOptionsModuleSettings {
- public:
- virtual void setHelpText(const gmx::ConstArrayRef<const char*>&) {};
- virtual void addOptionsBehavior(const std::shared_ptr<gmx::IOptionsBehavior>&) {};
+ class DummyOptionsModuleSettings: public gmx::ICommandLineOptionsModuleSettings {
+ public:
+ virtual void setHelpText(const gmx::ConstArrayRef < const char* > &) {};
+ virtual void addOptionsBehavior(const std::shared_ptr < gmx::IOptionsBehavior > &) {};
};
}
%End
-class DummyOptionsModuleSettings : public ICommandLineOptionsModuleSettings {
-%TypeHeaderCode
+class DummyOptionsModuleSettings: public ICommandLineOptionsModuleSettings {
+ %TypeHeaderCode
#include <gromacs/commandline/cmdlineoptionsmodule.h>
-using gmx::ICommandLineOptionsModuleSettings;
-using pygmx::DummyOptionsModuleSettings;
-%End
-private:
- virtual void setHelpText(const char *);
- virtual void addOptionsBehavior(IOptionsBehavior* /Transfer/);
+ using gmx::ICommandLineOptionsModuleSettings;
+ using pygmx::DummyOptionsModuleSettings;
+ %End
+ private:
+ virtual void setHelpText(const char *);
+ virtual void addOptionsBehavior(IOptionsBehavior* /Transfer/);
};
class CommandLineModuleSettings /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/commandline/cmdlinemodule.h>
-using gmx::CommandLineModuleSettings;
-%End
+ using gmx::CommandLineModuleSettings;
+ %End
};
-class ICommandLineOptionsModule /VirtualErrorHandler=vehandler/ {
-%TypeHeaderCode
+class ICommandLineOptionsModule /VirtualErrorHandler = vehandler/ {
+ %TypeHeaderCode
#include <gromacs/commandline/cmdlineoptionsmodule.h>
-using gmx::ICommandLineOptionsModule;
-%End
-public:
- virtual void init(CommandLineModuleSettings *settings) = 0;
- virtual void initOptions(IOptionsContainer *options, ICommandLineOptionsModuleSettings *settings) = 0;
- virtual void optionsFinished() = 0;
- virtual int run() = 0;
- static int runAsMain(SIP_PYOBJECT mod, SIP_PYLIST argv, const char *name, const char *description);
- %MethodCode
- auto runner = [a0, a2, a3] (int argc, char **argv) -> int {
- return ICommandLineOptionsModule::runAsMain(argc, argv, a2, a3, PyFactory<gmx::ICommandLineOptionsModule>(sipType_ICommandLineOptionsModule, a0));
+ using gmx::ICommandLineOptionsModule;
+ %End
+ public:
+ virtual void init(CommandLineModuleSettings *settings) = 0;
+ virtual void initOptions(IOptionsContainer *options, ICommandLineOptionsModuleSettings *settings) = 0;
+ virtual void optionsFinished() = 0;
+ virtual int run() = 0;
+ static int runAsMain(SIP_PYOBJECT mod, SIP_PYLIST argv, const char *name, const char *description);
+ %MethodCode
+ auto runner = [a0, a2, a3] (int argc, char **argv)->int {
+ return ICommandLineOptionsModule::runAsMain(argc, argv, a2, a3, PyFactory < gmx::ICommandLineOptionsModule > (sipType_ICommandLineOptionsModule, a0));
};
sipRes = argv_wrapper(a1, runner);
- %End
+ %End
};
*/
class CommandLineParser /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/commandline/cmdlineparser.h>
-using gmx::CommandLineParser;
-%End
-public:
- CommandLineParser(Options *options);
- void parse(SIP_PYLIST argv);
- %MethodCode
- auto runner = [sipCpp] (int argc, char **argv) -> int {
+ using gmx::CommandLineParser;
+ %End
+ public:
+ CommandLineParser(Options *options);
+ void parse(SIP_PYLIST argv);
+ %MethodCode
+ auto runner = [sipCpp] (int argc, char **argv)->int {
sipCpp->parse(&argc, argv);
return 0;
};
argv_wrapper(a0, runner);
- %End
+ %End
};
* the research papers on the package. Check out http://www.gromacs.org.
*/
-%Exception gmx::GromacsException(SIP_Exception) /Default/ {
-%TypeHeaderCode
+%Exception gmx::GromacsException(SIP_Exception) /Default/
+{
+ %TypeHeaderCode
#include <gromacs/utility/exceptions.h>
-%End
-%RaiseCode
+ %End
+ %RaiseCode
std::string detail = formatExceptionMessageToString(sipExceptionRef);
SIP_BLOCK_THREADS
PyErr_SetString(sipException_gmx_GromacsException, detail.data());
SIP_UNBLOCK_THREADS
-%End
+ %End
};
// This MappedType makes sure that unique_ptr does not get destructed while wrapped pointer is still needed.
// A class called 'TYPEPointer' needs to be created for every use.
-template <TYPE>
-%MappedType std::unique_ptr<TYPE> /NoRelease/ {
+template < TYPE >
+%MappedType std::unique_ptr < TYPE > /NoRelease/ {
-%ConvertFromTypeCode
+ %ConvertFromTypeCode
PyObject *wrp = sipConvertFromType(sipCpp->get(), sipType_TYPE, NULL);
PyObject *ptr = sipConvertFromNewType(sipCpp, sipType_TYPEPointer, wrp);
// ptr is created only to bind wrp's ownership to it
GMX_UNUSED_VALUE(ptr);
return wrp;
-%End
+ %End
-%ConvertToTypeCode
+ %ConvertToTypeCode
// Make it impossible to convert into this type
if (!sipIsErr)
+ {
return 0;
+ }
GMX_ASSERT(true, "Converting something into unique_ptr. This should not happen!");
return 0;
-%End
+ %End
};
%VirtualErrorHandler vehandler
- SIP_RELEASE_GIL(sipGILState);
+SIP_RELEASE_GIL(sipGILState);
- PyErr_PrintEx(1);
- GMX_THROW(gmx::InternalError("Python virtual overload raised an exception, see traceback"));
+PyErr_PrintEx(1);
+GMX_THROW(gmx::InternalError("Python virtual overload raised an exception, see traceback"));
%End
%ModuleHeaderCode
#include <functional>
-int argv_wrapper(PyObject *, const std::function<int(int, char**)> &);
-template <typename T> class PyFactory;
+int argv_wrapper(PyObject *, const std::function < int(int, char**) > &);
+template < typename T > class PyFactory;
%End
// This is put into UnitPostIncludeCode so that sip* declarations are available.
%UnitPostIncludeCode
#include <memory>
#include <gromacs/utility/exceptions.h>
-template <typename T> class PyFactory {
-public:
- PyFactory(const sipTypeDef *sipType, PyObject *mod) : sipType_(sipType), mod(mod) {} ;
- std::unique_ptr<T> operator () () {
- int iserr = 0;
- int can = sipCanConvertToType(mod, sipType_, 0);
-
- if (!can)
- GMX_THROW(gmx::APIError("Provided python object can not be converted to type required by runAsMain-like function"));
-
- T *module = (T*) sipConvertToType(
- mod, sipType_, NULL, 0, NULL, &iserr);
- return std::unique_ptr<T>(module);
- }
-private:
- const sipTypeDef *sipType_;
- PyObject *mod;
+template < typename T > class PyFactory {
+ public:
+ PyFactory(const sipTypeDef *sipType, PyObject *mod) : sipType_(sipType), mod(mod) {
+ };
+ std::unique_ptr < T > operator () () {
+ int iserr = 0;
+ int can = sipCanConvertToType(mod, sipType_, 0);
+
+ if (!can)
+ {
+ GMX_THROW(gmx::APIError("Provided python object can not be converted to type required by runAsMain-like function"));
+ }
+
+ T *module = (T*) sipConvertToType(
+ mod, sipType_, NULL, 0, NULL, &iserr);
+ return std::unique_ptr < T > (module);
+ }
+ private:
+ const sipTypeDef *sipType_;
+ PyObject *mod;
};
%End
%ModuleCode
-int argv_wrapper(PyObject *py_argv, const std::function<int(int, char**)> &runner) {
- int argc = PyList_GET_SIZE(py_argv);
+int argv_wrapper(PyObject *py_argv, const std::function < int(int, char**) > &runner)
+{
+ int argc = PyList_GET_SIZE(py_argv);
char **argv = new char *[argc + 1];
- bool to_free[argc];
+ bool to_free[argc];
std::fill(to_free, to_free+argc, false);
// Convert the list.
// TODO: Use something better than AsLatin1String to avoid unicode errors
for (int a = 0; a < argc; ++a)
{
- PyObject *arg_obj = PyList_GET_ITEM(py_argv, a);
- const char *arg = sipString_AsLatin1String(&arg_obj);
+ PyObject *arg_obj = PyList_GET_ITEM(py_argv, a);
+ const char *arg = sipString_AsLatin1String(&arg_obj);
if (arg)
{
arg = "unknown";
}
- argv[a] = const_cast<char *>(arg);
+ argv[a] = const_cast < char * > (arg);
}
argv[argc] = NULL;
int result = runner(argc, argv);
for (int i = 0; i < argc; i++)
+ {
if (to_free[i])
+ {
free(argv[i]);
+ }
+ }
delete[] argv;
return result;
* the research papers on the package. Check out http://www.gromacs.org.
*/
-class AbstractOption /NoDefaultCtors,Abstract/ {
-%TypeHeaderCode
+class AbstractOption /NoDefaultCtors, Abstract/ {
+ %TypeHeaderCode
#include <gromacs/options/abstractoption.h>
-using gmx::AbstractOption;
-%End
+ using gmx::AbstractOption;
+ %End
};
-template<T, U> class OptionTemplate : AbstractOption /NoDefaultCtors/ {
-%TypeHeaderCode
+template < T, U > class OptionTemplate: AbstractOption /NoDefaultCtors/ {
+ %TypeHeaderCode
#include <gromacs/options/abstractoption.h>
-using namespace gmx;
-%End
-public:
- U& description(const char * /KeepReference/);
- U& hidden(bool = true);
- U& required(bool = true);
- U& allowMultiple(bool = true);
- // FIXME
- // These function do not work, because they store pointer to argument, which then is garbage collected in python.
- // Different combinations of Factory, KeepReference and Transfer annotations do not help.
- // Use third argument of PyOptionsHolder's methods instead.
- U& defaultValue(const T&);
- U& defaultValueIfSet(const T&);
+ using namespace gmx;
+ %End
+ public:
+ U &description(const char * /KeepReference/);
+ U &hidden(bool = true);
+ U &required(bool = true);
+ U &allowMultiple(bool = true);
+ // FIXME
+ // These function do not work, because they store pointer to argument, which then is garbage collected in python.
+ // Different combinations of Factory, KeepReference and Transfer annotations do not help.
+ // Use third argument of PyOptionsHolder's methods instead.
+ U &defaultValue(const T &);
+ U &defaultValueIfSet(const T &);
};
*/
%ModuleHeaderCode
-typedef gmx::OptionTemplate<double, gmx::DoubleOption> DoubleOptionTemplate;
-typedef gmx::OptionTemplate<int, gmx::IntegerOption> IntegerOptionTemplate;
-typedef gmx::OptionTemplate<std::string, gmx::StringOption> StringOptionTemplate;
-typedef gmx::OptionTemplate<bool, gmx::BooleanOption> BooleanOptionTemplate;
+typedef gmx::OptionTemplate < double, gmx::DoubleOption > DoubleOptionTemplate;
+typedef gmx::OptionTemplate < int, gmx::IntegerOption > IntegerOptionTemplate;
+typedef gmx::OptionTemplate < std::string, gmx::StringOption > StringOptionTemplate;
+typedef gmx::OptionTemplate < bool, gmx::BooleanOption > BooleanOptionTemplate;
%End
class std::string;
-typedef OptionTemplate<double, DoubleOption> DoubleOptionTemplate;
-typedef OptionTemplate<int, IntegerOption> IntegerOptionTemplate;
-typedef OptionTemplate<std::string, StringOption> StringOptionTemplate;
-typedef OptionTemplate<bool, BooleanOption> BooleanOptionTemplate;
+typedef OptionTemplate < double, DoubleOption > DoubleOptionTemplate;
+typedef OptionTemplate < int, IntegerOption > IntegerOptionTemplate;
+typedef OptionTemplate < std::string, StringOption > StringOptionTemplate;
+typedef OptionTemplate < bool, BooleanOption > BooleanOptionTemplate;
-class DoubleOption : DoubleOptionTemplate /NoDefaultCtors/ {
-%TypeHeaderCode
+class DoubleOption: DoubleOptionTemplate /NoDefaultCtors/ {
+ %TypeHeaderCode
#include "gromacs/options/basicoptions.h"
-using gmx::DoubleOption;
-%End
+ using gmx::DoubleOption;
+ %End
};
-class IntegerOption : IntegerOptionTemplate /NoDefaultCtors/ {
-%TypeHeaderCode
+class IntegerOption: IntegerOptionTemplate /NoDefaultCtors/ {
+ %TypeHeaderCode
#include "gromacs/options/basicoptions.h"
-using gmx::IntegerOption;
-%End
+ using gmx::IntegerOption;
+ %End
};
-class StringOption : StringOptionTemplate /NoDefaultCtors/ {
-%TypeHeaderCode
+class StringOption: StringOptionTemplate /NoDefaultCtors/ {
+ %TypeHeaderCode
#include "gromacs/options/basicoptions.h"
-using gmx::StringOption;
-%End
-public:
- StringOption& defaultValue(const char *);
- %MethodCode
- sipRes = &sipCpp->defaultValue(std::string(a0));
+ using gmx::StringOption;
%End
+ public:
+ StringOption &defaultValue(const char *);
+ %MethodCode
+ sipRes = &sipCpp->defaultValue(std::string(a0));
+ %End
};
-class BooleanOption : BooleanOptionTemplate /NoDefaultCtors/ {
-%TypeHeaderCode
+class BooleanOption: BooleanOptionTemplate /NoDefaultCtors/ {
+ %TypeHeaderCode
#include "gromacs/options/basicoptions.h"
-using gmx::BooleanOption;
-%End
+ using gmx::BooleanOption;
+ %End
};
%ModuleHeaderCode
#include "gromacs/options/filenameoption.h"
#include "gromacs/fileio/filetypes.h"
-typedef gmx::OptionTemplate<std::string, gmx::FileNameOption> FileNameOptionTemplate;
+typedef gmx::OptionTemplate < std::string, gmx::FileNameOption > FileNameOptionTemplate;
using namespace gmx; // needed for compilation of enum
%End
-typedef OptionTemplate<std::string, FileNameOption> FileNameOptionTemplate;
+typedef OptionTemplate < std::string, FileNameOption > FileNameOptionTemplate;
enum OptionFileType {
eftUnknown, eftTopology, eftTrajectory, eftPDB,
efNR
};
-class FileNameOption : FileNameOptionTemplate /NoDefaultCtors/ {
-%TypeHeaderCode
+class FileNameOption: FileNameOptionTemplate /NoDefaultCtors/ {
+ %TypeHeaderCode
#include "gromacs/options/filenameoption.h"
-using gmx::FileNameOption;
-%End
-public:
- FileNameOption& filetype(OptionFileType);
- FileNameOption& legacyType(int);
- FileNameOption& inputFile();
- FileNameOption& outputFile();
- FileNameOption& inputOutputFile();
- FileNameOption& readWriteFlags(bool, bool);
- FileNameOption& libraryFile(bool = true);
- FileNameOption& defaultBasename(const char* /KeepReference/);
- FileNameOption& defaultType(int);
+ using gmx::FileNameOption;
+ %End
+ public:
+ FileNameOption &filetype(OptionFileType);
+ FileNameOption &legacyType(int);
+ FileNameOption &inputFile();
+ FileNameOption &outputFile();
+ FileNameOption &inputOutputFile();
+ FileNameOption &readWriteFlags(bool, bool);
+ FileNameOption &libraryFile(bool = true);
+ FileNameOption &defaultBasename(const char* /KeepReference/);
+ FileNameOption &defaultType(int);
};
-class FileNameOptionManager : public IOptionManager /NoDefaultCtors/ {
-%TypeHeaderCode
+class FileNameOptionManager: public IOptionManager /NoDefaultCtors/ {
+ %TypeHeaderCode
#include <gromacs/options/filenameoptionmanager.h>
-%End
-public:
- FileNameOptionManager();
+ %End
+ public:
+ FileNameOptionManager();
};
*/
class IOptionsBehavior /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/options/ioptionsbehavior.h>
-using gmx::IOptionsBehavior;
-%End
-public:
- virtual void initBehavior(Options *options) = 0;
- virtual void optionsFinishing(Options *options) = 0;
- virtual void optionsFinished() = 0;
+ using gmx::IOptionsBehavior;
+ %End
+ public:
+ virtual void initBehavior(Options *options) = 0;
+ virtual void optionsFinishing(Options *options) = 0;
+ virtual void optionsFinished() = 0;
};
-class TimeUnitBehavior : public IOptionsBehavior /NoDefaultCtors/ {
-%TypeHeaderCode
+class TimeUnitBehavior: public IOptionsBehavior /NoDefaultCtors/ {
+ %TypeHeaderCode
#include <gromacs/options/timeunitmanager.h>
-using gmx::TimeUnitBehavior;
-%End
-public:
- TimeUnitBehavior();
- virtual void initBehavior(Options *options);
- virtual void optionsFinishing(Options *options);
- virtual void optionsFinished();
+ using gmx::TimeUnitBehavior;
+ %End
+ public:
+ TimeUnitBehavior();
+ virtual void initBehavior(Options *options);
+ virtual void optionsFinishing(Options *options);
+ virtual void optionsFinished();
};
class OptionInfo /NoDefaultCtors/;
class IOptionsContainer /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/options/ioptionscontainer.h>
-using gmx::IOptionsContainer;
-%End
+ using gmx::IOptionsContainer;
+ %End
-public:
- virtual OptionInfo *addOption(const AbstractOption &settings) = 0;
- virtual IOptionsContainer *addGroup() = 0;
- %MethodCode
+ public:
+ virtual OptionInfo *addOption(const AbstractOption &settings) = 0;
+ virtual IOptionsContainer *addGroup() = 0;
+ %MethodCode
IOptionsContainer &group = sipCpp->addGroup();
- sipRes = &group;
- %End
-private:
- virtual ~IOptionsContainer();
+ sipRes = &group;
+ %End
+ private:
+ virtual ~IOptionsContainer();
};
*/
class IOptionManager /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/options/options.h>
-using gmx::IOptionManager;
-%End
+ using gmx::IOptionManager;
+ %End
-protected:
- virtual ~IOptionManager();
+ protected:
+ virtual ~IOptionManager();
};
-class Options : public IOptionsContainer {
-%TypeHeaderCode
+class Options: public IOptionsContainer {
+ %TypeHeaderCode
#include <gromacs/options/options.h>
-using gmx::Options;
-%End
+ using gmx::Options;
+ %End
-public:
- Options(const char *name, const char *title);
- void addManager (IOptionManager *manager);
- void addSubSection (Options *section);
- void addOption(const AbstractOption &settings);
- IOptionsContainer *addGroup();
- %MethodCode
+ public:
+ Options(const char *name, const char *title);
+ void addManager (IOptionManager *manager);
+ void addSubSection (Options *section);
+ void addOption(const AbstractOption &settings);
+ IOptionsContainer *addGroup();
+ %MethodCode
IOptionsContainer &group = sipCpp->addGroup();
- sipRes = &group;
- %End
+ sipRes = &group;
+ %End
- void finish();
-private:
- Options(const Options &other);
+ void finish();
+ private:
+ Options(const Options &other);
};
#include <string>
class PyOptionsHolder {
-public:
- class DuplicateOption : public std::exception {
public:
- virtual const char* what() const noexcept;
- };
- class StringList {
- public:
- StringList(const std::vector<std::string>*);
- StringList(const std::string*, size_t);
- const char* operator[] (size_t);
+ class DuplicateOption: public std::exception {
+ public:
+ virtual const char* what() const noexcept;
+ };
+ class StringList {
+ public:
+ StringList(const std::vector < std::string > *);
+ StringList(const std::string*, size_t);
+ const char * operator[] (size_t);
+ private:
+ const std::string *list;
+ size_t size;
+ const std::vector < std::string > *vector;
+ };
+ gmx::DoubleOption doubleOption(const char*, size_t = 1, double* = NULL);
+ gmx::IntegerOption integerOption(const char*, size_t = 1, int* = NULL);
+ gmx::StringOption stringOption(const char*, size_t = 1, const char* = NULL);
+ gmx::BooleanOption booleanOption(const char*, size_t = 1, bool = 0);
+ gmx::SelectionOption selectionOption(const char*, size_t = 1);
+ gmx::FileNameOption fileNameOption(const char*, size_t = 1);
+ PyObject* get_value(const char*);
+ ~PyOptionsHolder();
private:
- const std::string *list;
- size_t size;
- const std::vector<std::string> *vector;
- };
- gmx::DoubleOption doubleOption(const char*, size_t = 1, double* = NULL);
- gmx::IntegerOption integerOption(const char*, size_t = 1, int* = NULL);
- gmx::StringOption stringOption(const char*, size_t = 1, const char* = NULL);
- gmx::BooleanOption booleanOption(const char*, size_t = 1, bool = 0);
- gmx::SelectionOption selectionOption(const char*, size_t = 1);
- gmx::FileNameOption fileNameOption(const char*, size_t = 1);
- PyObject* get_value(const char*);
- ~PyOptionsHolder();
-private:
- struct option_value {
- void *value;
- const char *type;
- int *count;
- bool vector;
- const char *name;
- };
- std::map<std::string, option_value> storage;
- template<typename T, typename U> U createStorage(const char*, const char*, int, const T* = 0);
- template<typename T> PyObject* buildValue(const char*, const option_value&, const sipTypeDef* = NULL, size_t = 0);
- template<typename T> void deleteStorage(const option_value&);
+ struct option_value {
+ void *value;
+ const char *type;
+ int *count;
+ bool vector;
+ const char *name;
+ };
+ std::map < std::string, option_value > storage;
+ template < typename T, typename U > U createStorage(const char*, const char*, int, const T* = 0);
+ template < typename T > PyObject* buildValue(const char*, const option_value &, const sipTypeDef* = NULL, size_t = 0);
+ template < typename T > void deleteStorage(const option_value &);
};
%End
return "This option is already defined";
}
-PyOptionsHolder::StringList::StringList(const std::vector<std::string> *vector) :
+PyOptionsHolder::StringList::StringList(const std::vector < std::string > *vector) :
list(NULL), size(vector->size()), vector(vector)
{}
list(list), size(size), vector(NULL)
{}
-const char* PyOptionsHolder::StringList::operator[](size_t i) {
+const char* PyOptionsHolder::StringList::operator[] (size_t i) {
if (i >= size)
+ {
return NULL;
+ }
return vector ? (*vector)[i].data() : list[i].data();
}
-template<typename T, typename U> U PyOptionsHolder::createStorage(const char *name, const char *type, int count, const T *def) {
+template < typename T, typename U > U PyOptionsHolder::createStorage(const char *name, const char *type, int count, const T *def)
+{
if (storage.count(name))
+ {
throw DuplicateOption();
+ }
U option(name);
option_value value;
- value.type = type;
+ value.type = type;
value.count = new int;
- value.name = name;
+ value.name = name;
- if (count == 0) { // std::vector of values
- auto *store = new std::vector<T>();
+ if (count == 0) // std::vector of values
+ {
+ auto *store = new std::vector < T > ();
option.storeVector(store);
option.multiValue();
option.storeCount(value.count);
*value.count = 0;
- if (def) {
+ if (def)
+ {
store->push_back(*def);
*value.count = 1;
}
- value.value = store;
+ value.value = store;
value.vector = true;
- } else { // exactly `count` values
+ }
+ else // exactly `count` values
+ {
auto *store = new T[count];
if (def)
+ {
store[0] = *def;
+ }
option.store(store);
if (count > 1)
+ {
option.valueCount(count);
+ }
- value.value = store;
+ value.value = store;
value.vector = false;
*value.count = count;
}
return option;
}
-gmx::DoubleOption PyOptionsHolder::doubleOption(const char *name, size_t count, double *def) {
- gmx::DoubleOption option = createStorage<double, gmx::DoubleOption>(name, "d", count, def);
+gmx::DoubleOption PyOptionsHolder::doubleOption(const char *name, size_t count, double *def)
+{
+ gmx::DoubleOption option = createStorage < double, gmx::DoubleOption > (name, "d", count, def);
return option;
}
-gmx::IntegerOption PyOptionsHolder::integerOption(const char *name, size_t count, int *def) {
- gmx::IntegerOption option = createStorage<int, gmx::IntegerOption>(name, "i", count, def);
+gmx::IntegerOption PyOptionsHolder::integerOption(const char *name, size_t count, int *def)
+{
+ gmx::IntegerOption option = createStorage < int, gmx::IntegerOption > (name, "i", count, def);
return option;
}
-gmx::StringOption PyOptionsHolder::stringOption(const char *name, size_t count, const char* def) {
+gmx::StringOption PyOptionsHolder::stringOption(const char *name, size_t count, const char* def)
+{
std::string *s_def = NULL;
if (def)
+ {
s_def = new std::string(def);
+ }
- gmx::StringOption option = createStorage<std::string, gmx::StringOption>(name, "A", count, s_def);
- delete s_def;
+ gmx::StringOption option = createStorage < std::string, gmx::StringOption > (name, "A", count, s_def);
+ delete s_def;
return option;
}
// FIXME: Unify with the rest
-gmx::BooleanOption PyOptionsHolder::booleanOption(const char *name, size_t count, bool def) {
+gmx::BooleanOption PyOptionsHolder::booleanOption(const char *name, size_t count, bool def)
+{
if (storage.count(name))
+ {
throw DuplicateOption();
+ }
bool *store = new bool;
*store = def;
return option;
}
-gmx::SelectionOption PyOptionsHolder::selectionOption(const char *name, size_t count) {
- gmx::SelectionOption option = createStorage<gmx::Selection, gmx::SelectionOption>(name, "S", count);
+gmx::SelectionOption PyOptionsHolder::selectionOption(const char *name, size_t count)
+{
+ gmx::SelectionOption option = createStorage < gmx::Selection, gmx::SelectionOption > (name, "S", count);
return option;
}
-gmx::FileNameOption PyOptionsHolder::fileNameOption(const char *name, size_t count) {
- gmx::FileNameOption option = createStorage<std::string, gmx::FileNameOption>(name, "f", count);
+gmx::FileNameOption PyOptionsHolder::fileNameOption(const char *name, size_t count)
+{
+ gmx::FileNameOption option = createStorage < std::string, gmx::FileNameOption > (name, "f", count);
return option;
}
-template<typename T> PyObject* PyOptionsHolder::buildValue(const char *sipType, const PyOptionsHolder::option_value &value, const sipTypeDef *td, size_t size) {
+template < typename T > PyObject* PyOptionsHolder::buildValue(const char *sipType, const PyOptionsHolder::option_value &value, const sipTypeDef *td, size_t size)
+{
int count = *value.count;
- T *store = !value.vector ? (T*) value.value : ((std::vector<T>*) value.value)->data();
+ T *store = !value.vector ? (T*) value.value : ((std::vector < T > *)value.value)->data();
- if (count == 1 && !value.vector) {
+ if (count == 1 && !value.vector)
+ {
if (td)
+ {
return sipConvertFromType(store, td, NULL);
+ }
else
+ {
return sipBuildResult(NULL, sipType, *store);
- } else {
+ }
+ }
+ else
+ {
if (td)
+ {
return sipConvertToTypedArray(store, td, NULL, size, count, SIP_READ_ONLY);
+ }
else
+ {
return sipConvertToArray(store, sipType, count, SIP_READ_ONLY);
+ }
}
}
-PyObject* PyOptionsHolder::get_value(const char *name) {
+PyObject* PyOptionsHolder::get_value(const char *name)
+{
if (!storage.count(name))
+ {
return NULL;
+ }
option_value v = storage[name];
- switch (*v.type) {
- case 'd': // double
- return buildValue<double>("d", v);
- break;
- case 'i': // int
- return buildValue<int>("i", v);
- break;
- case 'A': // std::string
- case 'f': // FileNameOption
- if (v.vector)
- return sipConvertFromType(new PyOptionsHolder::StringList(((std::vector<std::string>*) v.value)), sipType_PyOptionsHolder_StringList, Py_None);
- else if (*v.count == 1)
- return sipBuildResult(NULL, "A", ((std::string*) v.value)->data());
- else
- return sipConvertFromType(new PyOptionsHolder::StringList((std::string*) v.value, *v.count), sipType_PyOptionsHolder_StringList, Py_None);
- break;
- case 'b': // bool
- // TODO: support vector bool options
- return sipBuildResult(NULL, v.type, *((bool*) v.value));
- break;
- case 'S': // Selection
- return buildValue<gmx::Selection>(NULL, v, sipType_Selection, sizeof(gmx::Selection));
- break;
+ switch (*v.type)
+ {
+ case 'd': // double
+ return buildValue < double > ("d", v);
+ break;
+ case 'i': // int
+ return buildValue < int > ("i", v);
+ break;
+ case 'A': // std::string
+ case 'f': // FileNameOption
+ if (v.vector)
+ {
+ return sipConvertFromType(new PyOptionsHolder::StringList(((std::vector < std::string > *)v.value)), sipType_PyOptionsHolder_StringList, Py_None);
+ }
+ else if (*v.count == 1)
+ {
+ return sipBuildResult(NULL, "A", ((std::string*) v.value)->data());
+ }
+ else
+ {
+ return sipConvertFromType(new PyOptionsHolder::StringList((std::string*) v.value, *v.count), sipType_PyOptionsHolder_StringList, Py_None);
+ }
+ break;
+ case 'b': // bool
+ // TODO: support vector bool options
+ return sipBuildResult(NULL, v.type, *((bool*) v.value));
+ break;
+ case 'S': // Selection
+ return buildValue < gmx::Selection > (NULL, v, sipType_Selection, sizeof(gmx::Selection));
+ break;
}
GMX_ASSERT(false, "Some type is not handled in PyOptionsHolder.get_value");
return NULL;
}
-template<typename T> void PyOptionsHolder::deleteStorage(const PyOptionsHolder::option_value &value) {
+template < typename T > void PyOptionsHolder::deleteStorage(const PyOptionsHolder::option_value &value)
+{
if (value.vector)
- delete (std::vector<T> *) value.value;
+ {
+ delete (std::vector < T > *) value.value;
+ }
else
+ {
delete[] (T*) value.value;
+ }
delete value.count;
}
-PyOptionsHolder::~PyOptionsHolder() {
+PyOptionsHolder::~PyOptionsHolder()
+{
for (auto e : storage)
- switch (*e.second.type) {
+ {
+ switch (*e.second.type)
+ {
case 'd': // double
- deleteStorage<double>(e.second);
+ deleteStorage < double > (e.second);
break;
case 'i': // int
- deleteStorage<int>(e.second);
+ deleteStorage < int > (e.second);
break;
case 'A': // std::string
case 'f': // FileNameOption (the storage type is still std::string)
- deleteStorage<std::string>(e.second);
+ deleteStorage < std::string > (e.second);
break;
case 'b': // bool
delete (bool*) e.second.value;
break;
case 'S': // Selection
- deleteStorage<gmx::Selection>(e.second);
+ deleteStorage < gmx::Selection > (e.second);
break;
}
+ }
}
%End
%Exception PyOptionsHolder::DuplicateOption {
-%RaiseCode
- SIP_BLOCK_THREADS;
- PyErr_SetString(PyExc_ValueError, sipExceptionRef.what());
- SIP_UNBLOCK_THREADS;
-%End
+ %RaiseCode
+ SIP_BLOCK_THREADS;
+ PyErr_SetString(PyExc_ValueError, sipExceptionRef.what());
+ SIP_UNBLOCK_THREADS;
+ %End
};
class PyOptionsHolder {
-%TypeHeaderCode
+ %TypeHeaderCode
#include "gromacs/options/basicoptions.h"
-%End
+ %End
-public:
- class StringList /NoDefaultCtors/ {
public:
- const char* operator[] (int);
+ class StringList /NoDefaultCtors/ {
+ public:
+ const char* operator[] (int);
+ %MethodCode
+ sipRes = (*sipCpp)[a0];
+
+ if (!sipRes)
+ {
+ SIP_BLOCK_THREADS;
+ PyErr_SetString(PyExc_IndexError, "Index out of range");
+ SIP_UNBLOCK_THREADS;
+ sipIsErr = 1;
+ }
+ %End
+ };
+ // These methods are given twice to workaround sip setting 0 for when '*def = NULL' option is not given
+ DoubleOption doubleOption(const char *name /KeepReference/, int count = 1) throw (PyOptionsHolder::DuplicateOption);
+ DoubleOption doubleOption(const char *name /KeepReference/, int count, const double *def) throw (PyOptionsHolder::DuplicateOption);
+
+ IntegerOption integerOption(const char *name /KeepReference/, int count = 1) throw (PyOptionsHolder::DuplicateOption);
+ IntegerOption integerOption(const char *name /KeepReference/, int count, const int *def) throw (PyOptionsHolder::DuplicateOption);
+
+ StringOption stringOption(const char *name /KeepReference/, int count = 1) throw (PyOptionsHolder::DuplicateOption);
+ StringOption stringOption(const char *name /KeepReference/, int count, const char *def) throw (PyOptionsHolder::DuplicateOption);
+
+ BooleanOption booleanOption(const char *name /KeepReference/, int count = 1, bool def = 0) throw (PyOptionsHolder::DuplicateOption);
+
+ SelectionOption selectionOption(const char *name /KeepReference/, int count = 1) throw (PyOptionsHolder::DuplicateOption);
+
+ FileNameOption fileNameOption(const char *name /KeepReference/, int count = 1) throw (PyOptionsHolder::DuplicateOption);
+ SIP_PYOBJECT __getitem__(const char *name);
%MethodCode
- sipRes = (*sipCpp)[a0];
-
- if (!sipRes) {
- SIP_BLOCK_THREADS;
- PyErr_SetString(PyExc_IndexError, "Index out of range");
- SIP_UNBLOCK_THREADS;
- sipIsErr = 1;
- }
- %End
- };
- // These methods are given twice to workaround sip setting 0 for when '*def = NULL' option is not given
- DoubleOption doubleOption(const char *name /KeepReference/, int count = 1) throw (PyOptionsHolder::DuplicateOption);
- DoubleOption doubleOption(const char *name /KeepReference/, int count, const double *def) throw (PyOptionsHolder::DuplicateOption);
-
- IntegerOption integerOption(const char *name /KeepReference/, int count = 1) throw (PyOptionsHolder::DuplicateOption);
- IntegerOption integerOption(const char *name /KeepReference/, int count, const int *def) throw (PyOptionsHolder::DuplicateOption);
-
- StringOption stringOption(const char *name /KeepReference/, int count = 1) throw (PyOptionsHolder::DuplicateOption);
- StringOption stringOption(const char *name /KeepReference/, int count, const char *def) throw (PyOptionsHolder::DuplicateOption);
-
- BooleanOption booleanOption(const char *name /KeepReference/, int count = 1, bool def = 0) throw (PyOptionsHolder::DuplicateOption);
-
- SelectionOption selectionOption(const char *name /KeepReference/, int count = 1) throw (PyOptionsHolder::DuplicateOption);
-
- FileNameOption fileNameOption(const char *name /KeepReference/, int count = 1) throw (PyOptionsHolder::DuplicateOption);
- SIP_PYOBJECT __getitem__(const char *name);
- %MethodCode
sipRes = sipCpp->get_value(a0);
- if (!sipRes) {
+ if (!sipRes)
+ {
SIP_BLOCK_THREADS;
PyErr_SetString(PyExc_KeyError, "Invalid option name");
SIP_UNBLOCK_THREADS;
sipIsErr = 1;
}
- %End
+ %End
};
%ModuleHeaderCode
#include "gromacs/options/abstractoption.h"
#include "gromacs/selection/selectionoption.h"
-typedef gmx::OptionTemplate<gmx::Selection, gmx::SelectionOption> SelectionOptionTemplate;
+typedef gmx::OptionTemplate < gmx::Selection, gmx::SelectionOption > SelectionOptionTemplate;
%End
-typedef OptionTemplate<Selection, SelectionOption> SelectionOptionTemplate;
+typedef OptionTemplate < Selection, SelectionOption > SelectionOptionTemplate;
-class SelectionOption : SelectionOptionTemplate /NoDefaultCtors/ {
-%TypeHeaderCode
+class SelectionOption: SelectionOptionTemplate /NoDefaultCtors/ {
+ %TypeHeaderCode
#include "gromacs/selection/selectionoption.h"
-using namespace gmx;
-%End
+ using namespace gmx;
+ %End
-public:
- SelectionOption& evaluateVelocities();
- SelectionOption& evaluateForces();
- SelectionOption& onlyAtoms();
- SelectionOption& onlyStatic();
- SelectionOption& dynamicMask();
- SelectionOption& allowEmpty();
- SelectionOption& defaultSelectionText(const char*);
+ public:
+ SelectionOption &evaluateVelocities();
+ SelectionOption &evaluateForces();
+ SelectionOption &onlyAtoms();
+ SelectionOption &onlyStatic();
+ SelectionOption &dynamicMask();
+ SelectionOption &allowEmpty();
+ SelectionOption &defaultSelectionText(const char*);
};
%Include definitions.sip
%Include selection.sip
-
};
class SelectionPosition /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include "gromacs/selection/selection.h"
-using namespace gmx;
-%End
+ using namespace gmx;
+ %End
-public:
- e_index_t type();
- SIP_PYOBJECT x();
- %MethodCode
+ public:
+ e_index_t type();
+ SIP_PYOBJECT x();
+ %MethodCode
sipRes = array1dToNumpy(3, sipCpp->x());
- %End
- SIP_PYOBJECT v();
- %MethodCode
+ %End
+ SIP_PYOBJECT v();
+ %MethodCode
sipRes = array1dToNumpy(3, sipCpp->v());
- %End
- SIP_PYOBJECT f();
- %MethodCode
+ %End
+ SIP_PYOBJECT f();
+ %MethodCode
sipRes = array1dToNumpy(3, sipCpp->f());
- %End
- double mass();
- double charge();
- int atomCount();
- SIP_PYOBJECT atomIndices();
- %MethodCode
+ %End
+ double mass();
+ double charge();
+ int atomCount();
+ SIP_PYOBJECT atomIndices();
+ %MethodCode
sipRes = iarray1dToNumpy(sipCpp->atomIndices().size(), sipCpp->atomIndices().data());
- %End
- bool selected();
- int refId();
- int mappedId();
+ %End
+ bool selected();
+ int refId();
+ int mappedId();
};
enum e_coverfrac_t {
};
class Selection {
-%TypeHeaderCode
+ %TypeHeaderCode
#include "gromacs/selection/selection.h"
#include "numpy_conv.h"
-using namespace gmx;
-%End
+ using namespace gmx;
+ %End
-public:
- bool isValid();
- bool __eq__(const Selection&);
- bool __ne__(const Selection&);
- const char* name();
- const char* selectionText();
- bool isDynamic();
- e_index_t type();
- bool hasOnlyAtoms();
- int atomCount();
- SIP_PYOBJECT atomIndices();
- %MethodCode
+ public:
+ bool isValid();
+ bool __eq__(const Selection &);
+ bool __ne__(const Selection &);
+ const char* name();
+ const char* selectionText();
+ bool isDynamic();
+ e_index_t type();
+ bool hasOnlyAtoms();
+ int atomCount();
+ SIP_PYOBJECT atomIndices();
+ %MethodCode
sipRes = iarray1dToNumpy(sipCpp->atomIndices().size(), sipCpp->atomIndices().data());
- %End
- int posCount();
- SelectionPosition position(int);
- SIP_PYOBJECT coordinates();
- %MethodCode
+ %End
+ int posCount();
+ SelectionPosition position(int);
+ SIP_PYOBJECT coordinates();
+ %MethodCode
sipRes = array2dToNumpy(sipCpp->coordinates().size(), 3, sipCpp->coordinates().data());
- %End
- bool hasVelocities();
- SIP_PYOBJECT velocities();
- %MethodCode
+ %End
+ bool hasVelocities();
+ SIP_PYOBJECT velocities();
+ %MethodCode
sipRes = array2dToNumpy(sipCpp->velocities().size(), 3, sipCpp->velocities().data());
- %End
- bool hasForces();
- SIP_PYOBJECT forces();
- %MethodCode
+ %End
+ bool hasForces();
+ SIP_PYOBJECT forces();
+ %MethodCode
sipRes = array2dToNumpy(sipCpp->forces().size(), 3, sipCpp->forces().data());
- %End
- SIP_PYOBJECT masses();
- %MethodCode
+ %End
+ SIP_PYOBJECT masses();
+ %MethodCode
sipRes = array1dToNumpy(sipCpp->masses().size(), sipCpp->masses().data());
- %End
- SIP_PYOBJECT charges();
- %MethodCode
+ %End
+ SIP_PYOBJECT charges();
+ %MethodCode
sipRes = array1dToNumpy(sipCpp->charges().size(), sipCpp->charges().data());
- %End
- SIP_PYOBJECT refIds();
- %MethodCode
+ %End
+ SIP_PYOBJECT refIds();
+ %MethodCode
sipRes = iarray1dToNumpy(sipCpp->refIds().size(), sipCpp->refIds().data());
- %End
- SIP_PYOBJECT mappedIds();
- %MethodCode
+ %End
+ SIP_PYOBJECT mappedIds();
+ %MethodCode
sipRes = iarray1dToNumpy(sipCpp->mappedIds().size(), sipCpp->mappedIds().data());
- %End
- bool isCoveredFractionDynamic();
- double coveredFraction();
- bool initCoveredFraction(e_coverfrac_t);
- void setEvaluateVelocities(bool);
- void setEvaluateForces(bool);
- void setOriginalId(int, int);
+ %End
+ bool isCoveredFractionDynamic();
+ double coveredFraction();
+ bool initCoveredFraction(e_coverfrac_t);
+ void setEvaluateVelocities(bool);
+ void setEvaluateForces(bool);
+ void setOriginalId(int, int);
};
%MappedType std::string
{
-%TypeHeaderCode
+ %TypeHeaderCode
#include <string>
-%End
+ %End
-%ConvertToTypeCode
-if (sipIsErr == NULL)
- return PyBytes_Check(sipPy);
+ %ConvertToTypeCode
+ if (sipIsErr == NULL)
+ {
+ return PyBytes_Check(sipPy);
+ }
*sipCppPtr = new std::string(PyBytes_AsString(sipPy), PyBytes_Size(sipPy));
return sipGetState(sipTransferObj);
-%End
+ %End
-%ConvertFromTypeCode
-return PyBytes_FromStringAndSize(sipCpp->data(),sipCpp->length());
-%End
+ %ConvertFromTypeCode
+ return PyBytes_FromStringAndSize(sipCpp->data(), sipCpp->length());
+ %End
};
struct t_atom {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/topology/atoms.h>
-%End
-
- double m; double q; /* Mass and charge */
- double mB; double qB; /* Mass and charge for Free Energy calc */
- unsigned short type; /* Atom type */
- unsigned short typeB; /* Atom type for Free Energy calc */
- int ptype; /* Particle type */
- int resind; /* Index into resinfo (in t_atoms) */
- int atomnumber; /* Atomic Number or NOTSET */
- char *elem /NoSetter/; /* Element name */
+ %End
+
+ double m; double q; /* Mass and charge */
+ double mB; double qB; /* Mass and charge for Free Energy calc */
+ unsigned short type; /* Atom type */
+ unsigned short typeB; /* Atom type for Free Energy calc */
+ int ptype; /* Particle type */
+ int resind; /* Index into resinfo (in t_atoms) */
+ int atomnumber; /* Atomic Number or NOTSET */
+ char *elem /NoSetter/; /* Element name */
};
struct t_resinfo {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/topology/atoms.h>
-%End
+ %End
- SIP_PYOBJECT /* char** */ name /NoSetter/ { /* Pointer to the residue name */
- %GetCode
+ SIP_PYOBJECT /* char** */ name /NoSetter/ { /* Pointer to the residue name */
+ %GetCode
sipPy = sipBuildResult(NULL, "A", (sipCpp->name) ? *(sipCpp->name) : NULL);
- %End
+ %End
};
- int nr; /* Residue number */
- unsigned char ic; /* Code for insertion of residues */
- int chainnum; /* Iincremented at TER or new chain id */
- char chainid; /* Chain identifier written/read to pdb */
- SIP_PYOBJECT /* char** */ rtp /NoSetter/ { /* rtp building block name (optional) */
- %GetCode
+ int nr; /* Residue number */
+ unsigned char ic; /* Code for insertion of residues */
+ int chainnum; /* Iincremented at TER or new chain id */
+ char chainid; /* Chain identifier written/read to pdb */
+ SIP_PYOBJECT /* char** */ rtp /NoSetter/ { /* rtp building block name (optional) */
+ %GetCode
sipPy = sipBuildResult(NULL, "A", (sipCpp->rtp) ? *(sipCpp->rtp) : NULL);
- %End
+ %End
};
};
struct t_pdbinfo {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/topology/atoms.h>
-%End
-
- int type; /* PDB record name */
- int atomnr; /* PDB atom number */
- char altloc; /* Alternate location indicator */
- char *atomnm /NoSetter/; /* True atom name including leading spaces */
- double occup; /* Occupancy */
- double bfac; /* B-factor */
- bool bAnisotropic; /* (an)isotropic switch */
+ %End
+
+ int type; /* PDB record name */
+ int atomnr; /* PDB atom number */
+ char altloc; /* Alternate location indicator */
+ char *atomnm /NoSetter/; /* True atom name including leading spaces */
+ double occup; /* Occupancy */
+ double bfac; /* B-factor */
+ bool bAnisotropic; /* (an)isotropic switch */
SIP_PYOBJECT /* int * */ uij /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = sipConvertToArray(sipCpp->uij, "i", 6, SIP_READ_ONLY);
- %End
+ %End
};
};
struct t_grps {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/topology/atoms.h>
-%End
+ %End
int nr; /* Number of different groups */
SIP_PYOBJECT /* int* */ nm_ind /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = sipConvertToArray(sipCpp->nm_ind, "i", sipCpp->nr, SIP_READ_ONLY);
- %End
+ %End
};
};
struct t_atoms {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/topology/atoms.h>
// Sip creates 'copy_[typename]' functions. In this case it coincides with function from atoms.h, so we need to rename it.
#define copy_t_atoms copy_t_atoms_sip
-%End
+ %End
int nr; /* Nr of atoms */
t_atom *atom /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = sipConvertToTypedArray(sipCpp->atom, sipType_t_atom, NULL, sizeof(t_atom), sipCpp->nr, SIP_READ_ONLY);
- %End
+ %End
};
PStringListWrapper atomname /NoSetter/ {
- %GetCode
+ %GetCode
PStringListWrapper *wrapper = new PStringListWrapper(sipCpp->atomname, sipCpp->nr);
sipPy = sipConvertFromType(wrapper, sipType_PStringListWrapper, Py_None);
- %End
+ %End
};
PStringListWrapper atomtype /NoSetter/ {
- %GetCode
+ %GetCode
PStringListWrapper *wrapper = new PStringListWrapper(sipCpp->atomtype, sipCpp->nr);
sipPy = sipConvertFromType(wrapper, sipType_PStringListWrapper, Py_None);
- %End
+ %End
};
PStringListWrapper atomtypeB /NoSetter/ {
- %GetCode
+ %GetCode
PStringListWrapper *wrapper = new PStringListWrapper(sipCpp->atomname, sipCpp->nr);
sipPy = sipConvertFromType(wrapper, sipType_PStringListWrapper, Py_None);
- %End
+ %End
};
int nres;
t_resinfo *resinfo /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = sipConvertToTypedArray(sipCpp->resinfo, sipType_t_resinfo, NULL, sizeof(t_resinfo), sipCpp->nres, SIP_READ_ONLY);
- %End
+ %End
};
// FIXME: how many pdbinfo's are there?
t_pdbinfo *pdbinfo /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = sipConvertToTypedArray(sipCpp->pdbinfo, sipType_t_pdbinfo, NULL, sizeof(t_pdbinfo), sipCpp->nres, SIP_READ_ONLY);
- %End
+ %End
};
};
%ModuleHeaderCode
class PStringListWrapper {
-public:
- PStringListWrapper(char ***stringList, size_t size);
- const char* operator[] (size_t i);
-private:
- char ***stringList;
- size_t size;
+ public:
+ PStringListWrapper(char ***stringList, size_t size);
+ const char* operator[] (size_t i);
+ private:
+ char ***stringList;
+ size_t size;
};
%End
%ModuleCode
PStringListWrapper::PStringListWrapper(char ***stringList, size_t size) :
stringList(stringList), size(size)
- {}
+{}
const char* PStringListWrapper::operator[] (size_t i) {
if (i >= size)
+ {
return NULL;
+ }
return *stringList[i];
}
%End
class PStringListWrapper /NoDefaultCtors/ {
-public:
- const char* operator[] (int i);
- %MethodCode
+ public:
+ const char* operator[] (int i);
+ %MethodCode
sipRes = (*sipCpp)[a0];
- if (!sipRes) {
+ if (!sipRes)
+ {
SIP_BLOCK_THREADS;
PyErr_SetString(PyExc_IndexError, "Index out of range");
SIP_UNBLOCK_THREADS;
sipIsErr = 1;
}
- %End
+ %End
};
struct t_topology
{
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/topology/topology.h>
-%End
+ %End
SIP_PYOBJECT name /NoSetter/ { // Name of the topology
- %GetCode
+ %GetCode
// name is stored as char**, when the outer pointer is null, let sip wrap it as None
sipPy = sipBuildResult(NULL, "A", (sipCpp->name) ? *(sipCpp->name) : NULL);
- %End
+ %End
};
//t_idef idef; [> The interaction function definition <]
t_atoms atoms; /* The atoms */
%Include cmdlinerunner.sip
%PostInitialisationCode
- import_array();
+import_array();
%End
class AbstractAnalysisData /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/analysisdata/abstractdata.h>
-%End
-public:
- bool isMultipoint() const;
- int dataSetCount() const;
- int columnCount(int dataSet) const;
- int columnCount() const;
- virtual int frameCount() const = 0;
- AnalysisDataFrameRef tryGetDataFrame(int index) const;
- AnalysisDataFrameRef getDataFrame(int index) const;
- bool requestStorage(int nframes);
+ %End
+ public:
+ bool isMultipoint() const;
+ int dataSetCount() const;
+ int columnCount(int dataSet) const;
+ int columnCount() const;
+ virtual int frameCount() const = 0;
+ AnalysisDataFrameRef tryGetDataFrame(int index) const;
+ AnalysisDataFrameRef getDataFrame(int index) const;
+ bool requestStorage(int nframes);
};
class AnalysisDataFrameRef /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/analysisdata/dataframe.h>
-%End
-public:
- bool isValid() const;
- //const AnalysidDataFrameHeader& header() const;
- int frameIndex() const;
- double x() const;
- double dx() const;
- int pointSetCount() const;
- AnalysisDataPointSetRef pointSet(int index) const;
- double y(int i) const;
- double dy(int i) const;
- bool present(int i) const;
- bool allPresent() const;
+ %End
+ public:
+ bool isValid() const;
+ //const AnalysidDataFrameHeader& header() const;
+ int frameIndex() const;
+ double x() const;
+ double dx() const;
+ int pointSetCount() const;
+ AnalysisDataPointSetRef pointSet(int index) const;
+ double y(int i) const;
+ double dy(int i) const;
+ bool present(int i) const;
+ bool allPresent() const;
};
class AnalysisDataFrameHeader /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/analysisdata/dataframe.h>
-%End
-public:
- bool isValid() const;
- int index() const;
- double x() const;
- double dx() const;
+ %End
+ public:
+ bool isValid() const;
+ int index() const;
+ double x() const;
+ double dx() const;
};
class AnalysisDataPointSetRef /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/analysisdata/dataframe.h>
-%End
-public:
- const AnalysisDataFrameHeader& header() const;
- int frameIndex() const;
- double x() const;
- double dx() const;
- int dataSetIndex() const;
- int firstColumn() const;
- int columnCount() const;
- int lastColumn() const;
- //const std::vector<AnalysisDataValue>& values() const;
- double y(int i) const;
- double dy(int i) const;
- bool present(int i) const;
- bool allPresent() const;
+ %End
+ public:
+ const AnalysisDataFrameHeader &header() const;
+ int frameIndex() const;
+ double x() const;
+ double dx() const;
+ int dataSetIndex() const;
+ int firstColumn() const;
+ int columnCount() const;
+ int lastColumn() const;
+ //const std::vector<AnalysisDataValue>& values() const;
+ double y(int i) const;
+ double dy(int i) const;
+ bool present(int i) const;
+ bool allPresent() const;
};
struct t_trxframe {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/trajectory/trajectoryframe.h>
#include "numpy_conv.h"
-%End
+ %End
int not_ok;
- bool bDouble;
- int natoms;
- bool bTitle;
- const char *title;
- bool bStep;
- int step;
- bool bTime;
- double time;
- bool bLambda;
- bool bFepState;
- double lambda;
- int fep_state;
- bool bAtoms;
- t_atoms *atoms;
- bool bPrec;
- double prec;
- bool bX;
+ bool bDouble;
+ int natoms;
+ bool bTitle;
+ const char *title;
+ bool bStep;
+ int step;
+ bool bTime;
+ double time;
+ bool bLambda;
+ bool bFepState;
+ double lambda;
+ int fep_state;
+ bool bAtoms;
+ t_atoms *atoms;
+ bool bPrec;
+ double prec;
+ bool bX;
SIP_PYOBJECT x /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = array2dToNumpy(sipCpp->natoms, 3, sipCpp->x);
- %End
+ %End
};
- bool bV;
+ bool bV;
SIP_PYOBJECT v /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = array2dToNumpy(sipCpp->natoms, 3, sipCpp->v);
- %End
+ %End
};
- bool bF;
+ bool bF;
SIP_PYOBJECT f /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = array2dToNumpy(sipCpp->natoms, 3, sipCpp->f);
- %End
+ %End
};
- bool bBox;
+ bool bBox;
SIP_PYOBJECT box /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = array2dToNumpy(3, 3, sipCpp->box);
- %End
+ %End
};
- bool bPBC;
- int ePBC;
- bool bIndex;
+ bool bPBC;
+ int ePBC;
+ bool bIndex;
SIP_PYOBJECT index /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = array1dToNumpy(sipCpp->natoms, sipCpp->index);
- %End
+ %End
};
};
struct t_pbc {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/pbcutil/pbc.h>
#include "numpy_conv.h"
-%End
+ %End
int ePBC;
- int ndim_ePBC;
- int ePBCDX;
- int dim;
+ int ndim_ePBC;
+ int ePBCDX;
+ int dim;
SIP_PYOBJECT box /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = array2dToNumpy(3, 3, sipCpp->box);
- %End
+ %End
};
SIP_PYOBJECT fbox_diag /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = array1dToNumpy(3, sipCpp->fbox_diag);
- %End
+ %End
};
SIP_PYOBJECT hbox_diag /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = array1dToNumpy(3, sipCpp->hbox_diag);
- %End
+ %End
};
SIP_PYOBJECT mhbox_diag /NoSetter/ {
- %GetCode
+ %GetCode
sipPy = array1dToNumpy(3, sipCpp->mhbox_diag);
- %End
+ %End
};
double max_cutoff2;
- int ntric_vec;
+ int ntric_vec;
/*ivec tric_shift[MAX_NTRICVEC];*/
/*rvec tric_vec[MAX_NTRICVEC];*/
};
class AnalysisDataParallelOptions /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/analysisdata/paralleloptions.h>
-%End
-public:
- AnalysisDataParallelOptions();
+ %End
+ public:
+ AnalysisDataParallelOptions();
};
class TrajectoryAnalysisModuleDataPointer;
class TrajectoryAnalysisModuleData /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/trajectoryanalysis/analysismodule.h>
-using namespace gmx;
-%End
+ using namespace gmx;
+ %End
-public:
- virtual void finish() = 0;
+ public:
+ virtual void finish() = 0;
};
class TrajectoryAnalysisModulePointer;
-class TrajectoryAnalysisModule /VirtualErrorHandler=vehandler/ {
-%TypeHeaderCode
+class TrajectoryAnalysisModule /VirtualErrorHandler = vehandler/ {
+ %TypeHeaderCode
#include <gromacs/trajectoryanalysis/analysismodule.h>
-using namespace gmx;
-%End
-public:
- virtual void initOptions(IOptionsContainer *options, TrajectoryAnalysisSettings *settings) = 0;
- virtual void optionsFinished(TrajectoryAnalysisSettings *settings);
- virtual void initAnalysis(const TrajectoryAnalysisSettings &settings, const TopologyInformation &top) = 0;
- virtual void initAfterFirstFrame(const TrajectoryAnalysisSettings &settings, const t_trxframe &fr);
- // Discarding the virtual for now
- std::unique_ptr<TrajectoryAnalysisModuleData> startFrames (const AnalysisDataParallelOptions &opt, const SelectionCollection &selections);
- virtual void analyzeFrame(int frnr, const t_trxframe &fr /NoCopy/, t_pbc *pbc, TrajectoryAnalysisModuleData *pdata ) = 0;
- virtual void finishFrames(TrajectoryAnalysisModuleData *pdata);
- virtual void finishAnalysis(int nframes) = 0;
- virtual void writeOutput() = 0;
- int datasetCount() const;
- void finishFrameSerial(int frameIndex);
- AbstractAnalysisData& datasetFromIndex(int index) const;
- AbstractAnalysisData& datasetFromName(const char *name) const;
-protected:
- TrajectoryAnalysisModule();
-private:
- TrajectoryAnalysisModule(const TrajectoryAnalysisModule &other);
+ using namespace gmx;
+ %End
+ public:
+ virtual void initOptions(IOptionsContainer *options, TrajectoryAnalysisSettings *settings) = 0;
+ virtual void optionsFinished(TrajectoryAnalysisSettings *settings);
+ virtual void initAnalysis(const TrajectoryAnalysisSettings &settings, const TopologyInformation &top) = 0;
+ virtual void initAfterFirstFrame(const TrajectoryAnalysisSettings &settings, const t_trxframe &fr);
+ // Discarding the virtual for now
+ std::unique_ptr < TrajectoryAnalysisModuleData > startFrames (const AnalysisDataParallelOptions &opt, const SelectionCollection &selections);
+ virtual void analyzeFrame(int frnr, const t_trxframe &fr /NoCopy/, t_pbc *pbc, TrajectoryAnalysisModuleData *pdata ) = 0;
+ virtual void finishFrames(TrajectoryAnalysisModuleData *pdata);
+ virtual void finishAnalysis(int nframes) = 0;
+ virtual void writeOutput() = 0;
+ int datasetCount() const;
+ void finishFrameSerial(int frameIndex);
+ AbstractAnalysisData &datasetFromIndex(int index) const;
+ AbstractAnalysisData &datasetFromName(const char *name) const;
+ protected:
+ TrajectoryAnalysisModule();
+ private:
+ TrajectoryAnalysisModule(const TrajectoryAnalysisModule &other);
};
*/
class TrajectoryAnalysisSettings {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/trajectoryanalysis/analysissettings.h>
-using namespace gmx;
-%End
+ using namespace gmx;
+ %End
-public:
- enum {
- efRequireTop = 1,
- efUseTopX = 2,
- efNoUserPBC = 16,
- efNoUserRmPBC = 32
- };
+ public:
+ enum {
+ efRequireTop = 1,
+ efUseTopX = 2,
+ efNoUserPBC = 16,
+ efNoUserRmPBC = 32
+ };
- TrajectoryAnalysisSettings();
- void setOptionsModuleSettings(ICommandLineOptionsModuleSettings *settings);
- /*
- const TimeUnitManager& timeUnitManager() const;
- TimeUnit timeUnit();
- const AnalysisDataPlotSettings& plotSettings() const;
- */
- unsigned long flags() const;
- bool hasFlag(unsigned long flag) const;
- bool hasPBC() const;
- bool hasRmPBC() const;
- int frflags() const;
- void setFlags(unsigned long flags);
- void setFlag(unsigned long flag, bool bSet = true);
- void setPBC(bool bPBC);
- void setRmPBC(bool bRmPBC);
- void setFrameFlags(int frflags);
- void setHelpText(const char *helpText);
- %MethodCode
+ TrajectoryAnalysisSettings();
+ void setOptionsModuleSettings(ICommandLineOptionsModuleSettings *settings);
+ /*
+ const TimeUnitManager& timeUnitManager() const;
+ TimeUnit timeUnit();
+ const AnalysisDataPlotSettings& plotSettings() const;
+ */
+ unsigned long flags() const;
+ bool hasFlag(unsigned long flag) const;
+ bool hasPBC() const;
+ bool hasRmPBC() const;
+ int frflags() const;
+ void setFlags(unsigned long flags);
+ void setFlag(unsigned long flag, bool bSet = true);
+ void setPBC(bool bPBC);
+ void setRmPBC(bool bRmPBC);
+ void setFrameFlags(int frflags);
+ void setHelpText(const char *helpText);
+ %MethodCode
const char *const helpText[] = {a0};
sipCpp->setHelpText(helpText);
- %End
-private:
- TrajectoryAnalysisSettings(const TrajectoryAnalysisSettings &other);
+ %End
+ private:
+ TrajectoryAnalysisSettings(const TrajectoryAnalysisSettings &other);
};
class TopologyInformation {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/trajectoryanalysis/analysissettings.h>
-using namespace gmx;
-%End
-public:
- bool hasTopology() const;
- bool hasFullTopology() const;
- t_topology* topology() const;
-private:
- TopologyInformation(const TopologyInformation &other);
- ~TopologyInformation();
+ using namespace gmx;
+ %End
+ public:
+ bool hasTopology() const;
+ bool hasFullTopology() const;
+ t_topology* topology() const;
+ private:
+ TopologyInformation(const TopologyInformation &other);
+ ~TopologyInformation();
};
*/
class TrajectoryAnalysisCommandLineRunner /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/trajectoryanalysis/cmdlinerunner.h>
-%End
+ %End
-public:
- static int runAsMain(SIP_PYOBJECT mod, SIP_PYLIST argv);
- %MethodCode
- auto runner = [a0] (int argc, char **argv) -> int {
- return TrajectoryAnalysisCommandLineRunner::runAsMain(argc, argv, PyFactory<gmx::TrajectoryAnalysisModule>(sipType_TrajectoryAnalysisModule, a0));
+ public:
+ static int runAsMain(SIP_PYOBJECT mod, SIP_PYLIST argv);
+ %MethodCode
+ auto runner = [a0] (int argc, char **argv)->int {
+ return TrajectoryAnalysisCommandLineRunner::runAsMain(argc, argv, PyFactory < gmx::TrajectoryAnalysisModule > (sipType_TrajectoryAnalysisModule, a0));
};
sipRes = argv_wrapper(a1, runner);
- %End
+ %End
};
// These classes belong to gromacs.Selection, but will remain here until
// t_trxframe and t_pbc are split from TrajectoryAnalysis
class SelectionCollection /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/selection/selectioncollection.h>
-%End
-public:
- SelectionCollection();
- void evaluate(t_trxframe *fr, t_pbc *pbc);
- void evaluateFinal(int nframes);
+ %End
+ public:
+ SelectionCollection();
+ void evaluate(t_trxframe *fr, t_pbc *pbc);
+ void evaluateFinal(int nframes);
};
class ITopologyProvider;
-class SelectionOptionBehavior : public IOptionsBehavior /NoDefaultCtors/ {
-%TypeHeaderCode
+class SelectionOptionBehavior: public IOptionsBehavior /NoDefaultCtors/ {
+ %TypeHeaderCode
#include <gromacs/selection/selectionoptionbehavior.h>
-using gmx::SelectionOptionBehavior;
-using gmx::ITopologyProvider;
-%End
-public:
- SelectionOptionBehavior(SelectionCollection *selections,
- ITopologyProvider *topologyProvider);
- void initOptions(IOptionsContainer *options);
- virtual void initBehavior(Options *options);
- virtual void optionsFinishing(Options *options);
- virtual void optionsFinished();
+ using gmx::SelectionOptionBehavior;
+ using gmx::ITopologyProvider;
+ %End
+ public:
+ SelectionOptionBehavior(SelectionCollection *selections,
+ ITopologyProvider *topologyProvider);
+ void initOptions(IOptionsContainer *options);
+ virtual void initBehavior(Options *options);
+ virtual void optionsFinishing(Options *options);
+ virtual void optionsFinished();
};
class TrajectoryAnalysisRunnerCommon /NoDefaultCtors/ {
-%TypeHeaderCode
+ %TypeHeaderCode
#include <gromacs/trajectoryanalysis/runnercommon.h>
-%End
-public:
- explicit TrajectoryAnalysisRunnerCommon(TrajectoryAnalysisSettings *settings);
- ~TrajectoryAnalysisRunnerCommon();
+ %End
+ public:
+ explicit TrajectoryAnalysisRunnerCommon(TrajectoryAnalysisSettings *settings);
+ ~TrajectoryAnalysisRunnerCommon();
- ITopologyProvider *topologyProvider();
+ ITopologyProvider *topologyProvider();
- void initOptions(IOptionsContainer *options, TimeUnitBehavior *timeUnitBehavior);
- void optionsFinished();
- void initTopology();
- void initFirstFrame();
- void initFrameIndexGroup();
- bool readNextFrame();
- void initFrame();
+ void initOptions(IOptionsContainer *options, TimeUnitBehavior *timeUnitBehavior);
+ void optionsFinished();
+ void initTopology();
+ void initFirstFrame();
+ void initFrameIndexGroup();
+ bool readNextFrame();
+ void initFrame();
- bool hasTrajectory() const;
- const TopologyInformation &topologyInformation() const;
- t_trxframe &frame() const;
+ bool hasTrajectory() const;
+ const TopologyInformation &topologyInformation() const;
+ t_trxframe &frame() const;
};
#ifndef PARALLELOPTIONS_H
#define PARALLELOPTIONS_H
-namespace gmx {
-class AnalysisDataParallelOptions {
+namespace gmx
+{
+class AnalysisDataParallelOptions
+{
public:
AnalysisDataParallelOptions();
};
#ifndef RUNNERCOMMON_H
#define RUNNERCOMMON_h
-namespace gmx {
+namespace gmx
+{
class ITopologyProvider;
-class TrajectoryAnalysisRunnerCommon {
+class TrajectoryAnalysisRunnerCommon
+{
public:
- explicit TrajectoryAnalysisRunnerCommon(TrajectoryAnalysisSettings*);
- ~TrajectoryAnalysisRunnerCommon();
+ explicit TrajectoryAnalysisRunnerCommon(TrajectoryAnalysisSettings*);
+ ~TrajectoryAnalysisRunnerCommon();
- ITopologyProvider *topologyProvider();
+ ITopologyProvider *topologyProvider();
- void initOptions(IOptionsContainer*, TimeUnitBehavior*);
- void optionsFinished();
- void initTopology();
- void initFirstFrame();
- void initFrameIndexGroup();
- bool readNextFrame();
- void initFrame();
+ void initOptions(IOptionsContainer*, TimeUnitBehavior*);
+ void optionsFinished();
+ void initTopology();
+ void initFirstFrame();
+ void initFrameIndexGroup();
+ bool readNextFrame();
+ void initFrame();
- bool hasTrajectory() const;
- const TopologyInformation &topologyInformation() const;
- t_trxframe &frame() const;
+ bool hasTrajectory() const;
+ const TopologyInformation &topologyInformation() const;
+ t_trxframe &frame() const;
};
}