| 35 | } |
| 36 | |
| 37 | PiuBoolean PiuRegionCombine(PiuRegion* region0, PiuRegion* region1, PiuRegion* region2, PiuCoordinate op) |
| 38 | { |
| 39 | PiuCoordinate* current0 = (*region0)->data; |
| 40 | PiuCoordinate* limit0 = current0 + (*region0)->available; |
| 41 | PiuCoordinate left0, top0, right0, bottom0; |
| 42 | PiuCoordinate* span0 = C_NULL;; |
| 43 | PiuCoordinate segmentCount0; |
| 44 | |
| 45 | PiuCoordinate* current1 = (*region1)->data; |
| 46 | PiuCoordinate* limit1 = current1 + *current1; |
| 47 | PiuCoordinate left1, top1, right1, bottom1; |
| 48 | PiuCoordinate* span1 = NULL; |
| 49 | PiuCoordinate segmentCount1 = 0; |
| 50 | PiuCoordinate* segment1; |
| 51 | PiuCoordinate* segmentLimit1; |
| 52 | |
| 53 | PiuCoordinate* current2 = (*region2)->data; |
| 54 | PiuCoordinate* limit2 = current2 + *current2; |
| 55 | PiuCoordinate left2, top2, right2, bottom2; |
| 56 | PiuCoordinate* span2 = NULL; |
| 57 | PiuCoordinate segmentCount2 = 0; |
| 58 | PiuCoordinate* segment2; |
| 59 | PiuCoordinate* segmentLimit2; |
| 60 | |
| 61 | PiuCoordinate* former = NULL; |
| 62 | PiuCoordinate test, c, y, flag, old, x; |
| 63 | |
| 64 | current1++; |
| 65 | left1 = *current1++; |
| 66 | top1 = *current1++; |
| 67 | right1 = left1 + *current1++; |
| 68 | bottom1 = top1 + *current1++; |
| 69 | current2++; |
| 70 | left2 = *current2++; |
| 71 | top2 = *current2++; |
| 72 | right2 = left2 + *current2++; |
| 73 | bottom2 = top2 + *current2++; |
| 74 | |
| 75 | if (current1 == limit1) |
| 76 | return (op & 1) ? PiuRegionEmpty(region0) : PiuRegionCopy(region0, region2); |
| 77 | if (current2 == limit2) |
| 78 | return (op & 2) ? PiuRegionEmpty(region0) : PiuRegionCopy(region0, region1); |
| 79 | if (op & 3) { |
| 80 | if ((right2 <= left1) || (right1 <= left2) || (bottom2 <= top1) || (bottom1 <= top2)) |
| 81 | return (op & 2) ? PiuRegionEmpty(region0) : PiuRegionCopy(region0, region1); |
| 82 | left0 = (right1 > right2) ? right1 : right2; |
| 83 | right0 = (left1 > left2) ? left2 : left1; |
| 84 | } |
| 85 | else { |
| 86 | left0 = (left1 > left2) ? left2 : left1; |
| 87 | right0 = (right1 > right2) ? right1 : right2; |
| 88 | } |
| 89 | current0 += 5; |
| 90 | |
| 91 | if (*current1 < *current2) { |
| 92 | if (op & 2) { |
| 93 | while ((current1 < limit1) && (*current1 < *current2)) { |
| 94 | current1++; |
no test coverage detected