$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r52151 - sandbox/boost_docs/subprojects/DebuggerVisualizers
From: filip.konvicka_at_[hidden]
Date: 2009-04-03 07:17:59
Author: fkonvick
Date: 2009-04-03 07:17:57 EDT (Fri, 03 Apr 2009)
New Revision: 52151
URL: http://svn.boost.org/trac/boost/changeset/52151
Log:
Fixed Boost.MultiIndex for vs 1.35+
Added another shared_ptr visualizer
Added support for DateTime (posix_time::ptime, time_duration)
Updated the demo
Added:
   sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__DateTime.msvc8.vis.txt   (contents, props changed)
   sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.1_34.msvc8.vis.txt
      - copied, changed from r52139, /sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.msvc8.vis.txt
   sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__shared_ptr.msvc8.vis.txt   (contents, props changed)
   sandbox/boost_docs/subprojects/DebuggerVisualizers/date_time_visualizer.hpp   (contents, props changed)
Removed:
   sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.msvc8.vis.txt
Text files modified: 
   sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.1_34.msvc8.vis.txt |     8 ++-                                     
   sandbox/boost_docs/subprojects/DebuggerVisualizers/demo.cpp                     |    12 +++++                                   
   sandbox/boost_docs/subprojects/DebuggerVisualizers/mic_visualizer.hpp           |    83 ++++++++++++++++++++++++++++++++++++++++
   3 files changed, 99 insertions(+), 4 deletions(-)
Added: sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__DateTime.msvc8.vis.txt
==============================================================================
--- (empty file)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__DateTime.msvc8.vis.txt	2009-04-03 07:17:57 EDT (Fri, 03 Apr 2009)
@@ -0,0 +1,36 @@
+;----------------------------------------
+; BOOST_VISUALIZER_START boost::date_time
+;
+; Copyright Filip Konvièka 2009. Use, modification and distribution are subject
+; to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt
+; or copy at http://www.boost.org/LICENSE_1_0.txt)
+;
+; @guid     C7541090-203E-11DE-8C30-0800200C9A66
+; @platform msvc-8, msvc-9
+; @version  1.0
+; @header   date_time_visualizer.hpp
+; @author   Filip Konvièka
+; @email    filip dot konvicka at logis dot cz
+;
+; Usage
+; =====
+;
+; Visualization must be enabled by including the header file date_time_visualizer.hpp in each translation unit.
+; The visualization is not immediate, you must use the green 'Recalculate' icon.
+;
+
+; Posix time
+boost::posix_time::ptime {
+  preview  (#if ($e.is_not_a_date_time()) (#("not_a_date_time")) #else (#("ptime (expand to view)")))
+  children (#if ($e.is_not_a_date_time()) (#("not_a_date_time")) #else ([_print_ptime(*&($e)),s]))
+}
+
+; Posix time_duration
+boost::posix_time::time_duration {
+  preview  (#if ($e.is_special()) (#("special")) #else (#("time_duration (expand to view)")))
+  children (#if ($e.is_special()) (#("special")) #else ([_print_time_duration(*&($e)),s]))
+}
+
+;
+; BOOST_VISUALIZER_END boost::date_time
+;--------------------------------------
Copied: sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.1_34.msvc8.vis.txt (from r52139, /sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.msvc8.vis.txt)
==============================================================================
--- /sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.msvc8.vis.txt	(original)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.1_34.msvc8.vis.txt	2009-04-03 07:17:57 EDT (Fri, 03 Apr 2009)
@@ -1,13 +1,13 @@
 ;----------------------------------------------------
 ; BOOST_VISUALIZER_START boost::multi_index_container
 ;
-; Copyright Filip Konvièka 2007. Use, modification and distribution are subject to
-; the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt
+; Copyright Filip Konvièka 2007 - 2009. Use, modification and distribution are subject
+; to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt
 ; or copy at http://www.boost.org/LICENSE_1_0.txt)
 ;
 ; @guid     CA3A7EDA-43F3-11DC-9D06-4B5856D89593
 ; @platform msvc-8, msvc-9
-; @version  1.0
+; @version  1.1
 ; @header   mic_visualizer.hpp
 ; @author   Filip Konvièka
 ; @email    filip dot konvicka at logis dot cz
@@ -15,6 +15,8 @@
 ; Usage
 ; =====
 ;
+; NOTE: This version is known to work with Boost MultiIndex v. 1.34.1. For newer versions, use the other file.
+;
 ; Visualization must be explicitly enabled in the code for each type.
 ; For each multi_index_container type, you need to call
 ;
Deleted: sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.msvc8.vis.txt
==============================================================================
--- sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.msvc8.vis.txt	2009-04-03 07:17:57 EDT (Fri, 03 Apr 2009)
+++ (empty file)
@@ -1,122 +0,0 @@
-;----------------------------------------------------
-; BOOST_VISUALIZER_START boost::multi_index_container
-;
-; Copyright Filip Konvièka 2007. Use, modification and distribution are subject to
-; the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt
-; or copy at http://www.boost.org/LICENSE_1_0.txt)
-;
-; @guid     CA3A7EDA-43F3-11DC-9D06-4B5856D89593
-; @platform msvc-8, msvc-9
-; @version  1.0
-; @header   mic_visualizer.hpp
-; @author   Filip Konvièka
-; @email    filip dot konvicka at logis dot cz
-;
-; Usage
-; =====
-;
-; Visualization must be explicitly enabled in the code for each type.
-; For each multi_index_container type, you need to call
-;
-;   VISUALIZE_MULTI_INDEX_CONTAINER(TypeName);
-;
-; at global namespace level. The macro is defined in the accompanying header file mic_visualizer.hpp.
-;
-;
-;------------------------------------
-; boost::multi_index_container - base
-;
-; This passes control to the header_holder decoders :-)
-boost::multi_index::multi_index_container<*,*,*>{
-  preview(#($c.node_count, " items (multi_index_container)"))
-  children(
-    #(
-      data:((msvc_helpers::multi_index_helper_2<boost::multi_index::multi_index_container<$T1,$T2,$T3> >*)&$c)->header,
-      original members: [$c,!]
-    )
-  )
-}
-;-----------------------------------------------
-; boost::multi_index_container - sequenced index
-boost::multi_index::detail::header_holder<boost::multi_index::detail::sequenced_index_node<*>,*>{
-  preview(#("sequenced index"))
-  children(
-    #(
-      #list(
-            head : *(((boost::multi_index::detail::sequenced_index_node_impl*)(boost::multi_index::detail::sequenced_index_node_trampoline<$T1>*)($c.member))->next_),
-            size : (($T2*)&$c)->node_count,
-            next : next_
-      ) : ((msvc_helpers::multi_index_helper<boost::multi_index::detail::sequenced_index_node<$T1> >*)(boost::multi_index::detail::sequenced_index_node<$T1>*)(boost::multi_index::detail::sequenced_index_node_trampoline<$T1>*)(&$e))->value
-    )
-  )
-}
-;---------------------------------------------------
-; boost::multi_index_container - random access index
-boost::multi_index::detail::header_holder<boost::multi_index::detail::random_access_index_node<*>,*>{
-  preview(#("random access index"))
-  children(
-    #(
-      #array(
-          expr:  (($T2*)&$c)->ptrs.spc.data_[$i],
-          size:  (($T2*)&$c)->node_count
-      ) : ((msvc_helpers::multi_index_helper<boost::multi_index::detail::random_access_index_node<$T1> >*)(boost::multi_index::detail::random_access_index_node<$T1>*)(boost::multi_index::detail::random_access_index_node_trampoline<$T1>*)&$e)->value
-    )
-  )
-}
-;--------------------------------------------
-; boost::multi_index_container - hashed index
-boost::multi_index::detail::header_holder<boost::multi_index::detail::hashed_index_node<*>,*>{
-  preview(#("hashed index - ", (($T2*)&$c)->node_count, " in ", (($T2*)&$c)->buckets.size_, " buckets"))
-  children(
-    #(
-      #array(
-            expr : (($T2*)&$c)->buckets.spc.data_[$i],
-            size : (($T2*)&$c)->buckets.size_
-      ) : (msvc_helpers::multi_index_helper_3<boost::multi_index::detail::hashed_index_node<$T1> >*)(void*)&$e
-    )
-  )
-}
-msvc_helpers::multi_index_helper_3<boost::multi_index::detail::hashed_index_node<*> >{
-  preview(#if ( ((boost::multi_index::detail::hashed_index_node_impl*)&$c)->next_==((boost::multi_index::detail::hashed_index_node_impl*)&$c) )
-             ; no data at all
-             (#("---"))
-          #else (
-             #if ( ((boost::multi_index::detail::hashed_index_node_impl*)&$c)->next_->next_==((boost::multi_index::detail::hashed_index_node_impl*)&$c) ) (
-               ; 1 item: preview as _value_
-               #( ((msvc_helpers::multi_index_helper<boost::multi_index::detail::hashed_index_node<$T1> >*)(boost::multi_index::detail::hashed_index_node<$T1>*)(boost::multi_index::detail::hashed_index_node_trampoline<$T1>*)(((boost::multi_index::detail::hashed_index_node_impl*)&$c)->next_))->value)
-             ) #else (
-               ; multiple items: preview as [_value_ ...]
-               #("[", ((msvc_helpers::multi_index_helper<boost::multi_index::detail::hashed_index_node<$T1> >*)(boost::multi_index::detail::hashed_index_node<$T1>*)(boost::multi_index::detail::hashed_index_node_trampoline<$T1>*)(((boost::multi_index::detail::hashed_index_node_impl*)&$c)->next_))->value, " ...]")
-             )
-          )
-         )
-  children(
-    #(
-      ; multiple items: view as list
-      #list(
-        head: ((boost::multi_index::detail::hashed_index_node_impl*)&$c)->next_,
-        next: next_,
-        skip: ((boost::multi_index::detail::hashed_index_node_impl*)&$c)
-      ) : ((msvc_helpers::multi_index_helper<boost::multi_index::detail::hashed_index_node<$T1> >*)(boost::multi_index::detail::hashed_index_node<$T1>*)(boost::multi_index::detail::hashed_index_node_trampoline<$T1>*)(&$e))->value
-    )
-  )
-}
-;---------------------------------------------
-; boost::multi_index_container - ordered index
-boost::multi_index::detail::header_holder<boost::multi_index::detail::ordered_index_node<*>,*>{
-  preview(#("ordered index"))
-  children(
-    #(
-      #tree(
-            head : *(boost::multi_index::detail::ordered_index_node_compressed_base*)(boost::multi_index::detail::ordered_index_node_impl*)(void*)(((boost::multi_index::detail::ordered_index_node_trampoline<$T1>*)($c.member))->parentcolor_&~1U),
-            size : (($T2*)&$c)->node_count,
-            left : left_,
-            right : right_,
-            skip : 0
-      ) : ((msvc_helpers::multi_index_helper<boost::multi_index::detail::ordered_index_node<$T1> >*)(boost::multi_index::detail::ordered_index_node<$T1>*)(boost::multi_index::detail::ordered_index_node_trampoline<$T1>*)(&$e))->value
-    )
-  )
-}
-;
-; BOOST_VISUALIZER_END boost::multi_index_container
-;--------------------------------------------------
Added: sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__shared_ptr.msvc8.vis.txt
==============================================================================
--- (empty file)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__shared_ptr.msvc8.vis.txt	2009-04-03 07:17:57 EDT (Fri, 03 Apr 2009)
@@ -0,0 +1,27 @@
+;-----------------------------------------
+; BOOST_VISUALIZER_START boost::shared_ptr
+;
+; Copyright Filip Konvièka 2009. Use, modification and distribution are subject
+; to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt
+; or copy at http://www.boost.org/LICENSE_1_0.txt)
+;
+; @guid     CF808B30-203F-11DE-8C30-0800200C9A66
+; @platform msvc-8, msvc-9
+; @version  1.0
+; @author   Filip Konvièka
+; @email    filip dot konvicka at logis dot cz
+;
+; Usage
+; =====
+;
+; This is a simple visualizer for shared_ptr (only shows the object or "null").
+
+; boost::shared_ptr
+boost::shared_ptr<*> {
+  preview  (#if (!$e.px) (#("null")) #else (#(*$e.px, " (shared_ptr)")))
+  children (#if (!$e.px) (#("null")) #else (*$e.px))
+}
+
+;
+; BOOST_VISUALIZER_END boost::shared_ptr
+;---------------------------------------
Added: sandbox/boost_docs/subprojects/DebuggerVisualizers/date_time_visualizer.hpp
==============================================================================
--- (empty file)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/date_time_visualizer.hpp	2009-04-03 07:17:57 EDT (Fri, 03 Apr 2009)
@@ -0,0 +1,43 @@
+// Copyright Filip Konvièka 2007 - 2009. Use, modification and distribution are subject
+// to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef DATE_TIME_VISUALIZER_HPP
+#define DATE_TIME_VISUALIZER_HPP
+
+#if !defined(_DEBUG)||!defined(_MSC_VER)||(_MSC_VER<1400)
+
+// Nothing
+
+#else
+
+inline char* _print_ptime(boost::posix_time::ptime& pt) {
+  static char str[200];
+  std::string s=boost::posix_time::to_simple_string(pt);
+  strcpy(str+0, s.c_str());
+  return str+0;
+}
+
+inline char* _print_time_duration(boost::posix_time::time_duration& td) {
+  static char str[200];
+  std::string s=boost::posix_time::to_simple_string(td);
+  strcpy(str+0, s.c_str());
+  return str+0;
+}
+
+// ensure that this is called in each translation unit...
+namespace {
+  template<typename T> struct _print_ptime_helper {
+    _print_ptime_helper() {
+      boost::posix_time::ptime pt;
+      _print_ptime(pt);
+      boost::posix_time::time_duration td;
+      _print_time_duration(td);
+    }
+  };
+  typedef _print_ptime_helper<void> _print_ptime_helper_2;
+  _print_ptime_helper_2 _print_ptime_helper_2i;
+}
+
+#endif
+
Modified: sandbox/boost_docs/subprojects/DebuggerVisualizers/demo.cpp
==============================================================================
--- sandbox/boost_docs/subprojects/DebuggerVisualizers/demo.cpp	(original)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/demo.cpp	2009-04-03 07:17:57 EDT (Fri, 03 Apr 2009)
@@ -13,6 +13,8 @@
 using std::wstring;
 using namespace std;
 
+#include <boost/pool/pool_alloc.hpp>
+
 struct test {
   wstring x;
   wstring y;
@@ -24,6 +26,7 @@
     return x==other.x;
   }
 };
+
 namespace boost {
   inline std::size_t hash_value(test const& t)
   {
@@ -31,7 +34,7 @@
   }
 }
 
-typedef multi_index_container<test, indexed_by<hashed_non_unique<identity<test> > > > cont;
+typedef multi_index_container<test, indexed_by<hashed_non_unique<identity<test> >, sequenced<>>/*, boost::fast_pool_allocator<test> */> cont;
 
 VISUALIZE_MULTI_INDEX_CONTAINER(cont);
 
@@ -39,6 +42,13 @@
   cont test_cont;
   test_cont.insert(test(L"aaa"));
   test_cont.insert(test(L"aaa", L"other"));
+  test_cont.insert(test(L"E", L"other"));
   test_cont.insert(test(L"aac"));
+  /*
+  test_cont.push_back(test(L"aaa"));
+  test_cont.push_back(test(L"aaa", L"other"));
+  test_cont.push_back(test(L"E", L"other"));
+  test_cont.push_back(test(L"aac"));
+  */
   return 0; // see screenshoxt
 }
Modified: sandbox/boost_docs/subprojects/DebuggerVisualizers/mic_visualizer.hpp
==============================================================================
--- sandbox/boost_docs/subprojects/DebuggerVisualizers/mic_visualizer.hpp	(original)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/mic_visualizer.hpp	2009-04-03 07:17:57 EDT (Fri, 03 Apr 2009)
@@ -1,3 +1,7 @@
+// Copyright Filip Konvièka 2007 - 2009. Use, modification and distribution are subject
+// to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
 #ifndef MIC_VISUALIZER_HPP
 #define MIC_VISUALIZER_HPP
 
@@ -19,6 +23,83 @@
   };
 }
 
+#include <boost/version.hpp>
+
+#if ( BOOST_VERSION >= 103500 )
+
+#define __VISUALIZE_MIC_INDEX_DEF(Type)                         \
+          boost::multi_index::detail::multi_index_node_type<    \
+            Type::value_type,                                   \
+            Type::index_specifier_type_list,                    \
+            Type::allocator_type>::type
+
+/// Enables MSVC visualizers for multi_index_container Type
+#define VISUALIZE_MULTI_INDEX_CONTAINER(Type)                   \
+namespace msvc_helpers {                                        \
+template<>                                                      \
+struct multi_index_helper_2<Type> {                             \
+  typedef __VISUALIZE_MIC_INDEX_DEF(Type) index_node_type;      \
+  typedef                                                       \
+    boost::base_from_member<                                    \
+      boost::detail::allocator::rebind_to<                      \
+        index_node_type::allocator_type,                        \
+        index_node_type                                         \
+      >::type>                                                  \
+  base_type;                                                    \
+  typedef                                                       \
+    boost::multi_index::detail::header_holder<                  \
+      boost::multi_index::detail::prevent_eti<                  \
+        Type::allocator_type,                                   \
+         boost::detail::allocator::rebind_to<                   \
+          Type::allocator_type,                                 \
+          index_node_type                                       \
+        >::type                                                 \
+      >::type::pointer,                                         \
+      Type>                                                     \
+   /* boost::multi_index::detail::header_holder<             */ \
+   /* index_node_type, Type>                                 */ \
+  header_holder_type;                                           \
+  typedef                                                       \
+    boost::multi_index::detail::multi_index_base_type<          \
+      Type::value_type,                                         \
+      Type::index_specifier_type_list,                          \
+      Type::allocator_type>::type                               \
+  index_type;                                                   \
+  struct index_type_helper : public index_type {};              \
+  /* mimic multi_index_container layout */                      \
+  base_type          base;                                      \
+  header_holder_type header;                                    \
+  index_type_helper  index;                                     \
+  unsigned int       node_count;                                \
+  /* ensure that the debugger sees this template instance */    \
+  static void get() {                                           \
+    multi_index_helper_2<Type> *ensure_inst=0;                  \
+  }                                                             \
+};                                                              \
+template<>                                                      \
+struct multi_index_helper_3<__VISUALIZE_MIC_INDEX_DEF(Type)> {  \
+  /* ensure that the debugger sees this template instance */    \
+  static void get() {                                           \
+    multi_index_helper_3<                                       \
+      __VISUALIZE_MIC_INDEX_DEF(Type)> *ensure_inst=0;          \
+  }                                                             \
+};                                                              \
+template<>                                                      \
+struct multi_index_helper<__VISUALIZE_MIC_INDEX_DEF(Type)> {    \
+  typedef __VISUALIZE_MIC_INDEX_DEF(Type) index_node_type;      \
+  /* mimic index_node_base<Type::value_type> layout */          \
+  Type::value_type value;                                       \
+  /* ensure that the debugger sees this template instance */    \
+  static void get() {                                           \
+    multi_index_helper<index_node_type> *ensure_inst=0;         \
+  }                                                             \
+};                                                              \
+}
+
+#else
+
+// Version for 1.34
+
 #define __VISUALIZE_MIC_INDEX_DEF(Type)                         \
           boost::multi_index::detail::multi_index_node_type<    \
             Type::value_type,                                   \
@@ -82,3 +163,5 @@
 
 #endif
 
+#endif
+