Add manualRetain() and manualRelease() to ImmutableMapRef, and add a new constructor.
authorTed Kremenek <kremenek@apple.com>
Fri, 7 Dec 2012 02:03:00 +0000 (02:03 +0000)
committerTed Kremenek <kremenek@apple.com>
Fri, 7 Dec 2012 02:03:00 +0000 (02:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169572 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/ImmutableMap.h

index 4883c5ba0a6b0e2e56fcd3eb0601914127826aaf..ce27d0536a5ac03c46b3af04ac283d1b17fcb54e 100644 (file)
@@ -288,6 +288,13 @@ public:
       Factory(F) {
     if (Root) { Root->retain(); }
   }
+
+  explicit ImmutableMapRef(const ImmutableMap<KeyT, ValT> &X,
+                           typename ImmutableMap<KeyT, ValT>::Factory &F)
+    : Root(X.getRootWithoutRetain()),
+      Factory(F.getTreeFactory()) {
+    if (Root) { Root->retain(); }
+  }
   
   ImmutableMapRef(const ImmutableMapRef &X)
     : Root(X.Root),
@@ -318,6 +325,14 @@ public:
     return ImmutableMapRef(0, F);
   }
 
+  void manualRetain() {
+    if (Root) Root->retain();
+  }
+
+  void manualRelease() {
+    if (Root) Root->release();
+  }
+
   ImmutableMapRef add(key_type_ref K, data_type_ref D) {
     TreeTy *NewT = Factory->add(Root, std::pair<key_type, data_type>(K, D));
     return ImmutableMapRef(NewT, Factory);