/* General routines for manipulating a bag data structure */
#include"util.h" #include"bag.h"
struct bag { void *items; /* hold items in bag, must align on itemSize */ int used; /* number of items in bag */ int allocated; /* space reserved */ int itemSize; /* size of each item, should init to sizeof item */
};
struct bag *
bagCreateBag(int itemSize, int initialAllocation) { struct bag *theBag = (struct bag *)jvmtiAllocate(sizeof(struct bag)); if (theBag == NULL) { return NULL;
}
itemSize = (itemSize + 7) & ~7; /* fit 8 byte boundary */
theBag->items = jvmtiAllocate(initialAllocation * itemSize); if (theBag->items == NULL) {
jvmtiDeallocate(theBag); return NULL;
}
theBag->used = 0;
theBag->allocated = initialAllocation;
theBag->itemSize = itemSize; return theBag;
}
struct bag *
bagDup(struct bag *oldBag)
{ struct bag *newBag = bagCreateBag(oldBag->itemSize,
oldBag->allocated); if (newBag != NULL) {
newBag->used = oldBag->used;
(void)memcpy(newBag->items, oldBag->items, newBag->used * newBag->itemSize);
} return newBag;
}
void
bagDestroyBag(struct bag *theBag)
{ if (theBag != NULL) {
jvmtiDeallocate(theBag->items);
jvmtiDeallocate(theBag);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.