Lines Matching refs:diff

212 /* Faster versions of packDiff() for single-byte-encoded diff values. */
214 /** Is a diff value encodable in a single byte? */
215 #define DIFF_IS_SINGLE(diff) (BOCU1_REACH_NEG_1<=(diff) && (diff)<=BOCU1_REACH_POS_1)
217 /** Encode a diff value in a single byte. */
218 #define PACK_SINGLE_DIFF(diff) (BOCU1_MIDDLE+(diff))
220 /** Is a diff value encodable in two bytes? */
221 #define DIFF_IS_DOUBLE(diff) (BOCU1_REACH_NEG_2<=(diff) && (diff)<=BOCU1_REACH_POS_2)
262 * mode decoder's incomplete (diff<<2)|count (ignored when toULength==0)
277 * @param diff difference value -0x10ffff..0x10ffff
285 packDiff(int32_t diff) {
288 U_ASSERT(!DIFF_IS_SINGLE(diff)); /* assume we won't be called where diff==BOCU1_REACH_NEG_1=-64 */
289 if(diff>=BOCU1_REACH_NEG_1) {
292 if(diff<=BOCU1_REACH_POS_1) {
294 return 0x01000000|(BOCU1_MIDDLE+diff);
297 if(diff<=BOCU1_REACH_POS_2) {
299 diff-=BOCU1_REACH_POS_1+1;
302 m=diff%BOCU1_TRAIL_COUNT;
303 diff/=BOCU1_TRAIL_COUNT;
306 result|=(BOCU1_START_POS_2+diff)<<8;
307 } else if(diff<=BOCU1_REACH_POS_3) {
309 diff-=BOCU1_REACH_POS_2+1;
312 m=diff%BOCU1_TRAIL_COUNT;
313 diff/=BOCU1_TRAIL_COUNT;
316 m=diff%BOCU1_TRAIL_COUNT;
317 diff/=BOCU1_TRAIL_COUNT;
320 result|=(BOCU1_START_POS_3+diff)<<16;
323 diff-=BOCU1_REACH_POS_3+1;
325 m=diff%BOCU1_TRAIL_COUNT;
326 diff/=BOCU1_TRAIL_COUNT;
329 m=diff%BOCU1_TRAIL_COUNT;
330 diff/=BOCU1_TRAIL_COUNT;
334 * We know that / and % would deliver quotient 0 and rest=diff.
337 result|=BOCU1_TRAIL_TO_BYTE(diff)<<16;
343 if(diff>=BOCU1_REACH_NEG_2) {
345 diff-=BOCU1_REACH_NEG_1;
348 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
351 result|=(BOCU1_START_NEG_2+diff)<<8;
352 } else if(diff>=BOCU1_REACH_NEG_3) {
354 diff-=BOCU1_REACH_NEG_2;
357 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
360 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
363 result|=(BOCU1_START_NEG_3+diff)<<16;
366 diff-=BOCU1_REACH_NEG_3;
368 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
371 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
376 * quotient -1 and rest=diff+BOCU1_TRAIL_COUNT.
379 m=diff+BOCU1_TRAIL_COUNT;
398 int32_t prev, c, diff;
431 diff=(int32_t)(sourceLimit-source);
432 if(targetCapacity>diff) {
433 targetCapacity=diff;
445 diff=c-prev;
446 if(DIFF_IS_SINGLE(diff)) {
448 *target++=(uint8_t)PACK_SINGLE_DIFF(diff);
510 diff=c-prev;
512 if(DIFF_IS_SINGLE(diff)) {
513 *target++=(uint8_t)PACK_SINGLE_DIFF(diff);
520 } else if(DIFF_IS_DOUBLE(diff) && 2<=targetCapacity) {
524 if(diff>=0) {
525 diff-=BOCU1_REACH_POS_1+1;
526 m=diff%BOCU1_TRAIL_COUNT;
527 diff/=BOCU1_TRAIL_COUNT;
528 diff+=BOCU1_START_POS_2;
530 diff-=BOCU1_REACH_NEG_1;
531 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
532 diff+=BOCU1_START_NEG_2;
534 *target++=(uint8_t)diff;
543 diff=packDiff(diff);
544 length=BOCU1_LENGTH_FROM_PACKED(diff);
546 /* write the output character bytes from diff and length */
552 *target++=(uint8_t)(diff>>24);
555 *target++=(uint8_t)(diff>>16);
558 *target++=(uint8_t)(diff>>8);
561 *target++=(uint8_t)diff;
584 *charErrorBuffer++=(uint8_t)(diff>>16);
586 *charErrorBuffer++=(uint8_t)(diff>>8);
588 *charErrorBuffer=(uint8_t)diff;
596 diff>>=8*length; /* length was reduced by targetCapacity */
600 *target++=(uint8_t)(diff>>16);
603 *target++=(uint8_t)(diff>>8);
606 *target++=(uint8_t)diff;
651 int32_t prev, c, diff;
675 diff=(int32_t)(sourceLimit-source);
676 if(targetCapacity>diff) {
677 targetCapacity=diff;
686 diff=c-prev;
687 if(DIFF_IS_SINGLE(diff)) {
689 *target++=(uint8_t)PACK_SINGLE_DIFF(diff);
744 diff=c-prev;
746 if(DIFF_IS_SINGLE(diff)) {
747 *target++=(uint8_t)PACK_SINGLE_DIFF(diff);
752 } else if(DIFF_IS_DOUBLE(diff) && 2<=targetCapacity) {
756 if(diff>=0) {
757 diff-=BOCU1_REACH_POS_1+1;
758 m=diff%BOCU1_TRAIL_COUNT;
759 diff/=BOCU1_TRAIL_COUNT;
760 diff+=BOCU1_START_POS_2;
762 diff-=BOCU1_REACH_NEG_1;
763 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
764 diff+=BOCU1_START_NEG_2;
766 *target++=(uint8_t)diff;
772 diff=packDiff(diff);
773 length=BOCU1_LENGTH_FROM_PACKED(diff);
775 /* write the output character bytes from diff and length */
781 *target++=(uint8_t)(diff>>24);
783 *target++=(uint8_t)(diff>>16);
785 *target++=(uint8_t)(diff>>8);
787 *target++=(uint8_t)diff;
808 *charErrorBuffer++=(uint8_t)(diff>>16);
810 *charErrorBuffer++=(uint8_t)(diff>>8);
812 *charErrorBuffer=(uint8_t)diff;
820 diff>>=8*length; /* length was reduced by targetCapacity */
824 *target++=(uint8_t)(diff>>16);
826 *target++=(uint8_t)(diff>>8);
828 *target++=(uint8_t)diff;
863 * @return (diff<<2)|count
867 int32_t diff, count;
873 diff=((int32_t)b-BOCU1_START_POS_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_POS_1+1;
877 diff=((int32_t)b-BOCU1_START_POS_3)*BOCU1_TRAIL_COUNT*BOCU1_TRAIL_COUNT+BOCU1_REACH_POS_2+1;
881 diff=BOCU1_REACH_POS_3+1;
888 diff=((int32_t)b-BOCU1_START_NEG_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_NEG_1;
892 diff=((int32_t)b-BOCU1_START_NEG_3)*BOCU1_TRAIL_COUNT*BOCU1_TRAIL_COUNT+BOCU1_REACH_NEG_2;
896 diff=-BOCU1_TRAIL_COUNT*BOCU1_TRAIL_COUNT*BOCU1_TRAIL_COUNT+BOCU1_REACH_NEG_3;
902 return (diff<<2)|count;
910 * @return new delta for diff including b - <0 indicates an error
947 int32_t prev, count, diff, c;
967 diff=cnv->mode; /* mode may be set to UCNV_SI by ucnv_bld.c but then toULength==0 */
968 count=diff&3;
969 diff>>=2;
986 diff=(int32_t)(sourceLimit-source);
988 if(count>diff) {
989 count=diff;
1050 diff=((int32_t)c-BOCU1_START_POS_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_POS_1+1;
1052 diff=((int32_t)c-BOCU1_START_NEG_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_NEG_1;
1058 if(c<0 || (uint32_t)(c=prev+diff+c)>0x10ffff) {
1079 diff=decodeBocu1LeadByte(c);
1080 count=diff&3;
1081 diff>>=2;
1097 diff+=c;
1101 c=prev+diff;
1143 cnv->mode=(diff<<2)|count;
1169 int32_t prev, count, diff, c;
1188 diff=cnv->mode; /* mode may be set to UCNV_SI by ucnv_bld.c but then toULength==0 */
1189 count=diff&3;
1190 diff>>=2;
1203 diff=(int32_t)(sourceLimit-source);
1205 if(count>diff) {
1206 count=diff;
1259 diff=((int32_t)c-BOCU1_START_POS_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_POS_1+1;
1261 diff=((int32_t)c-BOCU1_START_NEG_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_NEG_1;
1266 if(c<0 || (uint32_t)(c=prev+diff+c)>0x10ffff) {
1286 diff=decodeBocu1LeadByte(c);
1287 count=diff&3;
1288 diff>>=2;
1303 diff+=c;
1307 c=prev+diff;
1344 cnv->mode=(diff<<2)|count;