bool have_any_corresponding_pad_or_pin (ElementType *old_element, ElementType *new_element, PadOrPinType* old_pp, PadOrPinType* new_pp) { PAD_OR_PIN_LOOP_HYG(old_element, _old); { PAD_OR_PIN_LOOP_HYG(new_element, _new); { if (pad_or_pin_number_cmp(&pp_old, &pp_new) == 0) { if (old_pp) { *old_pp = pp_old; } if (new_pp) { *new_pp = pp_new; } return true; } } END_LOOP; } END_LOOP; return false; }
static bool have_two_corresponding_aux (ElementType *old_element, ElementType *new_element, bool unique, bool non_coincident, PadOrPinType* old1_pp_ptr, PadOrPinType* old2_pp_ptr, PadOrPinType* new1_pp_ptr, PadOrPinType* new2_pp_ptr) { PadOrPinType old1_pp = make_pad_or_pin(NULL, NULL); PadOrPinType new1_pp = make_pad_or_pin(NULL, NULL); bool first_found = false; PAD_OR_PIN_LOOP_HYG(old_element, _old); { if (! unique || is_number_unique(old_element, pad_or_pin_number(&pp_old))) { CheapPointType old_pt = pad_or_pin_center(&pp_old); PAD_OR_PIN_LOOP_HYG(new_element, _new); { if (pad_or_pin_number_cmp(&pp_old, &pp_new) == 0 && (! unique || is_number_unique(new_element, pad_or_pin_number(&pp_new)))) { CheapPointType new_pt = pad_or_pin_center(&pp_new); if (! non_coincident || point_distance2(old_pt, new_pt)) { if (! first_found) { old1_pp = pp_old; new1_pp = pp_new; first_found = true; } else { if (old1_pp_ptr) { *old1_pp_ptr = old1_pp; } if (new1_pp_ptr) { *new1_pp_ptr = new1_pp; } if (old2_pp_ptr) { *old2_pp_ptr = pp_old; } if (new2_pp_ptr) { *new2_pp_ptr = pp_new; } return true; } } } } END_LOOP; } } END_LOOP; return false; }
static void transfer_flags(ElementTypePtr old_element, ElementTypePtr new_element) { PAD_OR_PIN_LOOP_HYG(old_element, _old); { if (pad_or_pin_test_flag(&pp_old, SELECTEDFLAG)) { PAD_OR_PIN_LOOP_HYG(new_element, _new); { if (pad_or_pin_number_cmp(&pp_old, &pp_new) == 0) { pad_or_pin_set_flag(&pp_new, SELECTEDFLAG); } } END_LOOP; } } END_LOOP; if (TEST_FLAG(SELECTEDFLAG, old_element)) { SET_FLAG(SELECTEDFLAG, new_element); } }
static void transfer_names(ElementTypePtr old_element, ElementTypePtr new_element) { PAD_OR_PIN_LOOP_HYG(old_element, _old); { const char* old_name = pad_or_pin_name(&pp_old); PAD_OR_PIN_LOOP_HYG(new_element, _new); { if (pad_or_pin_number_cmp(&pp_old, &pp_new) == 0) { if (pp_new.pad) { MYFREE(pp_new.pad->Name); pp_new.pad->Name = MyStrdup((char*)old_name, "transfer_names()"); } else if (pp_new.pin) { MYFREE(pp_new.pin->Name); pp_new.pin->Name = MyStrdup((char*)old_name, "transfer_names()"); } } } END_LOOP; } END_LOOP; }