@@ -230,6 +230,7 @@ TPythonVersionProp = record
230
230
WCharTString = UnicodeString;
231
231
{ $ENDIF}
232
232
233
+ Py_ssize_t = NativeInt;
233
234
234
235
const
235
236
{
@@ -940,6 +941,27 @@ TPythonVersionProp = record
940
941
end ;
941
942
PPyDateTime_DateTime = ^PyDateTime_DateTime;
942
943
944
+ // bytearrayobject.h
945
+
946
+ // typedef struct {
947
+ // PyObject_VAR_HEAD
948
+ // Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */
949
+ // char *ob_bytes; /* Physical backing buffer */
950
+ // char *ob_start; /* Logical start inside ob_bytes */
951
+ // Py_ssize_t ob_exports; /* How many buffer exports */
952
+ // } PyByteArrayObject;
953
+
954
+ PyByteArrayObject = { $IFDEF CPUX86} packed { $ENDIF} record
955
+ // Start of PyObject_VAR_HEAD
956
+ // Start of the Head of an object
957
+ ob_base: PyObject;
958
+ ob_size: Py_ssize_t;
959
+ // End of the Head of an object
960
+ ob_bytes: PAnsiChar;
961
+ ob_start: PAnsiChar;
962
+ ob_exports: Py_ssize_t;
963
+ end ;
964
+
943
965
// #######################################################
944
966
// ## ##
945
967
// ## GIL state ##
@@ -1361,6 +1383,7 @@ TPythonInterface=class(TDynamicDll)
1361
1383
PyRange_Type: PPyTypeObject;
1362
1384
PySlice_Type: PPyTypeObject;
1363
1385
PyBytes_Type: PPyTypeObject;
1386
+ PyByteArray_Type: PPyTypeObject;
1364
1387
PyTuple_Type: PPyTypeObject;
1365
1388
PyBaseObject_Type: PPyTypeObject;
1366
1389
PyCallIter_Type: PPyTypeObject;
@@ -1440,6 +1463,7 @@ TPythonInterface=class(TDynamicDll)
1440
1463
PyRun_SimpleString: function( str: PAnsiChar): Integer; cdecl;
1441
1464
PyBytes_AsString: function( ob: PPyObject): PAnsiChar; cdecl;
1442
1465
PyBytes_AsStringAndSize: function( ob: PPyObject; var buffer: PAnsiChar; var size: NativeInt): integer; cdecl;
1466
+ PyByteArray_AsString: function(ob: PPyObject): PAnsiChar; cdecl;
1443
1467
PySys_SetArgv: procedure( argc: Integer; argv: PPWCharT); cdecl;
1444
1468
1445
1469
PyCFunction_NewEx: function(md:PPyMethodDef;self, ob:PPyObject):PPyObject; cdecl;
@@ -1588,6 +1612,11 @@ TPythonInterface=class(TDynamicDll)
1588
1612
PyBytes_Size:function (ob:PPyObject):NativeInt; cdecl;
1589
1613
PyBytes_DecodeEscape:function(s:PAnsiChar; len:NativeInt; errors:PAnsiChar; unicode:NativeInt; recode_encoding:PAnsiChar):PPyObject; cdecl;
1590
1614
PyBytes_Repr:function(ob:PPyObject; smartquotes:integer):PPyObject; cdecl;
1615
+ PyByteArray_Concat: procedure(var ob1: PPyObject; ob2: PPyObject); cdecl;
1616
+ PyByteArray_Resize: procedure(var ob1: PPyObject; len: Py_ssize_t); cdecl;
1617
+ PyByteArray_FromObject: function(ob:PPyObject): PPyObject; cdecl;
1618
+ PyByteArray_FromStringAndSize: function(s: PAnsiChar; i: Py_ssize_t): PPyObject; cdecl;
1619
+ PyByteArray_Size: function(ob: PPyObject): Py_ssize_t; cdecl;
1591
1620
PySys_GetObject:function (s:PAnsiChar):PPyObject; cdecl;
1592
1621
PySys_SetObject:function (s:PAnsiChar;ob:PPyObject):integer; cdecl;
1593
1622
PySys_SetPath:procedure(path:PAnsiChar); cdecl;
@@ -1715,6 +1744,8 @@ TPythonInterface=class(TDynamicDll)
1715
1744
1716
1745
function PyBytes_Check ( obj : PPyObject ) : Boolean;
1717
1746
function PyBytes_CheckExact ( obj : PPyObject ) : Boolean;
1747
+ function PyByteArray_Check (obj: PPyObject): Boolean;
1748
+ function PyByteArray_CheckExact (obj: PPyObject): Boolean;
1718
1749
function PyFloat_Check ( obj : PPyObject ) : Boolean;
1719
1750
function PyFloat_CheckExact ( obj : PPyObject ) : Boolean;
1720
1751
function PyLong_Check ( obj : PPyObject ) : Boolean;
@@ -3557,6 +3588,7 @@ procedure TPythonInterface.MapDll;
3557
3588
PyRange_Type := Import (' PyRange_Type' );
3558
3589
PySlice_Type := Import (' PySlice_Type' );
3559
3590
PyBytes_Type := Import (' PyBytes_Type' );
3591
+ PyByteArray_Type := Import (' PyByteArray_Type' );
3560
3592
PyTuple_Type := Import (' PyTuple_Type' );
3561
3593
PyUnicode_Type := Import (' PyUnicode_Type' );
3562
3594
PyBaseObject_Type := Import (' PyBaseObject_Type' );
@@ -3776,6 +3808,12 @@ procedure TPythonInterface.MapDll;
3776
3808
PyBytes_DecodeEscape := Import (' PyBytes_DecodeEscape' );
3777
3809
PyBytes_Repr := Import (' PyBytes_Repr' );
3778
3810
_PyBytes_Resize := Import (' _PyBytes_Resize' );
3811
+ PyByteArray_AsString := Import (' PyByteArray_AsString' );
3812
+ PyByteArray_Concat := Import (' PyByteArray_Concat' );
3813
+ PyByteArray_Resize := Import (' PyByteArray_Resize' );
3814
+ PyByteArray_FromObject := Import (' PyByteArray_FromObject' );
3815
+ PyByteArray_FromStringAndSize := Import (' PyByteArray_FromStringAndSize' );
3816
+ PyByteArray_Size := Import (' PyByteArray_Size' );
3779
3817
PySys_GetObject := Import (' PySys_GetObject' );
3780
3818
PySys_SetObject := Import (' PySys_SetObject' );
3781
3819
PySys_SetPath := Import (' PySys_SetPath' );
@@ -3909,6 +3947,16 @@ class procedure TPythonInterface.Py_CLEAR(var op: PPyObject);
3909
3947
end ;
3910
3948
end ;
3911
3949
3950
+ function TPythonInterface.PyByteArray_Check (obj: PPyObject): Boolean;
3951
+ begin
3952
+ Result := PyObject_TypeCheck(obj, PyByteArray_Type);
3953
+ end ;
3954
+
3955
+ function TPythonInterface.PyByteArray_CheckExact (obj: PPyObject): Boolean;
3956
+ begin
3957
+ Result := Assigned( obj ) and (obj^.ob_type = PPyTypeObject(PyByteArray_Type));
3958
+ end ;
3959
+
3912
3960
function TPythonInterface.PyBytes_Check ( obj : PPyObject ) : Boolean;
3913
3961
begin
3914
3962
Result := PyObject_TypeCheck(obj, PyBytes_Type);
0 commit comments