1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16/* 17 * Maintain an expanding set of unique pointer values. The set is 18 * kept in sorted order. 19 */ 20#ifndef DALVIK_POINTERSET_H_ 21#define DALVIK_POINTERSET_H_ 22 23struct PointerSet; /* private */ 24 25/* 26 * Allocate a new PointerSet. 27 * 28 * Returns NULL on failure. 29 */ 30PointerSet* dvmPointerSetAlloc(int initialSize); 31 32/* 33 * Free up a PointerSet. 34 */ 35void dvmPointerSetFree(PointerSet* pSet); 36 37/* 38 * Clear the contents of a pointer set. 39 */ 40void dvmPointerSetClear(PointerSet* pSet); 41 42/* 43 * Get the number of pointers currently stored in the list. 44 */ 45int dvmPointerSetGetCount(const PointerSet* pSet); 46 47/* 48 * Get the Nth entry from the list. 49 */ 50const void* dvmPointerSetGetEntry(const PointerSet* pSet, int i); 51 52/* 53 * Insert a new entry into the list. If it already exists, this returns 54 * without doing anything. 55 * 56 * Returns "true" if the pointer was added. 57 */ 58bool dvmPointerSetAddEntry(PointerSet* pSet, const void* ptr); 59 60/* 61 * Returns "true" if the element was successfully removed. 62 */ 63bool dvmPointerSetRemoveEntry(PointerSet* pSet, const void* ptr); 64 65/* 66 * Returns "true" if the value appears, "false" otherwise. If "pIndex" is 67 * non-NULL, it will receive the matching index or the index of a nearby 68 * element. 69 */ 70bool dvmPointerSetHas(const PointerSet* pSet, const void* ptr, int* pIndex); 71 72/* 73 * Find an entry in the set. Returns the index, or -1 if not found. 74 */ 75INLINE int dvmPointerSetFind(const PointerSet* pSet, const void* ptr) { 76 int idx; 77 if (!dvmPointerSetHas(pSet, ptr, &idx)) 78 idx = -1; 79 return idx; 80} 81 82/* 83 * Compute the intersection of the set and the array of pointers passed in. 84 * 85 * Any pointer in "pSet" that does not appear in "ptrArray" is removed. 86 */ 87void dvmPointerSetIntersect(PointerSet* pSet, const void** ptrArray, int count); 88 89/* 90 * Print the list contents to stdout. For debugging. 91 */ 92void dvmPointerSetDump(const PointerSet* pSet); 93 94#endif // DALVIK_POINTERSET_H_ 95