bool is_number_unique (ElementType *element, const char* number) { int count = 0; PAD_OR_PIN_LOOP(element); { const char* pp_number = pad_or_pin_number(&pp); if (pp_number && number_cmp(pp_number, number) == 0) { if (++count > 1) { return false; } } } END_LOOP; return true; }
ElementPadPinData* alloc_pad_pin_data_array(ElementTypePtr element, int* len_ptr) { int len = element->PadN + element->PinN; ElementPadPinData* ppd = MyCalloc(len, sizeof(ElementPadPinData), "alloc_pad_pin_data_array"); /* Set the pad/pin pointers and centers */ int i = 0; PAD_OR_PIN_LOOP(element); { ppd[i].pp = pp; ppd[i].center = ppd[i].transformed_center = pad_or_pin_center(&pp); i++; } END_LOOP; /* Sort by pad/pin number */ qsort(ppd, len, sizeof(ElementPadPinData), pad_pin_data_cmp_by_number); /* Set the shared field */ int i_start = 0; const PadOrPinType* pp_start = &ppd[0].pp; /* Index i goes all the way to len; watch out. */ for (i = 1; i < len + 1; i++) { if (i == len || pad_or_pin_number_cmp(pp_start, &ppd[i].pp) != 0) { int shares = i - i_start; int j; for (j = i_start; j < i; j++) { ppd[j].shares = shares; } /* Prepare for next block */ if (i != len) { i_start = i; pp_start = &ppd[i].pp; } } } *len_ptr = len; return ppd; }