mirror of https://github.com/KLayout/klayout.git
WIP: refactoring, added special GSI methods for Python binding
This commit is contained in:
parent
2c18bc6c46
commit
be6e05da55
|
|
@ -0,0 +1,80 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
KLayout Layout Viewer
|
||||||
|
Copyright (C) 2006-2022 Matthias Koefferlein
|
||||||
|
|
||||||
|
This program 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.
|
||||||
|
|
||||||
|
This program 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 this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Python.h>
|
||||||
|
|
||||||
|
#include "gsiDecl.h"
|
||||||
|
#include "pyaInternal.h"
|
||||||
|
|
||||||
|
namespace gsi
|
||||||
|
{
|
||||||
|
|
||||||
|
gsi::Class<pya::MethodTableEntry> decl_PythonFunction ("tl", "PythonFunction",
|
||||||
|
gsi::method ("methods", &pya::MethodTableEntry::methods, "@brief Gets the list of methods bound to this Python function") +
|
||||||
|
gsi::method ("name", &pya::MethodTableEntry::name, "@brief Gets the name of this Python function") +
|
||||||
|
gsi::method ("is_static", &pya::MethodTableEntry::is_static, "@brief Gets the value indicating whether this Python function is 'static' (class function)") +
|
||||||
|
gsi::method ("is_protected", &pya::MethodTableEntry::is_protected, "@brief Gets a value indicating whether this function is protected"),
|
||||||
|
"@hide"
|
||||||
|
);
|
||||||
|
|
||||||
|
static std::vector<const pya::MethodTableEntry *> get_python_methods (const gsi::ClassBase *cls, bool st)
|
||||||
|
{
|
||||||
|
const pya::MethodTable *mt = pya::MethodTable::method_table_by_class (cls);
|
||||||
|
|
||||||
|
std::vector<const pya::MethodTableEntry *> methods;
|
||||||
|
|
||||||
|
if (mt != 0) {
|
||||||
|
for (auto m = mt->method_table ().begin (); m != mt->method_table ().end (); ++m) {
|
||||||
|
if (m->is_enabled () && m->is_static () == st) {
|
||||||
|
methods.push_back (m.operator-> ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return methods;
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::vector<std::pair<const pya::MethodTableEntry *, const pya::MethodTableEntry *> > get_python_properties (const gsi::ClassBase *cls, bool st)
|
||||||
|
{
|
||||||
|
const pya::MethodTable *mt = pya::MethodTable::method_table_by_class (cls);
|
||||||
|
|
||||||
|
std::vector<std::pair<const pya::MethodTableEntry *, const pya::MethodTableEntry *> > methods;
|
||||||
|
|
||||||
|
if (mt != 0) {
|
||||||
|
for (auto m = mt->property_table ().begin (); m != mt->property_table ().end (); ++m) {
|
||||||
|
if (m->first.is_enabled () && m->first.is_static () == st) {
|
||||||
|
methods.push_back (std::make_pair (&m->first, &m->second));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return methods;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
gsi::ClassExt<gsi::ClassBase> class_base_ext (
|
||||||
|
gsi::method_ext ("python_methods", &get_python_methods, gsi::arg ("static"), "@brief Gets the Python methods (static or non-static)") +
|
||||||
|
gsi::method_ext ("python_properties", &get_python_properties, gsi::arg ("static"), "@brief Gets the Python properties (static or non-static) as a list of getter/setter pairs\nNote that if a getter or setter is not available the list of Python functions for this part is empty."),
|
||||||
|
"@hide"
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue