コード例 #1
0
ファイル: utilities.c プロジェクト: bert/pcb-plugins
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;
}
コード例 #2
0
ファイル: pad-pin-data.c プロジェクト: Mehanik/pcb-plugins
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;
}