Home | History | Annotate | Download | only in vm
      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