@@ -53,8 +53,8 @@ Numeric decoder derived from TCL library
53
53
54
54
npy_int64 get_nat (void ) { return NPY_MIN_INT64 ; }
55
55
56
- typedef char * (* PFN_PyTypeToUTF8 )(JSOBJ obj , JSONTypeContext * ti ,
57
- size_t * _outLen );
56
+ typedef const char * (* PFN_PyTypeToUTF8 )(JSOBJ obj , JSONTypeContext * ti ,
57
+ size_t * _outLen );
58
58
59
59
int object_is_decimal_type (PyObject * obj );
60
60
int object_is_dataframe_type (PyObject * obj );
@@ -106,7 +106,7 @@ typedef struct __TypeContext {
106
106
double doubleValue ;
107
107
JSINT64 longValue ;
108
108
109
- char * cStr ;
109
+ const char * cStr ;
110
110
NpyArrContext * npyarr ;
111
111
PdBlockContext * pdblock ;
112
112
int transpose ;
@@ -301,14 +301,15 @@ static npy_float64 total_seconds(PyObject *td) {
301
301
return double_val ;
302
302
}
303
303
304
- static char * PyBytesToUTF8 (JSOBJ _obj , JSONTypeContext * Py_UNUSED (tc ),
305
- size_t * _outLen ) {
304
+ static const char * PyBytesToUTF8 (JSOBJ _obj , JSONTypeContext * Py_UNUSED (tc ),
305
+ size_t * _outLen ) {
306
306
PyObject * obj = (PyObject * )_obj ;
307
307
* _outLen = PyBytes_GET_SIZE (obj );
308
308
return PyBytes_AS_STRING (obj );
309
309
}
310
310
311
- static char * PyUnicodeToUTF8 (JSOBJ _obj , JSONTypeContext * tc , size_t * _outLen ) {
311
+ static const char * PyUnicodeToUTF8 (JSOBJ _obj , JSONTypeContext * tc ,
312
+ size_t * _outLen ) {
312
313
char * encoded = (char * )PyUnicode_AsUTF8AndSize (_obj , (Py_ssize_t * )_outLen );
313
314
if (encoded == NULL ) {
314
315
/* Something went wrong.
@@ -321,24 +322,24 @@ static char *PyUnicodeToUTF8(JSOBJ _obj, JSONTypeContext *tc, size_t *_outLen) {
321
322
}
322
323
323
324
/* JSON callback. returns a char* and mutates the pointer to *len */
324
- static char * NpyDateTimeToIsoCallback (JSOBJ Py_UNUSED (unused ),
325
- JSONTypeContext * tc , size_t * len ) {
325
+ static const char * NpyDateTimeToIsoCallback (JSOBJ Py_UNUSED (unused ),
326
+ JSONTypeContext * tc , size_t * len ) {
326
327
NPY_DATETIMEUNIT base = ((PyObjectEncoder * )tc -> encoder )-> datetimeUnit ;
327
328
NPY_DATETIMEUNIT valueUnit = ((PyObjectEncoder * )tc -> encoder )-> valueUnit ;
328
329
GET_TC (tc )-> cStr = int64ToIso (GET_TC (tc )-> longValue , valueUnit , base , len );
329
330
return GET_TC (tc )-> cStr ;
330
331
}
331
332
332
333
/* JSON callback. returns a char* and mutates the pointer to *len */
333
- static char * NpyTimeDeltaToIsoCallback (JSOBJ Py_UNUSED (unused ),
334
- JSONTypeContext * tc , size_t * len ) {
334
+ static const char * NpyTimeDeltaToIsoCallback (JSOBJ Py_UNUSED (unused ),
335
+ JSONTypeContext * tc , size_t * len ) {
335
336
GET_TC (tc )-> cStr = int64ToIsoDuration (GET_TC (tc )-> longValue , len );
336
337
return GET_TC (tc )-> cStr ;
337
338
}
338
339
339
340
/* JSON callback */
340
- static char * PyDateTimeToIsoCallback (JSOBJ obj , JSONTypeContext * tc ,
341
- size_t * len ) {
341
+ static const char * PyDateTimeToIsoCallback (JSOBJ obj , JSONTypeContext * tc ,
342
+ size_t * len ) {
342
343
if (!PyDate_Check (obj ) && !PyDateTime_Check (obj )) {
343
344
PyErr_SetString (PyExc_TypeError , "Expected date or datetime object" );
344
345
((JSONObjectEncoder * )tc -> encoder )-> errorMsg = "" ;
@@ -349,7 +350,8 @@ static char *PyDateTimeToIsoCallback(JSOBJ obj, JSONTypeContext *tc,
349
350
return PyDateTimeToIso (obj , base , len );
350
351
}
351
352
352
- static char * PyTimeToJSON (JSOBJ _obj , JSONTypeContext * tc , size_t * outLen ) {
353
+ static const char * PyTimeToJSON (JSOBJ _obj , JSONTypeContext * tc ,
354
+ size_t * outLen ) {
353
355
PyObject * obj = (PyObject * )_obj ;
354
356
PyObject * str = PyObject_CallMethod (obj , "isoformat" , NULL );
355
357
if (str == NULL ) {
@@ -373,8 +375,8 @@ static char *PyTimeToJSON(JSOBJ _obj, JSONTypeContext *tc, size_t *outLen) {
373
375
return outValue ;
374
376
}
375
377
376
- static char * PyDecimalToUTF8Callback (JSOBJ _obj , JSONTypeContext * tc ,
377
- size_t * len ) {
378
+ static const char * PyDecimalToUTF8Callback (JSOBJ _obj , JSONTypeContext * tc ,
379
+ size_t * len ) {
378
380
PyObject * obj = (PyObject * )_obj ;
379
381
PyObject * format_spec = PyUnicode_FromStringAndSize ("f" , 1 );
380
382
PyObject * str = PyObject_Format (obj , format_spec );
@@ -558,10 +560,10 @@ static JSOBJ NpyArr_iterGetValue(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc) {
558
560
return GET_TC (tc )-> itemValue ;
559
561
}
560
562
561
- static char * NpyArr_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
562
- size_t * outLen ) {
563
+ static const char * NpyArr_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
564
+ size_t * outLen ) {
563
565
NpyArrContext * npyarr = GET_TC (tc )-> npyarr ;
564
- char * cStr ;
566
+ const char * cStr ;
565
567
566
568
if (GET_TC (tc )-> iterNext == NpyArr_iterNextItem ) {
567
569
const npy_intp idx = npyarr -> index [npyarr -> stridedim ] - 1 ;
@@ -609,11 +611,11 @@ static int PdBlock_iterNextItem(JSOBJ obj, JSONTypeContext *tc) {
609
611
return NpyArr_iterNextItem (obj , tc );
610
612
}
611
613
612
- static char * PdBlock_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
613
- size_t * outLen ) {
614
+ static const char * PdBlock_iterGetName (JSOBJ Py_UNUSED (obj ),
615
+ JSONTypeContext * tc , size_t * outLen ) {
614
616
PdBlockContext * blkCtxt = GET_TC (tc )-> pdblock ;
615
617
NpyArrContext * npyarr = blkCtxt -> npyCtxts [0 ];
616
- char * cStr ;
618
+ const char * cStr ;
617
619
618
620
if (GET_TC (tc )-> iterNext == PdBlock_iterNextItem ) {
619
621
const npy_intp idx = blkCtxt -> colIdx - 1 ;
@@ -631,12 +633,12 @@ static char *PdBlock_iterGetName(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc,
631
633
return cStr ;
632
634
}
633
635
634
- static char * PdBlock_iterGetName_Transpose (JSOBJ Py_UNUSED (obj ),
635
- JSONTypeContext * tc ,
636
- size_t * outLen ) {
636
+ static const char * PdBlock_iterGetName_Transpose (JSOBJ Py_UNUSED (obj ),
637
+ JSONTypeContext * tc ,
638
+ size_t * outLen ) {
637
639
PdBlockContext * blkCtxt = GET_TC (tc )-> pdblock ;
638
640
NpyArrContext * npyarr = blkCtxt -> npyCtxts [blkCtxt -> colIdx ];
639
- char * cStr ;
641
+ const char * cStr ;
640
642
641
643
if (GET_TC (tc )-> iterNext == NpyArr_iterNextItem ) {
642
644
const npy_intp idx = npyarr -> index [npyarr -> stridedim ] - 1 ;
@@ -817,9 +819,9 @@ static JSOBJ Tuple_iterGetValue(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc) {
817
819
return GET_TC (tc )-> itemValue ;
818
820
}
819
821
820
- static char * Tuple_iterGetName (JSOBJ Py_UNUSED (obj ),
821
- JSONTypeContext * Py_UNUSED (tc ),
822
- size_t * Py_UNUSED (outLen )) {
822
+ static const char * Tuple_iterGetName (JSOBJ Py_UNUSED (obj ),
823
+ JSONTypeContext * Py_UNUSED (tc ),
824
+ size_t * Py_UNUSED (outLen )) {
823
825
return NULL ;
824
826
}
825
827
@@ -864,9 +866,9 @@ static JSOBJ Set_iterGetValue(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc) {
864
866
return GET_TC (tc )-> itemValue ;
865
867
}
866
868
867
- static char * Set_iterGetName (JSOBJ Py_UNUSED (obj ),
868
- JSONTypeContext * Py_UNUSED (tc ),
869
- size_t * Py_UNUSED (outLen )) {
869
+ static const char * Set_iterGetName (JSOBJ Py_UNUSED (obj ),
870
+ JSONTypeContext * Py_UNUSED (tc ),
871
+ size_t * Py_UNUSED (outLen )) {
870
872
return NULL ;
871
873
}
872
874
@@ -962,8 +964,8 @@ static JSOBJ Dir_iterGetValue(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc) {
962
964
return GET_TC (tc )-> itemValue ;
963
965
}
964
966
965
- static char * Dir_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
966
- size_t * outLen ) {
967
+ static const char * Dir_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
968
+ size_t * outLen ) {
967
969
* outLen = PyBytes_GET_SIZE (GET_TC (tc )-> itemName );
968
970
return PyBytes_AS_STRING (GET_TC (tc )-> itemName );
969
971
}
@@ -994,9 +996,9 @@ static JSOBJ List_iterGetValue(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc) {
994
996
return GET_TC (tc )-> itemValue ;
995
997
}
996
998
997
- static char * List_iterGetName (JSOBJ Py_UNUSED (obj ),
998
- JSONTypeContext * Py_UNUSED (tc ),
999
- size_t * Py_UNUSED (outLen )) {
999
+ static const char * List_iterGetName (JSOBJ Py_UNUSED (obj ),
1000
+ JSONTypeContext * Py_UNUSED (tc ),
1001
+ size_t * Py_UNUSED (outLen )) {
1000
1002
return NULL ;
1001
1003
}
1002
1004
@@ -1005,24 +1007,16 @@ static char *List_iterGetName(JSOBJ Py_UNUSED(obj),
1005
1007
//=============================================================================
1006
1008
static void Index_iterBegin (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ) {
1007
1009
GET_TC (tc )-> index = 0 ;
1008
- GET_TC (tc )-> cStr = PyObject_Malloc (20 );
1009
- if (!GET_TC (tc )-> cStr ) {
1010
- PyErr_NoMemory ();
1011
- }
1012
1010
}
1013
1011
1014
1012
static int Index_iterNext (JSOBJ obj , JSONTypeContext * tc ) {
1015
- if (!GET_TC (tc )-> cStr ) {
1016
- return 0 ;
1017
- }
1018
-
1019
1013
const Py_ssize_t index = GET_TC (tc )-> index ;
1020
1014
Py_XDECREF (GET_TC (tc )-> itemValue );
1021
1015
if (index == 0 ) {
1022
- memcpy ( GET_TC (tc )-> cStr , "name" , 5 ) ;
1016
+ GET_TC (tc )-> cStr = "name" ;
1023
1017
GET_TC (tc )-> itemValue = PyObject_GetAttrString (obj , "name" );
1024
1018
} else if (index == 1 ) {
1025
- memcpy ( GET_TC (tc )-> cStr , "data" , 5 ) ;
1019
+ GET_TC (tc )-> cStr = "data" ;
1026
1020
GET_TC (tc )-> itemValue = get_values (obj );
1027
1021
if (!GET_TC (tc )-> itemValue ) {
1028
1022
return 0 ;
@@ -1042,8 +1036,8 @@ static JSOBJ Index_iterGetValue(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc) {
1042
1036
return GET_TC (tc )-> itemValue ;
1043
1037
}
1044
1038
1045
- static char * Index_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
1046
- size_t * outLen ) {
1039
+ static const char * Index_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
1040
+ size_t * outLen ) {
1047
1041
* outLen = strlen (GET_TC (tc )-> cStr );
1048
1042
return GET_TC (tc )-> cStr ;
1049
1043
}
@@ -1054,28 +1048,20 @@ static char *Index_iterGetName(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc,
1054
1048
static void Series_iterBegin (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ) {
1055
1049
PyObjectEncoder * enc = (PyObjectEncoder * )tc -> encoder ;
1056
1050
GET_TC (tc )-> index = 0 ;
1057
- GET_TC (tc )-> cStr = PyObject_Malloc (20 );
1058
1051
enc -> outputFormat = VALUES ; // for contained series
1059
- if (!GET_TC (tc )-> cStr ) {
1060
- PyErr_NoMemory ();
1061
- }
1062
1052
}
1063
1053
1064
1054
static int Series_iterNext (JSOBJ obj , JSONTypeContext * tc ) {
1065
- if (!GET_TC (tc )-> cStr ) {
1066
- return 0 ;
1067
- }
1068
-
1069
1055
const Py_ssize_t index = GET_TC (tc )-> index ;
1070
1056
Py_XDECREF (GET_TC (tc )-> itemValue );
1071
1057
if (index == 0 ) {
1072
- memcpy ( GET_TC (tc )-> cStr , "name" , 5 ) ;
1058
+ GET_TC (tc )-> cStr = "name" ;
1073
1059
GET_TC (tc )-> itemValue = PyObject_GetAttrString (obj , "name" );
1074
1060
} else if (index == 1 ) {
1075
- memcpy ( GET_TC (tc )-> cStr , "index" , 6 ) ;
1061
+ GET_TC (tc )-> cStr = "index" ;
1076
1062
GET_TC (tc )-> itemValue = PyObject_GetAttrString (obj , "index" );
1077
1063
} else if (index == 2 ) {
1078
- memcpy ( GET_TC (tc )-> cStr , "data" , 5 ) ;
1064
+ GET_TC (tc )-> cStr = "data" ;
1079
1065
GET_TC (tc )-> itemValue = get_values (obj );
1080
1066
if (!GET_TC (tc )-> itemValue ) {
1081
1067
return 0 ;
@@ -1097,8 +1083,8 @@ static JSOBJ Series_iterGetValue(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc) {
1097
1083
return GET_TC (tc )-> itemValue ;
1098
1084
}
1099
1085
1100
- static char * Series_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
1101
- size_t * outLen ) {
1086
+ static const char * Series_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
1087
+ size_t * outLen ) {
1102
1088
* outLen = strlen (GET_TC (tc )-> cStr );
1103
1089
return GET_TC (tc )-> cStr ;
1104
1090
}
@@ -1109,28 +1095,20 @@ static char *Series_iterGetName(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc,
1109
1095
static void DataFrame_iterBegin (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ) {
1110
1096
PyObjectEncoder * enc = (PyObjectEncoder * )tc -> encoder ;
1111
1097
GET_TC (tc )-> index = 0 ;
1112
- GET_TC (tc )-> cStr = PyObject_Malloc (20 );
1113
1098
enc -> outputFormat = VALUES ; // for contained series & index
1114
- if (!GET_TC (tc )-> cStr ) {
1115
- PyErr_NoMemory ();
1116
- }
1117
1099
}
1118
1100
1119
1101
static int DataFrame_iterNext (JSOBJ obj , JSONTypeContext * tc ) {
1120
- if (!GET_TC (tc )-> cStr ) {
1121
- return 0 ;
1122
- }
1123
-
1124
1102
const Py_ssize_t index = GET_TC (tc )-> index ;
1125
1103
Py_XDECREF (GET_TC (tc )-> itemValue );
1126
1104
if (index == 0 ) {
1127
- memcpy ( GET_TC (tc )-> cStr , "columns" , 8 ) ;
1105
+ GET_TC (tc )-> cStr = "columns" ;
1128
1106
GET_TC (tc )-> itemValue = PyObject_GetAttrString (obj , "columns" );
1129
1107
} else if (index == 1 ) {
1130
- memcpy ( GET_TC (tc )-> cStr , "index" , 6 ) ;
1108
+ GET_TC (tc )-> cStr = "index" ;
1131
1109
GET_TC (tc )-> itemValue = PyObject_GetAttrString (obj , "index" );
1132
1110
} else if (index == 2 ) {
1133
- memcpy ( GET_TC (tc )-> cStr , "data" , 5 ) ;
1111
+ GET_TC (tc )-> cStr = "data" ;
1134
1112
Py_INCREF (obj );
1135
1113
GET_TC (tc )-> itemValue = obj ;
1136
1114
} else {
@@ -1150,8 +1128,8 @@ static JSOBJ DataFrame_iterGetValue(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc) {
1150
1128
return GET_TC (tc )-> itemValue ;
1151
1129
}
1152
1130
1153
- static char * DataFrame_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
1154
- size_t * outLen ) {
1131
+ static const char * DataFrame_iterGetName (JSOBJ Py_UNUSED (obj ),
1132
+ JSONTypeContext * tc , size_t * outLen ) {
1155
1133
* outLen = strlen (GET_TC (tc )-> cStr );
1156
1134
return GET_TC (tc )-> cStr ;
1157
1135
}
@@ -1201,8 +1179,8 @@ static JSOBJ Dict_iterGetValue(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc) {
1201
1179
return GET_TC (tc )-> itemValue ;
1202
1180
}
1203
1181
1204
- static char * Dict_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
1205
- size_t * outLen ) {
1182
+ static const char * Dict_iterGetName (JSOBJ Py_UNUSED (obj ), JSONTypeContext * tc ,
1183
+ size_t * outLen ) {
1206
1184
* outLen = PyBytes_GET_SIZE (GET_TC (tc )-> itemName );
1207
1185
return PyBytes_AS_STRING (GET_TC (tc )-> itemName );
1208
1186
}
@@ -1902,7 +1880,6 @@ static void Object_endTypeContext(JSOBJ Py_UNUSED(obj), JSONTypeContext *tc) {
1902
1880
GET_TC (tc )-> rowLabels = NULL ;
1903
1881
NpyArr_freeLabels (GET_TC (tc )-> columnLabels , GET_TC (tc )-> columnLabelsLen );
1904
1882
GET_TC (tc )-> columnLabels = NULL ;
1905
- PyObject_Free (GET_TC (tc )-> cStr );
1906
1883
GET_TC (tc )-> cStr = NULL ;
1907
1884
PyObject_Free (tc -> prv );
1908
1885
tc -> prv = NULL ;
@@ -1953,8 +1930,8 @@ static JSOBJ Object_iterGetValue(JSOBJ obj, JSONTypeContext *tc) {
1953
1930
return GET_TC (tc )-> iterGetValue (obj , tc );
1954
1931
}
1955
1932
1956
- static char * Object_iterGetName (JSOBJ obj , JSONTypeContext * tc ,
1957
- size_t * outLen ) {
1933
+ static const char * Object_iterGetName (JSOBJ obj , JSONTypeContext * tc ,
1934
+ size_t * outLen ) {
1958
1935
return GET_TC (tc )-> iterGetName (obj , tc , outLen );
1959
1936
}
1960
1937
0 commit comments