151 if (key_range.first == key_range.second) {
152 return insertKey<T_ModuleHelper>(
helper, module_defects, key_range.first, defect_type_key_component);
155 auto [key_start,key_end ] = key_range;
156 if (key_end < key_start) {
164 if (
helper.getRow(key_start)==0
u &&
helper.getColumn(key_start)>0) {
165 key_start =
helper.makeKey(
false,
helper.getChip(key_start),
helper.getColumn(key_start)-1,
helper.rowsPerCircuit());
179 bool is_range = (
iter != end_iter && T_ModuleHelper::isRangeKey(*
iter));
180 bool inserted_something=
false;
183 if (
iter != end_iter && ( T_ModuleHelper::makeBaseKey(*
iter) == key_start
187 if (
next != end_iter && T_ModuleHelper::isRangeKey(*
next)) {
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;
204 *
iter = T_ModuleHelper::makeRangeKey(*
iter);
209 iter = module_defects.insert(
iter,T_ModuleHelper::makeRangeKey(key_start) | defect_type_key_component);
211 inserted_something=
true;
216 while (
iter != module_defects.begin()) {
220 if (T_ModuleHelper::makeBaseKey(*
iter) >= key_end) {
229 inserted_something |= ( T_ModuleHelper::makeBaseKey(*
iter) > key_end ) && (!is_range || defect_type_key_component >
helper.getDefectTypeComponent(*
iter)) ;
231 if (T_ModuleHelper::isRangeKey(*
iter)) {
232 module_defects.erase(
iter);
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;
241 return inserted_something;
247 is_range=T_ModuleHelper::isRangeKey(*
iter);
251 module_defects.insert(
iter,key_end | defect_type_key_component );