1#include "pybind11/pybind11.h"
2#include "pybind11/stl.h"
13using namespace pybind11::literals;
20template <
typename T,
typename C>
21void declareAccessors(C& cls,
std::string const& name) {
23 cls.def(getName.
c_str(), (
T (PropertySet::*)(
std::string const&) const) & PropertySet::get<
T>,
"name"_a);
24 cls.def(getName.
c_str(), (
T (PropertySet::*)(
std::string const&,
T const&) const) & PropertySet::get<
T>,
25 "name"_a,
"defaultValue"_a);
28 cls.def(getArrayName.
c_str(),
29 (
std::vector<T> (PropertySet::*)(
std::string const&) const) & PropertySet::getArray<
T>,
"name"_a);
32 cls.def(setName.
c_str(), (void (PropertySet::*)(
std::string const&,
T const&)) & PropertySet::set<
T>,
34 cls.def(setName.
c_str(),
35 (void (PropertySet::*)(
std::string const&,
std::vector<
T> const&)) & PropertySet::set<
T>,
39 cls.def(addName.
c_str(), (void (PropertySet::*)(
std::string const&,
T const&)) & PropertySet::
add<
T>,
41 cls.def(addName.
c_str(),
42 (void (PropertySet::*)(
std::string const&,
std::vector<
T> const&)) & PropertySet::
add<
T>,
46 cls.attr(typeName.
c_str()) = py::cast(PropertySet::typeOfT<T>(), py::return_value_policy::reference);
52 wrappers.
wrapType(py::class_<std::type_info>(wrappers.module,
"TypeInfo"), [](
auto &mod,
auto &cls) {
54 [](std::type_info const &self, std::type_info const &other) { return self == other; });
61 using PyPropertySet = py::class_<PropertySet, std::shared_ptr<PropertySet>>;
62 wrappers.wrapType(PyPropertySet(wrappers.module,
"PropertySet"), [](
auto &mod,
auto &cls) {
63 cls.def(py::init<bool>(),
"flat"_a =
false);
83 py::overload_cast<std::string const &, PropertySet const &, std::string const &, bool>(
86 "dest"_a,
"source"_a,
"name"_a,
"asScalar"_a = false
99 declareAccessors<bool>(cls,
"Bool");
100 declareAccessors<short>(cls,
"Short");
101 declareAccessors<int>(cls,
"Int");
102 declareAccessors<long>(cls,
"Long");
103 declareAccessors<long long>(cls,
"LongLong");
104 declareAccessors<unsigned long long>(cls,
"UnsignedLongLong");
105 declareAccessors<float>(cls,
"Float");
106 declareAccessors<double>(cls,
"Double");
107 declareAccessors<std::nullptr_t>(cls,
"Undef");
108 declareAccessors<std::string>(cls,
"String");
109 declareAccessors<DateTime>(cls,
"DateTime");
110 declareAccessors<std::shared_ptr<PropertySet>>(cls,
"PropertySet");
table::Key< std::string > name
Interface for DateTime class.
A helper class for subdividing pybind11 module across multiple translation units (i....
PyType wrapType(PyType cls, ClassWrapperCallback function, bool setModuleName=true)
Add a type (class or enum) wrapper, deferring method and other attribute definitions until finish() i...
std::string getAsString(std::string const &name) const
Get the last value for a string property name (possibly hierarchical).
size_t nameCount(bool topLevelOnly=true) const
Get the number of names in the PropertySet, optionally including those in subproperties.
int getAsInt(std::string const &name) const
Get the last value for a bool/char/short/int property name (possibly hierarchical).
virtual void remove(std::string const &name)
Remove all values for a property name (possibly hierarchical).
bool isArray(std::string const &name) const
Determine if a name (possibly hierarchical) has multiple values.
int64_t getAsInt64(std::string const &name) const
Get the last value for a bool/char/short/int/int64_t property name (possibly hierarchical).
bool isUndefined(std::string const &name) const
Determine if a name (possibly hierarchical) has a defined value.
bool exists(std::string const &name) const
Determine if a name (possibly hierarchical) exists.
std::vector< std::string > names(bool topLevelOnly=true) const
Get the names in the PropertySet, optionally including those in subproperties.
size_t valueCount() const
Get the number of values in the entire PropertySet, counting each element of a vector.
bool isPropertySetPtr(std::string const &name) const
Determine if a name (possibly hierarchical) is a subproperty.
virtual void copy(std::string const &dest, PropertySet const &source, std::string const &name, bool asScalar=false)
Replace a single value vector in the destination with one from the source.
virtual void combine(PropertySet const &source)
Append all value vectors from the source to their corresponding properties.
std::shared_ptr< PropertySet > getAsPropertySetPtr(std::string const &name) const
Get the last value for a subproperty name (possibly hierarchical).
std::type_info const & typeOf(std::string const &name) const
Get the type of values for a property name (possibly hierarchical).
double getAsDouble(std::string const &name) const
Get the last value for any arithmetic property name (possibly hierarchical).
Persistable::Ptr getAsPersistablePtr(std::string const &name) const
Get the last value for a Persistable name (possibly hierarchical).
uint64_t getAsUInt64(std::string const &name) const
Get the last value for an bool/char/short/int/int64_t property name (possibly hierarchical).
virtual std::shared_ptr< PropertySet > deepCopy() const
Make a deep copy of the PropertySet and all of its contents.
std::vector< std::string > propertySetNames(bool topLevelOnly=true) const
A variant of names that only returns the names of subproperties.
virtual std::string toString(bool topLevelOnly=false, std::string const &indent="") const
Generate a string representation of the PropertySet.
std::vector< std::string > paramNames(bool topLevelOnly=true) const
A variant of names that excludes the names of subproperties.
bool getAsBool(std::string const &name) const
Get the last value for a bool property name (possibly hierarchical).
void wrapPropertySet(WrapperCollection &wrappers)