Skip to content

Commit b5084eb

Browse files
author
Roberto De Ioris
committed
improved struct handling
1 parent 68ffd6d commit b5084eb

13 files changed

Lines changed: 30 additions & 21 deletions

Source/UnrealEnginePython/Private/Slate/UEPyFKeyEvent.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
static PyObject *py_ue_fkey_event_get_key(ue_PyFKeyEvent *self, PyObject * args)
44
{
55
FKey key = self->key_event.GetKey();
6-
return py_ue_new_uscriptstruct(FKey::StaticStruct(), (uint8*)&key);
6+
return py_ue_new_owned_uscriptstruct(FKey::StaticStruct(), (uint8*)&key);
77
}
88

99
static PyObject *py_ue_fkey_event_get_key_name(ue_PyFKeyEvent *self, PyObject * args)

Source/UnrealEnginePython/Private/Slate/UEPyFPointerEvent.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
static PyObject *py_ue_fpointer_event_get_effecting_button(ue_PyFPointerEvent *self, PyObject * args)
66
{
77
FKey key = self->pointer.GetEffectingButton();
8-
return py_ue_new_uscriptstruct(FKey::StaticStruct(), (uint8*)&key);
8+
return py_ue_new_owned_uscriptstruct(FKey::StaticStruct(), (uint8*)&key);
99
}
1010

1111
static PyObject *py_ue_fpointer_event_get_effecting_button_name(ue_PyFPointerEvent *self, PyObject * args)

Source/UnrealEnginePython/Private/Slate/UEPyFSlateIcon.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
static PyObject *py_ue_fslate_icon_get_icon(ue_PyFSlateIcon *self, PyObject * args)
55
{
6-
return py_ue_new_uscriptstruct(FSlateBrush::StaticStruct(), (uint8*)self->icon.GetIcon());
6+
return py_ue_new_owned_uscriptstruct(FSlateBrush::StaticStruct(), (uint8*)self->icon.GetIcon());
77
}
88

99
static PyMethodDef ue_PyFSlateIcon_methods[] = {

Source/UnrealEnginePython/Private/Slate/UEPyFSlateStyleSet.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ static PyObject *py_ue_fslate_style_set_set_content_root(ue_PyFSlateStyleSet *se
1313

1414
self->style_set->SetContentRoot(path);
1515

16-
Py_INCREF(Py_None);
17-
return Py_None;
16+
Py_RETURN_NONE;
1817
}
1918

2019
static PyObject *py_ue_fslate_style_set_register(ue_PyFSlateStyleSet *self, PyObject * args)
@@ -96,7 +95,7 @@ namespace
9695
PyObject* pyGetWidgetStyle(FSlateStyleSet& InStyle, FName PropertyName)
9796
{
9897
const WidgetStyleType styleWidgetStyle = InStyle.GetWidgetStyle<WidgetStyleType>(PropertyName);
99-
return py_ue_new_uscriptstruct(WidgetStyleType::StaticStruct(), (uint8*)&styleWidgetStyle);
98+
return py_ue_new_owned_uscriptstruct(WidgetStyleType::StaticStruct(), (uint8*)&styleWidgetStyle);
10099
}
101100
}
102101

@@ -116,24 +115,24 @@ static PyObject *py_ue_fslate_style_set_get(ue_PyFSlateStyleSet *self, PyObject
116115
if (ue_py_check_struct<FSlateSound>(py_type))
117116
{
118117
const FSlateSound& styleSound = self->style_set->GetSound(FName(name));
119-
ret = py_ue_new_uscriptstruct(FSlateSound::StaticStruct(), (uint8*)&styleSound);
118+
ret = py_ue_new_owned_uscriptstruct(FSlateSound::StaticStruct(), (uint8*)&styleSound);
120119
}
121120
else if (ue_py_check_struct<FSlateBrush>(py_type))
122121
{
123122
if (const FSlateBrush* styleBrush = self->style_set->GetBrush(FName(name)))
124123
{
125-
ret = py_ue_new_uscriptstruct(FSlateBrush::StaticStruct(), (uint8*)styleBrush);
124+
ret = py_ue_new_owned_uscriptstruct(FSlateBrush::StaticStruct(), (uint8*)styleBrush);
126125
}
127126
}
128127
else if (ue_py_check_struct<FSlateColor>(py_type))
129128
{
130129
const FSlateColor styleSlateColor = self->style_set->GetSlateColor(FName(name));
131-
ret = py_ue_new_uscriptstruct(FSlateColor::StaticStruct(), (uint8*)&styleSlateColor);
130+
ret = py_ue_new_owned_uscriptstruct(FSlateColor::StaticStruct(), (uint8*)&styleSlateColor);
132131
}
133132
else if (ue_py_check_struct<FSlateFontInfo>(py_type))
134133
{
135134
const FSlateFontInfo styleFontInfo = self->style_set->GetFontStyle(FName(name));
136-
ret = py_ue_new_uscriptstruct(FSlateFontInfo::StaticStruct(), (uint8*)&styleFontInfo);
135+
ret = py_ue_new_owned_uscriptstruct(FSlateFontInfo::StaticStruct(), (uint8*)&styleFontInfo);
137136
}
138137
else if (ue_py_check_childstruct<FSlateWidgetStyle>(py_type))
139138
{

Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1490,7 +1490,7 @@ PyObject * py_unreal_engine_create_wrapper_from_pyswidget(PyObject *self, PyObje
14901490

14911491
FPythonSWidgetWrapper py_swidget_wrapper;
14921492
py_swidget_wrapper.Widget = Widget;
1493-
return py_ue_new_uscriptstruct(FPythonSWidgetWrapper::StaticStruct(), (uint8 *)&py_swidget_wrapper);
1493+
return py_ue_new_owned_uscriptstruct(FPythonSWidgetWrapper::StaticStruct(), (uint8 *)&py_swidget_wrapper);
14941494
}
14951495

14961496
PyObject *py_unreal_engine_open_color_picker(PyObject *self, PyObject *args, PyObject *kwargs)

Source/UnrealEnginePython/Private/UEPyEngine.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ PyObject *py_unreal_engine_string_to_guid(PyObject * self, PyObject * args)
467467

468468
if (FGuid::Parse(FString(str), guid))
469469
{
470-
return py_ue_new_uscriptstruct(FindObject<UScriptStruct>(ANY_PACKAGE, UTF8_TO_TCHAR((char *)"Guid")), (uint8 *)&guid);
470+
return py_ue_new_owned_uscriptstruct(FindObject<UScriptStruct>(ANY_PACKAGE, UTF8_TO_TCHAR((char *)"Guid")), (uint8 *)&guid);
471471
}
472472

473473
return PyErr_Format(PyExc_Exception, "unable to build FGuid");
@@ -478,7 +478,7 @@ PyObject *py_unreal_engine_new_guid(PyObject * self, PyObject * args)
478478

479479
FGuid guid = FGuid::NewGuid();
480480

481-
return py_ue_new_uscriptstruct(FindObject<UScriptStruct>(ANY_PACKAGE, UTF8_TO_TCHAR((char *)"Guid")), (uint8 *)&guid);
481+
return py_ue_new_owned_uscriptstruct(FindObject<UScriptStruct>(ANY_PACKAGE, UTF8_TO_TCHAR((char *)"Guid")), (uint8 *)&guid);
482482
}
483483

484484
PyObject *py_unreal_engine_guid_to_string(PyObject * self, PyObject * args)

Source/UnrealEnginePython/Private/UEPyModule.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1370,7 +1370,7 @@ static PyObject *ue_PyUObject_call(ue_PyUObject *self, PyObject *args, PyObject
13701370
}
13711371
}
13721372
}
1373-
return py_ue_new_uscriptstruct(u_script_struct, data);
1373+
return py_ue_new_owned_uscriptstruct_zero_copy(u_script_struct, data);
13741374
}
13751375
return PyErr_Format(PyExc_Exception, "the specified uobject has no __call__ support");
13761376
}

Source/UnrealEnginePython/Private/UEPyUScriptStruct.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,15 @@ PyObject *py_ue_new_owned_uscriptstruct(UScriptStruct *u_struct, uint8 *data)
368368
return (PyObject *)ret;
369369
}
370370

371+
PyObject *py_ue_new_owned_uscriptstruct_zero_copy(UScriptStruct *u_struct, uint8 *data)
372+
{
373+
ue_PyUScriptStruct *ret = (ue_PyUScriptStruct *)PyObject_New(ue_PyUScriptStruct, &ue_PyUScriptStructType);
374+
ret->u_struct = u_struct;
375+
ret->u_struct_ptr = data;
376+
ret->u_struct_owned = 1;
377+
return (PyObject *)ret;
378+
}
379+
371380
static PyObject *py_ue_uscriptstruct_clone(ue_PyUScriptStruct *self, PyObject * args)
372381
{
373382
ue_PyUScriptStruct *ret = (ue_PyUScriptStruct *)PyObject_New(ue_PyUScriptStruct, &ue_PyUScriptStructType);

Source/UnrealEnginePython/Private/UEPyUScriptStruct.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ typedef struct
1414

1515
PyObject *py_ue_new_uscriptstruct(UScriptStruct *, uint8 *);
1616
PyObject *py_ue_new_owned_uscriptstruct(UScriptStruct *, uint8 *);
17+
PyObject *py_ue_new_owned_uscriptstruct_zero_copy(UScriptStruct *, uint8 *);
1718
ue_PyUScriptStruct *py_ue_is_uscriptstruct(PyObject *);
1819

1920
UProperty *ue_struct_get_field_from_name(UScriptStruct *, char *);

Source/UnrealEnginePython/Private/UObject/UEPyAnimSequence.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ PyObject *py_ue_get_blend_parameter(ue_PyUObject * self, PyObject * args)
336336

337337
const FBlendParameter & parameter = blend->GetBlendParameter(index);
338338

339-
return py_ue_new_uscriptstruct(FBlendParameter::StaticStruct(), (uint8 *)&parameter);
339+
return py_ue_new_owned_uscriptstruct(FBlendParameter::StaticStruct(), (uint8 *)&parameter);
340340
}
341341

342342
PyObject *py_ue_set_blend_parameter(ue_PyUObject * self, PyObject * args)

0 commit comments

Comments
 (0)