1313#include "numpy/ndarraytypes.h"
1414#include "numpy/dtype_api.h"
1515
16+ #include "quad_common.h"
1617#include "scalar.h"
1718#include "casts.h"
1819#include "dtype.h"
1920#include "dragon4.h"
2021#include "constants.hpp"
22+ #include "utilities.h"
2123
2224static inline int
2325quad_load (void * x , char * data_ptr , QuadBackendType backend )
@@ -353,19 +355,16 @@ quadprec_scanfunc(FILE *fp, void *dptr, char *ignore, PyArray_Descr *descr_gener
353355
354356 /* Convert string to quad precision */
355357 char * endptr ;
358+ quad_value val ;
359+ cstring_to_quad (buffer , descr -> backend , & val , & endptr );
360+ if (endptr == buffer ) {
361+ return 0 ; /* Return 0 on parse error (no items read) */
362+ }
356363 if (descr -> backend == BACKEND_SLEEF ) {
357- Sleef_quad val = Sleef_strtoq (buffer , & endptr );
358- if (endptr == buffer ) {
359- return 0 ; /* Return 0 on parse error (no items read) */
360- }
361- * (Sleef_quad * )dptr = val ;
364+ * (Sleef_quad * )dptr = val .sleef_value ;
362365 }
363366 else {
364- long double val = strtold (buffer , & endptr );
365- if (endptr == buffer ) {
366- return 0 ; /* Return 0 on parse error (no items read) */
367- }
368- * (long double * )dptr = val ;
367+ * (long double * )dptr = val .longdouble_value ;
369368 }
370369
371370 return 1 ; /* Return 1 on success (1 item read) */
@@ -375,22 +374,17 @@ static int
375374quadprec_fromstr (char * s , void * dptr , char * * endptr , PyArray_Descr * descr_generic )
376375{
377376 QuadPrecDTypeObject * descr = (QuadPrecDTypeObject * )descr_generic ;
378-
379- if ( descr -> backend == BACKEND_SLEEF ) {
380- Sleef_quad val = Sleef_strtoq ( s , endptr );
381- if ( * endptr == s ) {
382- return -1 ;
383- }
384- * (Sleef_quad * )dptr = val ;
377+ quad_value val ;
378+ cstring_to_quad ( s , descr -> backend , & val , endptr );
379+ if ( * endptr == s ) {
380+ return -1 ;
381+ }
382+ if ( descr -> backend == BACKEND_SLEEF ) {
383+ * (Sleef_quad * )dptr = val . sleef_value ;
385384 }
386385 else {
387- long double val = strtold (s , endptr );
388- if (* endptr == s ) {
389- return -1 ;
390- }
391- * (long double * )dptr = val ;
386+ * (long double * )dptr = val .longdouble_value ;
392387 }
393-
394388 return 0 ;
395389}
396390
0 commit comments