]> granicus.if.org Git - clang/commitdiff
Added partial specialization of GRStatePartialTrait<T> with T = ImmutableSet<...>.
authorTed Kremenek <kremenek@apple.com>
Wed, 3 Dec 2008 20:48:33 +0000 (20:48 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 3 Dec 2008 20:48:33 +0000 (20:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60504 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/PathSensitive/GRStateTrait.h

index cf5ce553ef3053a1cde35b74942442820ba4822a..077b9bcf438413074e5a4885a6d3914af745891a 100644 (file)
@@ -20,6 +20,7 @@
 namespace llvm {
   class BumpPtrAllocator;
   template <typename K, typename D, typename I> class ImmutableMap;
+  template <typename K, typename I> class ImmutableSet;
   template <typename T> class ImmutableList;
   template <typename T> class ImmutableListImpl;
 }
@@ -67,6 +68,44 @@ namespace clang {
     }      
   };
   
+  
+  // Partial-specialization for ImmutableSet.
+  
+  template <typename Key, typename Info>
+  struct GRStatePartialTrait< llvm::ImmutableSet<Key,Info> > {
+    typedef llvm::ImmutableSet<Key,Info>      data_type;
+    typedef typename data_type::Factory&      context_type;  
+    typedef Key                               key_type;
+    
+    static inline data_type MakeData(void* const* p) {
+      return p ? data_type((typename data_type::TreeTy*) *p) : data_type(0);
+    }  
+
+    static inline void* MakeVoidPtr(data_type B) {
+      return B.getRoot();
+    }  
+    
+    static data_type Remove(data_type B, key_type K, context_type F) {
+      return F.Remove(B, K);
+    }
+    
+    static bool Contains(data_type B, key_type K) {
+      return B.contains(K);
+    }
+    
+    static inline context_type MakeContext(void* p) {
+      return *((typename data_type::Factory*) p);
+    }
+    
+    static void* CreateContext(llvm::BumpPtrAllocator& Alloc) {
+      return new typename data_type::Factory(Alloc);      
+    }
+    
+    static void DeleteContext(void* Ctx) {
+      delete (typename data_type::Factory*) Ctx;
+    }      
+  };
+    
   // Partial-specialization for ImmutableList.
   
   template <typename T>