Пример #1
0
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);
}
Пример #2
0
	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);
			}
		}
	}
Пример #3
0
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);
	}
}