Skip to content

Commit a559725

Browse files
committed
refactoring
1 parent 2b4cace commit a559725

File tree

3 files changed

+41
-40
lines changed

3 files changed

+41
-40
lines changed

src/PythonQtConversion.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -592,21 +592,21 @@ void* PythonQtConv::ConvertPythonToQt(const PythonQtMethodInfo::ParameterInfo& i
592592
{
593593
QByteArray bytes = PyObjGetBytesAllowString(obj, strict, ok);
594594
if (ok) {
595-
ptr = ConversionUtils::getPtrAndUpdateCppObject<QByteArray>(alreadyAllocatedCPPObject, frame, bytes);
595+
ptr = frame->establishPersistentPtr<QByteArray>(alreadyAllocatedCPPObject, bytes);
596596
}
597597
} break;
598598
case QMetaType::QString:
599599
{
600600
QString str = PyObjGetString(obj, strict, ok);
601601
if (ok) {
602-
ptr = ConversionUtils::getPtrAndUpdateCppObject<QString>(alreadyAllocatedCPPObject, frame, str);
602+
ptr = frame->establishPersistentPtr<QString>(alreadyAllocatedCPPObject, str);
603603
}
604604
} break;
605605
case QMetaType::QStringList:
606606
{
607607
QStringList l = PyObjToStringList(obj, strict, ok);
608608
if (ok) {
609-
ptr = ConversionUtils::getPtrAndUpdateCppObject<QStringList>(alreadyAllocatedCPPObject, frame, l);
609+
ptr = frame->establishPersistentPtr<QStringList>(alreadyAllocatedCPPObject, l);
610610
}
611611
} break;
612612

@@ -660,26 +660,23 @@ void* PythonQtConv::ConvertPythonToQt(const PythonQtMethodInfo::ParameterInfo& i
660660
// Handle QStringView, which needs a reference to a persistent QString
661661
QString str = PyObjGetString(obj, strict, ok);
662662
if (ok) {
663-
return ConversionUtils::getPtrAndUpdateCppViewObject<QString, QStringView>(alreadyAllocatedCPPObject, frame,
664-
str);
663+
return frame->establishPersistentViewPtr<QString, QStringView>(alreadyAllocatedCPPObject, str);
665664
} else {
666665
return nullptr;
667666
}
668667
} else if (info.typeId == anyStringViewTypeId) {
669668
// Handle QAnyStringView, which needs a reference to a persistent QString
670669
QString str = PyObjGetString(obj, strict, ok);
671670
if (ok) {
672-
return ConversionUtils::getPtrAndUpdateCppViewObject<QString, QAnyStringView>(alreadyAllocatedCPPObject,
673-
frame, str);
671+
return frame->establishPersistentViewPtr<QString, QAnyStringView>(alreadyAllocatedCPPObject, str);
674672
} else {
675673
return nullptr;
676674
}
677675
} else if (info.typeId == byteArrayViewTypeId) {
678676
// Handle QByteArrayView, which needs a reference to a persistent QByteArray
679677
QByteArray ba = PyObjGetBytesAllowString(obj, strict, ok);
680678
if (ok) {
681-
return ConversionUtils::getPtrAndUpdateCppViewObject<QByteArray, QByteArrayView>(alreadyAllocatedCPPObject,
682-
frame, ba);
679+
return frame->establishPersistentViewPtr<QByteArray, QByteArrayView>(alreadyAllocatedCPPObject, ba);
683680
} else {
684681
return nullptr;
685682
}

src/PythonQtMisc.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,32 @@ quint64* PythonQtArgumentFrame::nextPODPtr()
115115
_podArgs.push_back(0);
116116
return &_podArgs[_podArgs.size() - 1];
117117
}
118+
119+
template<typename Class>
120+
void* PythonQtArgumentFrame::establishPersistentPtr(void* alreadyAllocatedPtr, const Class& value)
121+
{
122+
if (alreadyAllocatedPtr) {
123+
*reinterpret_cast<Class*>(alreadyAllocatedPtr) = value;
124+
return alreadyAllocatedPtr;
125+
} else {
126+
QVariant* item = nextVariantPtr();
127+
*item = QVariant(value);
128+
return const_cast<void*>(item->constData());
129+
}
130+
}
131+
132+
template<typename Class, typename ViewClass>
133+
void* PythonQtArgumentFrame::establishPersistentViewPtr(void* alreadyAllocatedPtr, const Class& value)
134+
{
135+
QVariant* itemStore = nextVariantPtr();
136+
*itemStore = QVariant(value);
137+
if (alreadyAllocatedPtr) {
138+
*reinterpret_cast<ViewClass*>(alreadyAllocatedPtr) =
139+
ViewClass(*reinterpret_cast<const Class*>(itemStore->constData()));
140+
return alreadyAllocatedPtr;
141+
} else {
142+
QVariant* item = nextVariantPtr();
143+
*item = QVariant::fromValue(ViewClass(*reinterpret_cast<const Class*>(itemStore->constData())));
144+
return const_cast<void*>(item->constData());
145+
}
146+
}

src/PythonQtMisc.h

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ class PythonQtArgumentFrame
121121
//! Get next pointer to a POD.
122122
quint64* nextPODPtr();
123123

124+
template<typename Class>
125+
void* establishPersistentPtr(void* alreadyAllocatedPtr, const Class& value);
126+
127+
template<typename Class, typename ViewClass>
128+
void* establishPersistentViewPtr(void* alreadyAllocatedPtr, const Class& value);
129+
124130
private:
125131
PythonQtArgumentFrame();
126132
~PythonQtArgumentFrame();
@@ -133,35 +139,4 @@ class PythonQtArgumentFrame
133139
static PythonQtArgumentFrame* _freeListHead;
134140
};
135141

136-
namespace ConversionUtils {
137-
template<typename Class>
138-
void* getPtrAndUpdateCppObject(void* alreadyAllocatedPtr, PythonQtArgumentFrame* store, const Class& value)
139-
{
140-
if (alreadyAllocatedPtr) {
141-
*reinterpret_cast<Class*>(alreadyAllocatedPtr) = value;
142-
return alreadyAllocatedPtr;
143-
} else {
144-
QVariant* item = store->nextVariantPtr();
145-
*item = QVariant(value);
146-
return const_cast<void*>(item->constData());
147-
}
148-
}
149-
150-
template<typename Class, typename ViewClass>
151-
void* getPtrAndUpdateCppViewObject(void* alreadyAllocatedPtr, PythonQtArgumentFrame* store, const Class& value)
152-
{
153-
QVariant* itemStore = store->nextVariantPtr();
154-
*itemStore = QVariant(value);
155-
if (alreadyAllocatedPtr) {
156-
*reinterpret_cast<ViewClass*>(alreadyAllocatedPtr) =
157-
ViewClass(*reinterpret_cast<const Class*>(itemStore->constData()));
158-
return alreadyAllocatedPtr;
159-
} else {
160-
QVariant* item = store->nextVariantPtr();
161-
*item = QVariant::fromValue(ViewClass(*reinterpret_cast<const Class*>(itemStore->constData())));
162-
return const_cast<void*>(item->constData());
163-
}
164-
}
165-
}
166-
167142
#endif

0 commit comments

Comments
 (0)