150 {
151 if (key_range.first == key_range.second) {
153 }
154
155 auto [key_start,key_end ] = key_range;
156 if (key_end < key_start) {
158 }
159 if (
helper.getRow(key_end)+1u==
helper.rowsPerCircuit()) {
160
161
163 }
164 if (
helper.getRow(key_start)==0u &&
helper.getColumn(key_start)>0) {
165 key_start =
helper.makeKey(
false,
helper.getChip(key_start),
helper.getColumn(key_start)-1,
helper.rowsPerCircuit());
166 }
167
168
169
170
171
172
173
174
175
176
177
179 bool is_range = (
iter != end_iter && T_ModuleHelper::isRangeKey(*iter));
180 bool inserted_something=false;
181 if (!is_range) {
182
183 if (iter != end_iter && ( T_ModuleHelper::makeBaseKey(*iter) == key_start
184 || T_ModuleHelper::makeBaseKey(*iter) >=
makePrevKey(helper,key_start))) {
187 if (next != end_iter && T_ModuleHelper::isRangeKey(*next)) {
188
189
190 iter = module_defects.erase(iter);
191 }
192 else {
193 if (T_ModuleHelper::makeBaseKey(*iter) == key_start) {
194 if ( defect_type_key_component >
helper.getDefectTypeComponent(*iter)) {
195 *
iter = (*
iter & (~T_ModuleHelper::TYPE_MASK)) | defect_type_key_component;
196 }
197 }
198
199 if (
helper.getRow(*iter)==0u &&
helper.getColumn(*iter)>0) {
200
202 }
203 else {
204 *
iter = T_ModuleHelper::makeRangeKey(*iter);
205 }
206 }
207 }
208 else {
209 iter = module_defects.insert(iter,T_ModuleHelper::makeRangeKey(key_start) | defect_type_key_component);
210 }
211 inserted_something=true;
212 }
213
214
215
216 while (iter != module_defects.begin()) {
218
219
220 if (T_ModuleHelper::makeBaseKey(*iter) >= key_end) {
221
222
223
224
225
226 if (is_range || T_ModuleHelper::makeBaseKey(*iter) == key_end ||
makePrevKey(helper,*iter) <= key_end) {
227
228
229 inserted_something |= ( T_ModuleHelper::makeBaseKey(*iter) > key_end ) && (!is_range || defect_type_key_component >
helper.getDefectTypeComponent(*iter)) ;
230
231 if (T_ModuleHelper::isRangeKey(*iter)) {
232 module_defects.erase(iter);
233 }
234 else {
235 if (T_ModuleHelper::makeBaseKey(*iter) == key_end) {
236 if ( defect_type_key_component >
helper.getDefectTypeComponent(*iter)) {
237 *
iter = (*
iter & (~T_ModuleHelper::TYPE_MASK)) | defect_type_key_component;
238 }
239 }
240 }
241 return inserted_something;
242 }
244 break;
245 }
246
247 is_range=T_ModuleHelper::isRangeKey(*iter);
248
249 iter=module_defects.erase(iter);
250 }
251 module_defects.insert(iter,key_end | defect_type_key_component );
252 return true;
253 }
bool insertKey(const T_ModuleHelper &helper, std::vector< typename T_ModuleHelper::KEY_TYPE > &module_defects, typename T_ModuleHelper::KEY_TYPE key, typename T_ModuleHelper::KEY_TYPE defect_type_key_component)
void swap(ElementLinkVector< DOBJ > &lhs, ElementLinkVector< DOBJ > &rhs)