diff options
Diffstat (limited to 'sources/shiboken2/libshiboken/sbkenum.cpp')
-rw-r--r-- | sources/shiboken2/libshiboken/sbkenum.cpp | 195 |
1 files changed, 97 insertions, 98 deletions
diff --git a/sources/shiboken2/libshiboken/sbkenum.cpp b/sources/shiboken2/libshiboken/sbkenum.cpp index 26b40c3cb..71fcf5f64 100644 --- a/sources/shiboken2/libshiboken/sbkenum.cpp +++ b/sources/shiboken2/libshiboken/sbkenum.cpp @@ -49,18 +49,18 @@ #include <cstring> #include <vector> -#define SBK_ENUM(ENUM) reinterpret_cast<SbkEnumObject*>(ENUM) +#define SBK_ENUM(ENUM) reinterpret_cast<SbkEnumObject *>(ENUM) #define SBK_TYPE_CHECK(o) (strcmp(Py_TYPE(Py_TYPE(o))->tp_name, "Shiboken.EnumType") == 0) -typedef PyObject* (*enum_func)(PyObject*, PyObject*); +typedef PyObject *(*enum_func)(PyObject *, PyObject *); extern "C" { struct SbkEnumTypePrivate { - SbkConverter** converterPtr; - SbkConverter* converter; - const char* cppName; + SbkConverter **converterPtr; + SbkConverter *converter; + const char *cppName; }; struct SbkEnumType @@ -72,10 +72,10 @@ struct SbkEnumObject { PyObject_HEAD long ob_value; - PyObject* ob_name; + PyObject *ob_name; }; -static PyObject* SbkEnumObject_repr(PyObject* self) +static PyObject *SbkEnumObject_repr(PyObject *self) { const SbkEnumObject *enumObj = SBK_ENUM(self); if (enumObj->ob_name) @@ -84,38 +84,38 @@ static PyObject* SbkEnumObject_repr(PyObject* self) return Shiboken::String::fromFormat("%s(%ld)", (Py_TYPE(self))->tp_name, enumObj->ob_value); } -static PyObject* SbkEnumObject_name(PyObject* self, void*) +static PyObject *SbkEnumObject_name(PyObject *self, void *) { - SbkEnumObject *enum_self = SBK_ENUM(self); + auto *enum_self = SBK_ENUM(self); - if (enum_self->ob_name == NULL) + if (enum_self->ob_name == nullptr) Py_RETURN_NONE; Py_INCREF(enum_self->ob_name); return enum_self->ob_name; } -static PyObject* SbkEnum_tp_new(PyTypeObject *type, PyObject *args, PyObject *) +static PyObject *SbkEnum_tp_new(PyTypeObject *type, PyObject *args, PyObject *) { long itemValue = 0; if (!PyArg_ParseTuple(args, "|l:__new__", &itemValue)) - return 0; + return nullptr; - SbkEnumObject* self = PyObject_New(SbkEnumObject, type); + SbkEnumObject *self = PyObject_New(SbkEnumObject, type); if (!self) - return 0; + return nullptr; self->ob_value = itemValue; - PyObject* item = Shiboken::Enum::getEnumItemFromValue(type, itemValue); + PyObject *item = Shiboken::Enum::getEnumItemFromValue(type, itemValue); if (item) { - self->ob_name = SbkEnumObject_name(item, 0); + self->ob_name = SbkEnumObject_name(item, nullptr); Py_XDECREF(item); } else { - self->ob_name = 0; + self->ob_name = nullptr; } - return reinterpret_cast<PyObject*>(self); + return reinterpret_cast<PyObject *>(self); } -static PyObject* enum_op(enum_func f, PyObject *a, PyObject *b) { +static PyObject *enum_op(enum_func f, PyObject *a, PyObject *b) { PyObject *valA = a; PyObject *valB = b; PyObject *result = nullptr; @@ -160,54 +160,54 @@ static PyObject* enum_op(enum_func f, PyObject *a, PyObject *b) { * Thus calling PyInt_FromLong() will result in calling PyLong_FromLong in * Py3k. */ -static PyObject* enum_int(PyObject* v) +static PyObject *enum_int(PyObject *v) { return PyInt_FromLong(SBK_ENUM(v)->ob_value); } -static PyObject* enum_and(PyObject* self, PyObject* b) +static PyObject *enum_and(PyObject *self, PyObject *b) { return enum_op(PyNumber_And, self, b); } -static PyObject* enum_or(PyObject* self, PyObject* b) +static PyObject *enum_or(PyObject *self, PyObject *b) { return enum_op(PyNumber_Or, self, b); } -static PyObject* enum_xor(PyObject* self, PyObject* b) +static PyObject *enum_xor(PyObject *self, PyObject *b) { return enum_op(PyNumber_Xor, self, b); } -static int enum_bool(PyObject* v) +static int enum_bool(PyObject *v) { return (SBK_ENUM(v)->ob_value > 0); } -static PyObject* enum_add(PyObject* self, PyObject* v) +static PyObject *enum_add(PyObject *self, PyObject *v) { return enum_op(PyNumber_Add, self, v); } -static PyObject* enum_subtract(PyObject* self, PyObject* v) +static PyObject *enum_subtract(PyObject *self, PyObject *v) { return enum_op(PyNumber_Subtract, self, v); } -static PyObject* enum_multiply(PyObject* self, PyObject* v) +static PyObject *enum_multiply(PyObject *self, PyObject *v) { return enum_op(PyNumber_Multiply, self, v); } #ifndef IS_PY3K -static PyObject* enum_divide(PyObject* self, PyObject* v) +static PyObject *enum_divide(PyObject *self, PyObject *v) { return enum_op(PyNumber_Divide, self, v); } #endif -static PyObject* enum_richcompare(PyObject* self, PyObject* other, int op) +static PyObject *enum_richcompare(PyObject *self, PyObject *other, int op) { PyObject *valA = self; PyObject *valB = other; @@ -233,9 +233,8 @@ static PyObject* enum_richcompare(PyObject* self, PyObject* other, int op) if (!(enumA || enumB)) { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; - } else { - result = PyObject_RichCompare(valA, valB, op); } + result = PyObject_RichCompare(valA, valB, op); // Decreasing the reference of the used variables a and b. if (enumA) @@ -246,21 +245,21 @@ static PyObject* enum_richcompare(PyObject* self, PyObject* other, int op) return result; } -static Py_hash_t enum_hash(PyObject* pyObj) +static Py_hash_t enum_hash(PyObject *pyObj) { - Py_hash_t val = reinterpret_cast<SbkEnumObject*>(pyObj)->ob_value; + Py_hash_t val = reinterpret_cast<SbkEnumObject *>(pyObj)->ob_value; if (val == -1) val = -2; return val; } static PyGetSetDef SbkEnumGetSetList[] = { - {const_cast<char*>("name"), &SbkEnumObject_name, 0, 0, 0}, - {0, 0, 0, 0, 0} // Sentinel + {const_cast<char *>("name"), &SbkEnumObject_name, nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr, nullptr, nullptr} // Sentinel }; -static void SbkEnumTypeDealloc(PyObject* pyObj); -static PyObject* SbkEnumTypeTpNew(PyTypeObject* metatype, PyObject* args, PyObject* kwds); +static void SbkEnumTypeDealloc(PyObject *pyObj); +static PyObject *SbkEnumTypeTpNew(PyTypeObject *metatype, PyObject *args, PyObject *kwds); static PyType_Slot SbkEnumType_Type_slots[] = { {Py_tp_dealloc, (void *)SbkEnumTypeDealloc}, @@ -286,7 +285,7 @@ static PyType_Slot SbkEnumType_Type_slots[] = { {Py_tp_alloc, (void *)PyType_GenericAlloc}, {Py_tp_new, (void *)SbkEnumTypeTpNew}, {Py_tp_free, (void *)PyObject_GC_Del}, - {0, 0} + {0, nullptr} }; static PyType_Spec SbkEnumType_Type_spec = { "Shiboken.EnumType", @@ -308,9 +307,9 @@ PyTypeObject *SbkEnumType_TypeF(void) return type; } -void SbkEnumTypeDealloc(PyObject* pyObj) +void SbkEnumTypeDealloc(PyObject *pyObj) { - SbkEnumType* sbkType = reinterpret_cast<SbkEnumType*>(pyObj); + auto sbkType = reinterpret_cast<SbkEnumType *>(pyObj); PyObject_GC_UnTrack(pyObj); #ifndef Py_LIMITED_API @@ -324,13 +323,13 @@ void SbkEnumTypeDealloc(PyObject* pyObj) #endif } -PyObject* SbkEnumTypeTpNew(PyTypeObject* metatype, PyObject* args, PyObject* kwds) +PyObject *SbkEnumTypeTpNew(PyTypeObject *metatype, PyObject *args, PyObject *kwds) { - newfunc type_new = reinterpret_cast<newfunc>(PyType_GetSlot(&PyType_Type, Py_tp_new)); - SbkEnumType *newType = reinterpret_cast<SbkEnumType*>(type_new(metatype, args, kwds)); + auto type_new = reinterpret_cast<newfunc>(PyType_GetSlot(&PyType_Type, Py_tp_new)); + auto newType = reinterpret_cast<SbkEnumType *>(type_new(metatype, args, kwds)); if (!newType) - return 0; - return reinterpret_cast<PyObject*>(newType); + return nullptr; + return reinterpret_cast<PyObject *>(newType); } } // extern "C" @@ -340,15 +339,15 @@ namespace Shiboken { class DeclaredEnumTypes { public: - DeclaredEnumTypes(const DeclaredEnumTypes&) = delete; - DeclaredEnumTypes(DeclaredEnumTypes&&) = delete; - DeclaredEnumTypes& operator=(const DeclaredEnumTypes&) = delete; - DeclaredEnumTypes& operator=(DeclaredEnumTypes&&) = delete; + DeclaredEnumTypes(const DeclaredEnumTypes &) = delete; + DeclaredEnumTypes(DeclaredEnumTypes &&) = delete; + DeclaredEnumTypes &operator=(const DeclaredEnumTypes &) = delete; + DeclaredEnumTypes &operator=(DeclaredEnumTypes &&) = delete; DeclaredEnumTypes(); ~DeclaredEnumTypes(); - static DeclaredEnumTypes& instance(); - void addEnumType(PyTypeObject* type); + static DeclaredEnumTypes &instance(); + void addEnumType(PyTypeObject *type); private: std::vector<PyTypeObject *> m_enumTypes; @@ -356,51 +355,51 @@ private: namespace Enum { -bool check(PyObject* pyObj) +bool check(PyObject *pyObj) { return Py_TYPE(Py_TYPE(pyObj)) == SbkEnumType_TypeF(); } -PyObject* getEnumItemFromValue(PyTypeObject* enumType, long itemValue) +PyObject *getEnumItemFromValue(PyTypeObject *enumType, long itemValue) { PyObject *key, *value; Py_ssize_t pos = 0; - PyObject *values = PyDict_GetItemString(enumType->tp_dict, const_cast<char*>("values")); + PyObject *values = PyDict_GetItemString(enumType->tp_dict, const_cast<char *>("values")); while (PyDict_Next(values, &pos, &key, &value)) { - SbkEnumObject *obj = reinterpret_cast<SbkEnumObject *>(value); + auto *obj = reinterpret_cast<SbkEnumObject *>(value); if (obj->ob_value == itemValue) { Py_INCREF(obj); return value; } } - return 0; + return nullptr; } -static PyTypeObject* createEnum(const char* fullName, const char* cppName, - const char* /* shortName */, - PyTypeObject* flagsType) +static PyTypeObject *createEnum(const char *fullName, const char *cppName, + const char */* shortName */, + PyTypeObject *flagsType) { - PyTypeObject* enumType = newTypeWithName(fullName, cppName, flagsType); + PyTypeObject *enumType = newTypeWithName(fullName, cppName, flagsType); if (PyType_Ready(enumType) < 0) - return 0; + return nullptr; return enumType; } -PyTypeObject* createGlobalEnum(PyObject* module, const char* name, const char* fullName, const char* cppName, PyTypeObject* flagsType) +PyTypeObject *createGlobalEnum(PyObject *module, const char *name, const char *fullName, const char *cppName, PyTypeObject *flagsType) { - PyTypeObject* enumType = createEnum(fullName, cppName, name, flagsType); + PyTypeObject *enumType = createEnum(fullName, cppName, name, flagsType); if (enumType && PyModule_AddObject(module, name, reinterpret_cast<PyObject *>(enumType)) < 0) - return 0; + return nullptr; if (flagsType && PyModule_AddObject(module, PepType_GetNameStr(flagsType), reinterpret_cast<PyObject *>(flagsType)) < 0) - return 0; + return nullptr; return enumType; } -PyTypeObject* createScopedEnum(SbkObjectType* scope, const char* name, const char* fullName, const char* cppName, PyTypeObject* flagsType) +PyTypeObject *createScopedEnum(SbkObjectType *scope, const char *name, const char *fullName, const char *cppName, PyTypeObject *flagsType) { - PyTypeObject* enumType = createEnum(fullName, cppName, name, flagsType); + PyTypeObject *enumType = createEnum(fullName, cppName, name, flagsType); if (enumType && PyDict_SetItemString(reinterpret_cast<PyTypeObject *>(scope)->tp_dict, name, reinterpret_cast<PyObject *>(enumType)) < 0) return nullptr; @@ -411,18 +410,18 @@ PyTypeObject* createScopedEnum(SbkObjectType* scope, const char* name, const cha return enumType; } -static PyObject* createEnumItem(PyTypeObject* enumType, const char* itemName, long itemValue) +static PyObject *createEnumItem(PyTypeObject *enumType, const char *itemName, long itemValue) { - PyObject* enumItem = newItem(enumType, itemValue, itemName); + PyObject *enumItem = newItem(enumType, itemValue, itemName); if (PyDict_SetItemString(enumType->tp_dict, itemName, enumItem) < 0) - return 0; + return nullptr; Py_DECREF(enumItem); return enumItem; } -bool createGlobalEnumItem(PyTypeObject* enumType, PyObject* module, const char* itemName, long itemValue) +bool createGlobalEnumItem(PyTypeObject *enumType, PyObject *module, const char *itemName, long itemValue) { - PyObject* enumItem = createEnumItem(enumType, itemName, itemValue); + PyObject *enumItem = createEnumItem(enumType, itemName, itemValue); if (enumItem) { if (PyModule_AddObject(module, itemName, enumItem) < 0) return false; @@ -449,7 +448,7 @@ bool createScopedEnumItem(PyTypeObject *enumType, PyTypeObject *scope, return false; } -bool createScopedEnumItem(PyTypeObject* enumType, SbkObjectType* scope, const char* itemName, long itemValue) +bool createScopedEnumItem(PyTypeObject *enumType, SbkObjectType *scope, const char *itemName, long itemValue) { return createScopedEnumItem(enumType, reinterpret_cast<PyTypeObject *>(scope), itemName, itemValue); } @@ -458,34 +457,34 @@ PyObject * newItem(PyTypeObject *enumType, long itemValue, const char *itemName) { bool newValue = true; - SbkEnumObject* enumObj; + SbkEnumObject *enumObj; if (!itemName) { - enumObj = reinterpret_cast<SbkEnumObject*>( + enumObj = reinterpret_cast<SbkEnumObject *>( getEnumItemFromValue(enumType, itemValue)); if (enumObj) - return reinterpret_cast<PyObject*>(enumObj); + return reinterpret_cast<PyObject *>(enumObj); newValue = false; } enumObj = PyObject_New(SbkEnumObject, enumType); if (!enumObj) - return 0; + return nullptr; - enumObj->ob_name = itemName ? PyBytes_FromString(itemName) : 0; + enumObj->ob_name = itemName ? PyBytes_FromString(itemName) : nullptr; enumObj->ob_value = itemValue; if (newValue) { - PyObject* values = PyDict_GetItemString(enumType->tp_dict, const_cast<char*>("values")); + PyObject *values = PyDict_GetItemString(enumType->tp_dict, const_cast<char *>("values")); if (!values) { values = PyDict_New(); - PyDict_SetItemString(enumType->tp_dict, const_cast<char*>("values"), values); + PyDict_SetItemString(enumType->tp_dict, const_cast<char *>("values"), values); Py_DECREF(values); // ^ values still alive, because setitemstring incref it } - PyDict_SetItemString(values, itemName, reinterpret_cast<PyObject*>(enumObj)); + PyDict_SetItemString(values, itemName, reinterpret_cast<PyObject *>(enumObj)); } - return reinterpret_cast<PyObject*>(enumObj); + return reinterpret_cast<PyObject *>(enumObj); } static PyType_Slot SbkNewType_slots[] = { @@ -514,7 +513,7 @@ static PyType_Slot SbkNewType_slots[] = { {Py_tp_richcompare, (void *)enum_richcompare}, {Py_tp_hash, (void *)enum_hash}, {Py_tp_dealloc, (void *)object_dealloc}, - {0, 0} + {0, nullptr} }; static PyType_Spec SbkNewType_spec = { "missing Enum name", // to be inserted later @@ -581,13 +580,13 @@ copyNumberMethods(PyTypeObject *flagsType, } PyTypeObject * -newTypeWithName(const char* name, - const char* cppName, +newTypeWithName(const char *name, + const char *cppName, PyTypeObject *numbers_fromFlag) { // Careful: PyType_FromSpec does not allocate the string. PyType_Slot newslots[99] = {}; // enough but not too big for the stack - PyType_Spec *newspec = new PyType_Spec; + auto *newspec = new PyType_Spec; newspec->name = strdup(name); newspec->basicsize = SbkNewType_spec.basicsize; newspec->itemsize = SbkNewType_spec.itemsize; @@ -602,44 +601,44 @@ newTypeWithName(const char* name, if (numbers_fromFlag) copyNumberMethods(numbers_fromFlag, newslots, &idx); newspec->slots = newslots; - PyTypeObject *type = reinterpret_cast<PyTypeObject *>(PyType_FromSpec(newspec)); + auto *type = reinterpret_cast<PyTypeObject *>(PyType_FromSpec(newspec)); Py_TYPE(type) = SbkEnumType_TypeF(); Py_INCREF(Py_TYPE(type)); - SbkEnumType* enumType = reinterpret_cast<SbkEnumType*>(type); + auto *enumType = reinterpret_cast<SbkEnumType *>(type); PepType_SETP(enumType)->cppName = cppName; PepType_SETP(enumType)->converterPtr = &PepType_SETP(enumType)->converter; DeclaredEnumTypes::instance().addEnumType(type); return type; } -const char* getCppName(PyTypeObject* enumType) +const char *getCppName(PyTypeObject *enumType) { assert(Py_TYPE(enumType) == SbkEnumType_TypeF()); - return PepType_SETP(reinterpret_cast<SbkEnumType*>(enumType))->cppName; + return PepType_SETP(reinterpret_cast<SbkEnumType *>(enumType))->cppName; } -long int getValue(PyObject* enumItem) +long int getValue(PyObject *enumItem) { assert(Shiboken::Enum::check(enumItem)); - return reinterpret_cast<SbkEnumObject*>(enumItem)->ob_value; + return reinterpret_cast<SbkEnumObject *>(enumItem)->ob_value; } -void setTypeConverter(PyTypeObject* enumType, SbkConverter* converter) +void setTypeConverter(PyTypeObject *enumType, SbkConverter *converter) { - //reinterpret_cast<SbkEnumType*>(enumType)->converter = converter; + //reinterpret_cast<SbkEnumType *>(enumType)->converter = converter; *PepType_SGTP(enumType)->converter = converter; } -SbkConverter* getTypeConverter(PyTypeObject* enumType) +SbkConverter *getTypeConverter(PyTypeObject *enumType) { - //return reinterpret_cast<SbkEnumType*>(enumType)->converter; + //return reinterpret_cast<SbkEnumType *>(enumType)->converter; return *PepType_SGTP(enumType)->converter; } } // namespace Enum -DeclaredEnumTypes& DeclaredEnumTypes::instance() +DeclaredEnumTypes &DeclaredEnumTypes::instance() { static DeclaredEnumTypes me; return me; @@ -662,7 +661,7 @@ DeclaredEnumTypes::~DeclaredEnumTypes() m_enumTypes.clear(); } -void DeclaredEnumTypes::addEnumType(PyTypeObject* type) +void DeclaredEnumTypes::addEnumType(PyTypeObject *type) { m_enumTypes.push_back(type); } |