/* * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
/* 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.