{
int balance_index;
double sq_dist;
double mean;
double total;
double factor;
inT16 half_pitch = pitch / 2 - 1;
if (half_pitch > 31)
half_pitch = 31;
else if (half_pitch < 0)
half_pitch = 0;
lead_flag = 1 << half_pitch;
back_balance = cutpts[x - 1 - array_origin].back_balance << 1;
back_balance &= lead_flag + lead_flag - 1;
back_balance |= 1;
fwd_balance = cutpts[x - 1 - array_origin].fwd_balance >> 1;
if (projection->
pile_count (x + half_pitch) > zero_count)
fwd_balance |= lead_flag;
xpos = x;
region_index = 0;
for (index = x - pitch - pitch_error; index <= x - pitch + pitch_error;
index++) {
if (index >= array_origin) {
segpt = &cutpts[index - array_origin];
dist = x - segpt->xpos;
balance_count = 0;
lead_flag = back_balance ^ segpt->fwd_balance;
balance_count = 0;
while (lead_flag != 0) {
balance_count++;
lead_flag &= lead_flag - 1;
}
}
else {
for (balance_index = 0;
index + balance_index < x - balance_index;
balance_index++)
balance_count +=
(projection->
pile_count (index + balance_index) <=
balance_index)
<= zero_count);
}
balance_count =
projection_scale);
}
r_index = segpt->region_index + 1;
total = segpt->mean_sum + dist;
balance_count += offset;
sq_dist =
dist * dist + segpt->sq_sum + balance_count * balance_count;
mean = total / r_index;
factor = mean - pitch;
factor *= factor;
factor += sq_dist / (r_index) - mean * mean;
cost = factor;
pred = segpt;
mean_sum = total;
sq_sum = sq_dist;
mid_cuts = segpt->mid_cuts + mid_cut;
region_index = r_index;
}
}
}
}
}