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 23 struct PointerSet; /* private */ 24 25 /* 26 * Allocate a new PointerSet. 27 * 28 * Returns NULL on failure. 29 */ 30 PointerSet* dvmPointerSetAlloc(int initialSize); 31 32 /* 33 * Free up a PointerSet. 34 */ 35 void dvmPointerSetFree(PointerSet* pSet); 36 37 /* 38 * Clear the contents of a pointer set. 39 */ 40 void dvmPointerSetClear(PointerSet* pSet); 41 42 /* 43 * Get the number of pointers currently stored in the list. 44 */ 45 int dvmPointerSetGetCount(const PointerSet* pSet); 46 47 /* 48 * Get the Nth entry from the list. 49 */ 50 const 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 */ 58 bool dvmPointerSetAddEntry(PointerSet* pSet, const void* ptr); 59 60 /* 61 * Returns "true" if the element was successfully removed. 62 */ 63 bool 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 */ 70 bool 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 */ 75 INLINE 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 */ 87 void dvmPointerSetIntersect(PointerSet* pSet, const void** ptrArray, int count); 88 89 /* 90 * Print the list contents to stdout. For debugging. 91 */ 92 void dvmPointerSetDump(const PointerSet* pSet); 93 94 #endif // DALVIK_POINTERSET_H_ 95