void * aresize(void *ptr, size_t numb, Area *ap) { ALLOC_ITEM *lp = NULL; /* resizing (true) or newly allocating? */ if (ptr != NULL) { ALLOC_ITEM *pp; pp = findptr(&lp, ptr, ap); pp->next = lp->next; } if ((numb >= SIZE_MAX - ALLOC_SIZE) || (lp = remalloc(lp, numb + ALLOC_SIZE)) == NULL #ifndef MKSH_SMALL || ALLOC_ISUNALIGNED(lp) #endif ) internal_errorf("cannot allocate %lu data bytes", (unsigned long)numb); /* this only works because Area is an ALLOC_ITEM */ lp->next = ap->next; ap->next = lp; /* return user item address */ return ((char *)lp + ALLOC_SIZE); }
void applyInverse(const GivensRotation& Q) { assert(Q.i1 < n); assert(Q.i2 < n); FIELD* p1 = findptr(Q.i1); FIELD* p2 = findptr(Q.i2); if (p1 == &dummyZero) { if (p2 == &dummyZero) return; FIELD x2 = *p2; *p2 = Q.cos * x2; insert(Q.i1, Q.sin * x2); } else { FIELD x1 = *p1; if (p2 == &dummyZero) { *p1 = Q.cos * x1; insert(Q.i2, -Q.sin * x1); } else { *p1 = Q.cos * x1 + Q.sin * (*p2); *p2 = -Q.sin * x1 + Q.cos * (*p2); } } }
void afree(void *ptr, Area *ap) { if (ptr != NULL) { ALLOC_ITEM *lp, *pp; pp = findptr(&lp, ptr, ap); /* unhook */ pp->next = lp->next; /* now free ALLOC_ITEM */ free(lp); } }