Added "getRoot()" to ImmutableMap.
authorTed Kremenek <kremenek@apple.com>
Tue, 8 Jan 2008 21:05:59 +0000 (21:05 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 8 Jan 2008 21:05:59 +0000 (21:05 +0000)
Made the ctor for ImmutableMap to construct a map from an AVL tree public.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45756 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/ImmutableMap.h

index ac4f1651b3ef2169fe6a517fb1e6dc9bf6aab0eb..24aef7ccfdc1ad384dcdff6d2c8ed5f096936eaf 100644 (file)
@@ -52,20 +52,24 @@ struct ImutKeyValueInfo {
 template <typename KeyT, typename ValT, 
           typename ValInfo = ImutKeyValueInfo<KeyT,ValT> >
 class ImmutableMap {
+public:
   typedef typename ValInfo::value_type      value_type;
   typedef typename ValInfo::value_type_ref  value_type_ref;
   typedef typename ValInfo::key_type        key_type;
   typedef typename ValInfo::key_type_ref    key_type_ref;
   typedef typename ValInfo::data_type       data_type;
   typedef typename ValInfo::data_type_ref   data_type_ref;
+  typedef ImutAVLTree<ValInfo>              TreeTy;
   
-private:  
-  typedef ImutAVLTree<ValInfo> TreeTy;
+private:
   TreeTy* Root;
-  
-  ImmutableMap(TreeTy* R) : Root(R) {}
-  
+    
 public:
+  /// Constructs a map from a pointer to a tree root.  In general one
+  /// should use a Factory object to create maps instead of directly
+  /// invoking the constructor, but there are cases where make this
+  /// constructor public is useful.
+  explicit ImmutableMap(TreeTy* R) : Root(R) {}
   
   class Factory {
     typename TreeTy::Factory F;
@@ -112,6 +116,8 @@ public:
     return Root && RHS.Root ? Root->isNotEqual(*RHS.Root) : Root != RHS.Root;
   }
   
+  TreeTy* getRoot() const { return Root; }
+  
   bool isEmpty() const { return !Root; }
 
   //===--------------------------------------------------===//