@@ -596,110 +596,6 @@ STRINGLIB(utf16_decode)(const unsigned char **inptr, const unsigned char *e,
596596#undef SWAB
597597
598598
599- #if STRINGLIB_MAX_CHAR >= 0x80
600- Py_LOCAL_INLINE (Py_ssize_t )
601- STRINGLIB (utf16_encode_ )(const STRINGLIB_CHAR * in ,
602- Py_ssize_t len ,
603- unsigned short * * outptr ,
604- int native_ordering )
605- {
606- unsigned short * out = * outptr ;
607- const STRINGLIB_CHAR * end = in + len ;
608- #if STRINGLIB_SIZEOF_CHAR == 1
609- # define SWAB2 (CH ) ((CH) << 8)
610- #else
611- # define SWAB2 (CH ) (((CH) << 8) | ((CH) >> 8))
612- #endif
613- if (native_ordering ) {
614- #if STRINGLIB_MAX_CHAR < 0x10000
615- const STRINGLIB_CHAR * unrolled_end = in + _Py_SIZE_ROUND_DOWN (len , 4 );
616- while (in < unrolled_end ) {
617- # if STRINGLIB_MAX_CHAR >= 0xd800
618- if (((in [0 ] ^ 0xd800 ) &
619- (in [1 ] ^ 0xd800 ) &
620- (in [2 ] ^ 0xd800 ) &
621- (in [3 ] ^ 0xd800 ) & 0xf800 ) == 0 )
622- break ;
623- # endif
624- out [0 ] = in [0 ];
625- out [1 ] = in [1 ];
626- out [2 ] = in [2 ];
627- out [3 ] = in [3 ];
628- in += 4 ; out += 4 ;
629- }
630- #endif
631- while (in < end ) {
632- Py_UCS4 ch ;
633- ch = * in ++ ;
634- #if STRINGLIB_MAX_CHAR >= 0xd800
635- if (ch < 0xd800 )
636- * out ++ = ch ;
637- else if (ch < 0xe000 )
638- /* reject surrogate characters (U+DC800-U+DFFF) */
639- goto fail ;
640- # if STRINGLIB_MAX_CHAR >= 0x10000
641- else if (ch >= 0x10000 ) {
642- out [0 ] = Py_UNICODE_HIGH_SURROGATE (ch );
643- out [1 ] = Py_UNICODE_LOW_SURROGATE (ch );
644- out += 2 ;
645- }
646- # endif
647- else
648- #endif
649- * out ++ = ch ;
650- }
651- } else {
652- #if STRINGLIB_MAX_CHAR < 0x10000
653- const STRINGLIB_CHAR * unrolled_end = in + _Py_SIZE_ROUND_DOWN (len , 4 );
654- while (in < unrolled_end ) {
655- # if STRINGLIB_MAX_CHAR >= 0xd800
656- if (((in [0 ] ^ 0xd800 ) &
657- (in [1 ] ^ 0xd800 ) &
658- (in [2 ] ^ 0xd800 ) &
659- (in [3 ] ^ 0xd800 ) & 0xf800 ) == 0 )
660- break ;
661- # endif
662- out [0 ] = SWAB2 (in [0 ]);
663- out [1 ] = SWAB2 (in [1 ]);
664- out [2 ] = SWAB2 (in [2 ]);
665- out [3 ] = SWAB2 (in [3 ]);
666- in += 4 ; out += 4 ;
667- }
668- #endif
669- while (in < end ) {
670- Py_UCS4 ch = * in ++ ;
671- #if STRINGLIB_MAX_CHAR >= 0xd800
672- if (ch < 0xd800 )
673- * out ++ = SWAB2 ((Py_UCS2 )ch );
674- else if (ch < 0xe000 )
675- /* reject surrogate characters (U+DC800-U+DFFF) */
676- goto fail ;
677- # if STRINGLIB_MAX_CHAR >= 0x10000
678- else if (ch >= 0x10000 ) {
679- Py_UCS2 ch1 = Py_UNICODE_HIGH_SURROGATE (ch );
680- Py_UCS2 ch2 = Py_UNICODE_LOW_SURROGATE (ch );
681- out [0 ] = SWAB2 (ch1 );
682- out [1 ] = SWAB2 (ch2 );
683- out += 2 ;
684- }
685- # endif
686- else
687- #endif
688- * out ++ = SWAB2 ((Py_UCS2 )ch );
689- }
690- }
691- * outptr = out ;
692- return len ;
693- #if STRINGLIB_MAX_CHAR >= 0xd800
694- fail :
695- #endif
696- * outptr = out ;
697- return len - (end - in + 1 );
698- }
699- #endif
700-
701- #undef SWAB2
702-
703599#if STRINGLIB_MAX_CHAR >= 0x80
704600Py_LOCAL_INLINE (Py_ssize_t )
705601STRINGLIB (utf16_encode )(const STRINGLIB_CHAR * in ,
0 commit comments