AcouSTO  version 2.0

◆ heap_pop()

static heap_item heap_pop ( heap h)
static
843 {
844  heap_item ret;
845  int i, n, child;
846 
847  if (!(h->n)) {
848  fprintf(stderr, "attempted to pop an empty heap\n");
849  exit(EXIT_FAILURE);
850  }
851 
852  ret = h->items[0];
853  h->items[i = 0] = h->items[n = --(h->n)];
854  while ((child = i * 2 + 1) < n) {
855  int largest;
856  heap_item swap;
857 
858  if (KEY(h->items[child]) <= KEY(h->items[i]))
859  largest = i;
860  else
861  largest = child;
862  if (++child < n && KEY(h->items[largest]) < KEY(h->items[child]))
863  largest = child;
864  if (largest == i)
865  break;
866  swap = h->items[i];
867  h->items[i] = h->items[largest];
868  h->items[i = largest] = swap;
869  }
870 
871  {
872  unsigned i, fdim = h->fdim;
873  for (i = 0; i < fdim; ++i) {
874  h->ee[i].val -= ret.ee[i].val;
875  h->ee[i].err -= ret.ee[i].err;
876  }
877  }
878  return ret;
879 }
esterr * ee
Definition: cubature.c:774
#define KEY(hi)
Definition: cubature.c:768
double err
Definition: cubature.c:116
unsigned n
Definition: cubature.c:771
double val
Definition: cubature.c:116
unsigned fdim
Definition: cubature.c:773
heap_item * items
Definition: cubature.c:772
Definition: cubature.c:185
esterr * ee
Definition: cubature.c:189