Lines Matching defs:diff
214 /* Faster versions of packDiff() for single-byte-encoded diff values. */
216 /** Is a diff value encodable in a single byte? */
217 #define DIFF_IS_SINGLE(diff) (BOCU1_REACH_NEG_1<=(diff) && (diff)<=BOCU1_REACH_POS_1)
219 /** Encode a diff value in a single byte. */
220 #define PACK_SINGLE_DIFF(diff) (BOCU1_MIDDLE+(diff))
222 /** Is a diff value encodable in two bytes? */
223 #define DIFF_IS_DOUBLE(diff) (BOCU1_REACH_NEG_2<=(diff) && (diff)<=BOCU1_REACH_POS_2)
264 * mode decoder's incomplete (diff<<2)|count (ignored when toULength==0)
279 * @param diff difference value -0x10ffff..0x10ffff
287 packDiff(int32_t diff) {
290 U_ASSERT(!DIFF_IS_SINGLE(diff)); /* assume we won't be called where diff==BOCU1_REACH_NEG_1=-64 */
291 if(diff>=BOCU1_REACH_NEG_1) {
294 if(diff<=BOCU1_REACH_POS_1) {
296 return 0x01000000|(BOCU1_MIDDLE+diff);
299 if(diff<=BOCU1_REACH_POS_2) {
301 diff-=BOCU1_REACH_POS_1+1;
304 m=diff%BOCU1_TRAIL_COUNT;
305 diff/=BOCU1_TRAIL_COUNT;
308 result|=(BOCU1_START_POS_2+diff)<<8;
309 } else if(diff<=BOCU1_REACH_POS_3) {
311 diff-=BOCU1_REACH_POS_2+1;
314 m=diff%BOCU1_TRAIL_COUNT;
315 diff/=BOCU1_TRAIL_COUNT;
318 m=diff%BOCU1_TRAIL_COUNT;
319 diff/=BOCU1_TRAIL_COUNT;
322 result|=(BOCU1_START_POS_3+diff)<<16;
325 diff-=BOCU1_REACH_POS_3+1;
327 m=diff%BOCU1_TRAIL_COUNT;
328 diff/=BOCU1_TRAIL_COUNT;
331 m=diff%BOCU1_TRAIL_COUNT;
332 diff/=BOCU1_TRAIL_COUNT;
336 * We know that / and % would deliver quotient 0 and rest=diff.
339 result|=BOCU1_TRAIL_TO_BYTE(diff)<<16;
345 if(diff>=BOCU1_REACH_NEG_2) {
347 diff-=BOCU1_REACH_NEG_1;
350 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
353 result|=(BOCU1_START_NEG_2+diff)<<8;
354 } else if(diff>=BOCU1_REACH_NEG_3) {
356 diff-=BOCU1_REACH_NEG_2;
359 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
362 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
365 result|=(BOCU1_START_NEG_3+diff)<<16;
368 diff-=BOCU1_REACH_NEG_3;
370 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
373 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
378 * quotient -1 and rest=diff+BOCU1_TRAIL_COUNT.
381 m=diff+BOCU1_TRAIL_COUNT;
400 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);
556 *target++=(uint8_t)(diff>>16);
560 *target++=(uint8_t)(diff>>8);
563 *target++=(uint8_t)diff;
587 *charErrorBuffer++=(uint8_t)(diff>>16);
590 *charErrorBuffer++=(uint8_t)(diff>>8);
593 *charErrorBuffer=(uint8_t)diff;
602 diff>>=8*length; /* length was reduced by targetCapacity */
606 *target++=(uint8_t)(diff>>16);
610 *target++=(uint8_t)(diff>>8);
614 *target++=(uint8_t)diff;
660 int32_t prev, c, diff;
684 diff=(int32_t)(sourceLimit-source);
685 if(targetCapacity>diff) {
686 targetCapacity=diff;
695 diff=c-prev;
696 if(DIFF_IS_SINGLE(diff)) {
698 *target++=(uint8_t)PACK_SINGLE_DIFF(diff);
753 diff=c-prev;
755 if(DIFF_IS_SINGLE(diff)) {
756 *target++=(uint8_t)PACK_SINGLE_DIFF(diff);
761 } else if(DIFF_IS_DOUBLE(diff) && 2<=targetCapacity) {
765 if(diff>=0) {
766 diff-=BOCU1_REACH_POS_1+1;
767 m=diff%BOCU1_TRAIL_COUNT;
768 diff/=BOCU1_TRAIL_COUNT;
769 diff+=BOCU1_START_POS_2;
771 diff-=BOCU1_REACH_NEG_1;
772 NEGDIVMOD(diff, BOCU1_TRAIL_COUNT, m);
773 diff+=BOCU1_START_NEG_2;
775 *target++=(uint8_t)diff;
781 diff=packDiff(diff);
782 length=BOCU1_LENGTH_FROM_PACKED(diff);
784 /* write the output character bytes from diff and length */
790 *target++=(uint8_t)(diff>>24);
793 *target++=(uint8_t)(diff>>16);
795 *target++=(uint8_t)(diff>>8);
797 *target++=(uint8_t)diff;
819 *charErrorBuffer++=(uint8_t)(diff>>16);
822 *charErrorBuffer++=(uint8_t)(diff>>8);
825 *charErrorBuffer=(uint8_t)diff;
834 diff>>=8*length; /* length was reduced by targetCapacity */
838 *target++=(uint8_t)(diff>>16);
841 *target++=(uint8_t)(diff>>8);
844 *target++=(uint8_t)diff;
880 * @return (diff<<2)|count
884 int32_t diff, count;
890 diff=((int32_t)b-BOCU1_START_POS_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_POS_1+1;
894 diff=((int32_t)b-BOCU1_START_POS_3)*BOCU1_TRAIL_COUNT*BOCU1_TRAIL_COUNT+BOCU1_REACH_POS_2+1;
898 diff=BOCU1_REACH_POS_3+1;
905 diff=((int32_t)b-BOCU1_START_NEG_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_NEG_1;
909 diff=((int32_t)b-BOCU1_START_NEG_3)*BOCU1_TRAIL_COUNT*BOCU1_TRAIL_COUNT+BOCU1_REACH_NEG_2;
913 diff=-BOCU1_TRAIL_COUNT*BOCU1_TRAIL_COUNT*BOCU1_TRAIL_COUNT+BOCU1_REACH_NEG_3;
919 return (diff<<2)|count;
927 * @return new delta for diff including b - <0 indicates an error
964 int32_t prev, count, diff, c;
984 diff=cnv->mode; /* mode may be set to UCNV_SI by ucnv_bld.c but then toULength==0 */
985 count=diff&3;
986 diff>>=2;
1003 diff=(int32_t)(sourceLimit-source);
1005 if(count>diff) {
1006 count=diff;
1067 diff=((int32_t)c-BOCU1_START_POS_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_POS_1+1;
1069 diff=((int32_t)c-BOCU1_START_NEG_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_NEG_1;
1075 if(c<0 || (uint32_t)(c=prev+diff+c)>0x10ffff) {
1096 diff=decodeBocu1LeadByte(c);
1097 count=diff&3;
1098 diff>>=2;
1114 diff+=c;
1118 c=prev+diff;
1160 cnv->mode=(diff<<2)|count;
1186 int32_t prev, count, diff, c;
1203 diff=cnv->mode; /* mode may be set to UCNV_SI by ucnv_bld.c but then toULength==0 */
1204 count=diff&3;
1205 diff>>=2;
1218 diff=(int32_t)(sourceLimit-source);
1220 if(count>diff) {
1221 count=diff;
1274 diff=((int32_t)c-BOCU1_START_POS_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_POS_1+1;
1276 diff=((int32_t)c-BOCU1_START_NEG_2)*BOCU1_TRAIL_COUNT+BOCU1_REACH_NEG_1;
1281 if(c<0 || (uint32_t)(c=prev+diff+c)>0x10ffff) {
1301 diff=decodeBocu1LeadByte(c);
1302 count=diff&3;
1303 diff>>=2;
1318 diff+=c;
1322 c=prev+diff;
1359 cnv->mode=(diff<<2)|count;