103 {
105 int balance_index;
106 int16_t balance_count;
107 int16_t r_index;
109 int32_t dist;
110 double sq_dist;
111 double mean;
112 double total;
113 double factor;
114
115 int16_t half_pitch = pitch / 2 - 1;
116 uint32_t lead_flag;
117
118 if (half_pitch > 31)
119 half_pitch = 31;
120 else if (half_pitch < 0)
121 half_pitch = 0;
122 lead_flag = 1 << half_pitch;
123
124 back_balance = cutpts[x - 1 - array_origin].back_balance << 1;
125 back_balance &= lead_flag + lead_flag - 1;
127 back_balance |= 1;
128 fwd_balance = cutpts[x - 1 - array_origin].fwd_balance >> 1;
129 if (projection->
pile_count (x + half_pitch) > zero_count)
130 fwd_balance |= lead_flag;
131
132 xpos = x;
133 cost = FLT_MAX;
134 pred = nullptr;
137 region_index = 0;
139 for (
index = x - pitch - pitch_error;
index <= x - pitch + pitch_error;
141 if (
index >= array_origin) {
142 segpt = &cutpts[
index - array_origin];
143 dist = x - segpt->xpos;
145 balance_count = 0;
148 lead_flag = back_balance ^ segpt->fwd_balance;
149 balance_count = 0;
150 while (lead_flag != 0) {
151 balance_count++;
152 lead_flag &= lead_flag - 1;
153 }
154 }
155 else {
156 for (balance_index = 0;
157 index + balance_index < x - balance_index;
158 balance_index++)
159 balance_count +=
162 balance_index)
163 <= zero_count);
164 }
165 balance_count =
167 projection_scale);
168 }
169 r_index = segpt->region_index + 1;
170 total = segpt->mean_sum + dist;
171 balance_count += offset;
172 sq_dist =
173 dist * dist + segpt->sq_sum + balance_count * balance_count;
174 mean = total / r_index;
175 factor = mean - pitch;
176 factor *= factor;
177 factor += sq_dist / (r_index) - mean * mean;
179 cost = factor;
180 pred = segpt;
181 mean_sum = total;
182 sq_sum = sq_dist;
184 mid_cuts = segpt->mid_cuts + mid_cut;
185 region_index = r_index;
186 }
187 }
188 }
189 }
190}
bool textord_fast_pitch_test
double textord_balance_factor
int32_t pile_count(int32_t value) const