[llvm-commits] [llvm] r84902 - in /llvm/trunk: docs/ProgrammersManual.html include/llvm/ADT/ValueMap.h include/llvm/Support/type_traits.h unittests/ADT/ValueMapTest.cpp

Jeffrey Yasskin jyasskin at google.com
Thu Oct 22 15:11:22 PDT 2009


Author: jyasskin
Date: Thu Oct 22 17:11:22 2009
New Revision: 84902

URL: http://llvm.org/viewvc/llvm-project?rev=84902&view=rev
Log:
Try r84890 again (adding ValueMap<>), now that I've tested the compile on
gcc-4.4.

Added:
    llvm/trunk/include/llvm/ADT/ValueMap.h
      - copied, changed from r84891, llvm/trunk/include/llvm/ADT/ValueMap.h
    llvm/trunk/unittests/ADT/ValueMapTest.cpp
      - copied unchanged from r84891, llvm/trunk/unittests/ADT/ValueMapTest.cpp
Modified:
    llvm/trunk/docs/ProgrammersManual.html
    llvm/trunk/include/llvm/Support/type_traits.h

Modified: llvm/trunk/docs/ProgrammersManual.html
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/ProgrammersManual.html?rev=84902&r1=84901&r2=84902&view=diff

==============================================================================
--- llvm/trunk/docs/ProgrammersManual.html (original)
+++ llvm/trunk/docs/ProgrammersManual.html Thu Oct 22 17:11:22 2009
@@ -83,6 +83,7 @@
       <li><a href="#dss_stringmap">"llvm/ADT/StringMap.h"</a></li>
       <li><a href="#dss_indexedmap">"llvm/ADT/IndexedMap.h"</a></li>
       <li><a href="#dss_densemap">"llvm/ADT/DenseMap.h"</a></li>
+      <li><a href="#dss_valuemap">"llvm/ADT/ValueMap.h"</a></li>
       <li><a href="#dss_map"><map></a></li>
       <li><a href="#dss_othermap">Other Map-Like Container Options</a></li>
     </ul></li>
@@ -1492,6 +1493,23 @@
 
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection">
+  <a name="dss_valuemap">"llvm/ADT/ValueMap.h"</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+ValueMap is a wrapper around a <a href="#dss_densemap">DenseMap</a> mapping
+Value*s (or subclasses) to another type.  When a Value is deleted or RAUW'ed,
+ValueMap will update itself so the new version of the key is mapped to the same
+value, just as if the key were a WeakVH.  You can configure exactly how this
+happens, and what else happens on these two events, by passing
+a <code>Config</code> parameter to the ValueMap template.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
   <a name="dss_map"><map></a>
 </div>
 

Copied: llvm/trunk/include/llvm/ADT/ValueMap.h (from r84891, llvm/trunk/include/llvm/ADT/ValueMap.h)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ValueMap.h?p2=llvm/trunk/include/llvm/ADT/ValueMap.h&p1=llvm/trunk/include/llvm/ADT/ValueMap.h&r1=84891&r2=84902&rev=84902&view=diff

==============================================================================
--- llvm/trunk/include/llvm/ADT/ValueMap.h (original)
+++ llvm/trunk/include/llvm/ADT/ValueMap.h Thu Oct 22 17:11:22 2009
@@ -190,12 +190,12 @@
 class ValueMapCallbackVH : public CallbackVH {
   friend class ValueMap<KeyT, ValueT, Config, ValueInfoT>;
   friend class DenseMapInfo<ValueMapCallbackVH>;
-  typedef ValueMap<KeyT, ValueT, Config, ValueInfoT> ValueMap;
+  typedef ValueMap<KeyT, ValueT, Config, ValueInfoT> ValueMapT;
   typedef typename llvm::remove_pointer<KeyT>::type KeySansPointerT;
 
-  ValueMap *Map;
+  ValueMapT *Map;
 
-  ValueMapCallbackVH(KeyT Key, ValueMap *Map)
+  ValueMapCallbackVH(KeyT Key, ValueMapT *Map)
       : CallbackVH(const_cast<Value*>(static_cast<const Value*>(Key))),
         Map(Map) {}
 
@@ -226,7 +226,7 @@
     // Can destroy *this:
     Config::onRAUW(Copy.Map->Data, Copy.Unwrap(), typed_new_key);
     if (Config::FollowRAUW) {
-      typename ValueMap::MapT::iterator I = Copy.Map->Map.find(Copy);
+      typename ValueMapT::MapT::iterator I = Copy.Map->Map.find(Copy);
       // I could == Copy.Map->Map.end() if the onRAUW callback already
       // removed the old mapping.
       if (I != Copy.Map->Map.end()) {

Modified: llvm/trunk/include/llvm/Support/type_traits.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/type_traits.h?rev=84902&r1=84901&r2=84902&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Support/type_traits.h (original)
+++ llvm/trunk/include/llvm/Support/type_traits.h Thu Oct 22 17:11:22 2009
@@ -87,6 +87,15 @@
       sizeof(char) == sizeof(dont_use::base_of_helper<Base>((Derived*)0));
 };
 
+// remove_pointer - Metafunction to turn Foo* into Foo.  Defined in
+// C++0x [meta.trans.ptr].
+template <typename T> struct remove_pointer { typedef T type; };
+template <typename T> struct remove_pointer<T*> { typedef T type; };
+template <typename T> struct remove_pointer<T*const> { typedef T type; };
+template <typename T> struct remove_pointer<T*volatile> { typedef T type; };
+template <typename T> struct remove_pointer<T*const volatile> {
+    typedef T type; };
+
 }
 
 #endif





More information about the llvm-commits mailing list