Boost logo

Boost-Commit :

From: filip.konvicka_at_[hidden]
Date: 2008-02-14 06:50:56


Author: fkonvick
Date: 2008-02-14 06:50:55 EST (Thu, 14 Feb 2008)
New Revision: 43244
URL: http://svn.boost.org/trac/boost/changeset/43244

Log:
Added ptr_container from Vault, added IP
Added:
   sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__IP.msvc8.vis.txt (contents, props changed)
   sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.msvc8.vis.txt (contents, props changed)
   sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__ptr_container.msvc8.vis.txt (contents, props changed)
   sandbox/boost_docs/subprojects/DebuggerVisualizers/demo.cpp (contents, props changed)
   sandbox/boost_docs/subprojects/DebuggerVisualizers/mic_visualizer.hpp (contents, props changed)

Added: sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__IP.msvc8.vis.txt
==============================================================================
--- (empty file)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__IP.msvc8.vis.txt 2008-02-14 06:50:55 EST (Thu, 14 Feb 2008)
@@ -0,0 +1,35 @@
+;-------------------------------------------
+; BOOST_VISUALIZER_START boost::interprocess
+;
+; Copyright Filip Konvièka 2008. 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 bed732a0-daf1-11dc-95ff-0800200c9a66
+; @platform msvc-8, msvc-9
+; @version 1.0
+; @author Filip Konvièka
+; @email filip dot konvicka at logis dot cz
+;
+; Usage
+; =====
+;
+; Just append this to autoexp.dat.
+; Currently this just handles offset_ptr.
+;
+;
+;------------------------------------
+; boost::interprocess::offset_ptr
+boost::interprocess::offset_ptr<*> {
+preview( #if($e.m_offset==1) (#("null")) #else (#("non-null")) )
+children(
+ #(
+ #array(
+ expr: (($T1*)(((char*)(void*)&$c)+$c.m_offset)),
+ size: #if($c.m_offset==1) (0) #else (1)
+ ) : $e
+ )
+)
+;
+; BOOST_VISUALIZER_START boost::interprocess
+;-------------------------------------------

Added: sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.msvc8.vis.txt
==============================================================================
--- (empty file)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__MI.msvc8.vis.txt 2008-02-14 06:50:55 EST (Thu, 14 Feb 2008)
@@ -0,0 +1,122 @@
+;----------------------------------------------------
+; 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__ptr_container.msvc8.vis.txt
==============================================================================
--- (empty file)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/boost__ptr_container.msvc8.vis.txt 2008-02-14 06:50:55 EST (Thu, 14 Feb 2008)
@@ -0,0 +1,410 @@
+;-------------------------------------------------------------
+; BOOST_VISUALIZER_START boost::ptr_container and boost::array
+;
+; Copyright William Buklis 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 CDC4F187-4AE8-40f2-A1CA-4F5913BC2778
+; @platform msvc-8
+; @version 1.0
+; @author Bill Buklis
+; @email bill at pbjzone dot com
+;
+; Usage
+; =====
+;
+; All of the following text must be placed in the autoexp.dat file.
+; Usage is automatic. No extra code is required.
+;
+; The following containers are supported with these visualizers:
+; array
+; ptr_array
+; ptr_deque
+; ptr_list
+; ptr_map
+; ptr_multimap
+; ptr_set
+; ptr_multiset
+; ptr_vector
+;
+; All of these visualizers attempt to emulate their corresponding STL containers using
+; a pointer type. i.e. ptr_vector<T> displays equivalently to vector<T*>.
+;
+
+
+;------------------------------------------------------------------------------
+; boost::array
+;------------------------------------------------------------------------------
+
+boost::array<*,*>{
+ preview( $c.elems )
+ children
+ (
+ #array
+ (
+ expr: $c.elems[$i],
+ size : $T2
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_array
+;------------------------------------------------------------------------------
+
+boost::ptr_array<*,*>{
+ preview( ($T1**)$c.c_.elems )
+ children
+ (
+ #array
+ (
+ expr: ($T1*)$c.c_.elems[$i],
+ size : $T2
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_vector
+;------------------------------------------------------------------------------
+boost::ptr_vector<*,*>{
+ children
+ (
+ #array
+ (
+ expr: (($T1**)($c.c_._Myfirst))[$i],
+ size : $c.c_._Mylast-$c.c_._Myfirst
+ )
+ )
+
+ preview
+ (
+ #(
+ "[",
+ $e.c_._Mylast - $e.c_._Myfirst ,
+ "](",
+
+ #array
+ (
+ expr : (($T1**)($c.c_._Myfirst))[$i],
+ size : $c.c_._Mylast-$c.c_._Myfirst
+ ),
+ ")"
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_map
+;------------------------------------------------------------------------------
+
+boost::ptr_map<*,*,*>{
+ preview
+ (
+ #(
+ "[",
+ $e.c_._Mysize,
+ "](",
+
+ #tree
+ (
+ head : $c.c_._Myhead->_Parent,
+ skip : $c.c_._Myhead,
+ size : $c.c_._Mysize,
+ left : _Left,
+ right : _Right
+ ) : *(std::pair<$T1,$T2 *> *)&($e._Myval),
+
+ ")"
+ )
+ )
+ children
+ (
+ #tree
+ (
+ head : $c.c_._Myhead->_Parent,
+ skip : $c.c_._Myhead,
+ size : $c.c_._Mysize,
+ left : _Left,
+ right : _Right
+ ) : *(std::pair<$T1,$T2 *> *)&($e._Myval)
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_multimap
+;------------------------------------------------------------------------------
+
+boost::ptr_multimap<*,*,*>{
+ preview
+ (
+ #(
+ "[",
+ $e.c_._Mysize,
+ "](",
+
+ #tree
+ (
+ head : $c.c_._Myhead->_Parent,
+ skip : $c.c_._Myhead,
+ size : $c.c_._Mysize,
+ left : _Left,
+ right : _Right
+ ) : *(std::pair<$T1,$T2 *> *)&($e._Myval),
+
+ ")"
+ )
+ )
+ children
+ (
+ #tree
+ (
+ head : $c.c_._Myhead->_Parent,
+ skip : $c.c_._Myhead,
+ size : $c.c_._Mysize,
+ left : _Left,
+ right : _Right
+ ) : *(std::pair<$T1,$T2 *> *)&($e._Myval)
+ )
+}
+
+boost::ptr_map_iterator<*,*,*>{
+ preview
+ (
+ #( "(", $c.iter_._Ptr->_Myval.first, ",", ($T3*) $c.iter_._Ptr->_Myval.second, ")"
+ )
+ )
+ children
+ (
+ #(
+ first: $c.iter_._Ptr->_Myval.first,
+ second: ($T3*) $c.iter_._Ptr->_Myval.second,
+ _ptr: $c.iter_
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_set
+;------------------------------------------------------------------------------
+
+boost::ptr_set<*,*,*>{
+ preview
+ (
+ #(
+ "[",
+ $e.c_._Mysize ,
+ "](",
+
+ #tree
+ (
+ head : $c.c_._Myhead->_Parent,
+ skip : $c.c_._Myhead,
+ left : _Left,
+ right : _Right,
+ size : $c.c_._Mysize
+ ) : ($T1*)$e._Myval,
+
+ ")"
+ )
+ )
+
+ children
+ (
+ #tree
+ (
+ head : $c.c_._Myhead->_Parent,
+ skip : $c.c_._Myhead,
+ left : _Left,
+ right : _Right,
+ size : $c.c_._Mysize
+ ) : ($T1*)$e._Myval
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_multiset
+;------------------------------------------------------------------------------
+
+boost::ptr_multiset<*,*,*>{
+ preview
+ (
+ #(
+ "[",
+ $e.c_._Mysize ,
+ "](",
+
+ #tree
+ (
+ head : $c.c_._Myhead->_Parent,
+ skip : $c.c_._Myhead,
+ left : _Left,
+ right : _Right,
+ size : $c.c_._Mysize
+ ) : ($T1*)$e._Myval,
+
+ ")"
+ )
+ )
+
+ children
+ (
+ #tree
+ (
+ head : $c.c_._Myhead->_Parent,
+ skip : $c.c_._Myhead,
+ left : _Left,
+ right : _Right,
+ size : $c.c_._Mysize
+ ) : ($T1*)$e._Myval
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_list
+;------------------------------------------------------------------------------
+
+boost::ptr_list<*,*>{
+
+ children
+ (
+ #list
+ (
+ head : ($c.c_._Myhead->_Next),
+ size : $c.c_._Mysize,
+ next : _Next
+ ) : ($T1*)$e._Myval
+ )
+
+ preview
+ (
+ #(
+ "[",
+ $e._Mysize,
+ "](",
+
+ #list
+ (
+ head : $c.c_._Myhead->_Next,
+ size : $c.c_._Mysize,
+ next : _Next
+ ) : ($T1*)$e._Myval,
+
+ ")"
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_deque
+;------------------------------------------------------------------------------
+
+boost::ptr_deque<*,*>{
+ children
+ (
+ #array
+ (
+ expr : ($T1*)($c.c_._Map[ (($i + $c.c_._Myoff) / $c.c_._EEN_DS) % $c.c_._Mapsize][($i + $c.c_._Myoff) % $c.c_._EEN_DS]),
+ size : $c.c_._Mysize
+ )
+ )
+
+ preview
+ (
+ #(
+ "[",
+ $e.c_._Mysize,
+ "](",
+
+ #array
+ (
+ expr : ($T1*)($c.c_._Map[ (($i + $c.c_._Myoff) / $c.c_._EEN_DS) % $c.c_._Mapsize][($i + $c.c_._Myoff) % $c.c_._EEN_DS]),
+ size : $c.c_._Mysize
+ ),
+
+ ")"
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_vector::iterator (specialization of void_ptr_iterator)
+;------------------------------------------------------------------------------
+boost::void_ptr_iterator<std::_Vector_iterator<*>,*>|boost::void_ptr_iterator<std::_Vector_const_iterator<*>,*>{
+ preview
+ (
+ #(
+ ($T2*)(*$c.iter_._Myptr)
+ )
+ )
+ children
+ (
+ #(
+ ptr: ($T2*)(*$c.iter_._Myptr)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_deque::iterator (specialization of void_ptr_iterator)
+;------------------------------------------------------------------------------
+boost::void_ptr_iterator<std::_Deque_iterator<*,*,*>,*>|boost::void_ptr_iterator<std::_Deque_const_iterator<*,*,*>,*>{
+ preview
+ (
+ #if( $e.iter_._Myoff >= ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_Myoff + ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_Mysize)
+ (
+ #("<end>")
+ )
+ #else(
+ #(
+ "deque[",
+ $e.iter_._Myoff - ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_Myoff,
+ "] = ",
+ ($T4*)((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_Map[ (($c.iter_._Myoff) / ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_EEN_DS) % ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_Mapsize][$c.iter_._Myoff % ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_EEN_DS]
+ )
+ )
+ )
+ children
+ (
+ #if( ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_Myoff + ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_Mysize > $e.iter_._Myoff)
+ (
+ #(
+ ptr: ($T4*)((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_Map[ ($c.iter_._Myoff / ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_EEN_DS) % ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_Mapsize][$c.iter_._Myoff % ((std::deque<$T1,$T2 > *)$c.iter_._Mycont)->_EEN_DS]
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::ptr_array::iterator (specialization of void_ptr_iterator)
+;------------------------------------------------------------------------------
+boost::void_ptr_iterator<void**,*>{
+ preview
+ (
+ #( ($T3**) $e.iter_ )
+ )
+
+ children
+ (
+ #( ptr: *($T3**) $e.iter_ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; boost::void_ptr_iterator - used by ptr_set, ptr_multiset, ptr_list
+;------------------------------------------------------------------------------
+boost::void_ptr_iterator<*,*>{
+ preview
+ (
+ #( ($T2*) $e.iter_._Ptr->_Myval)
+ )
+
+ children
+ (
+ #(ptr: ($T2*) $e.iter_._Ptr->_Myval)
+ )
+}
+
+; BOOST_VISUALIZER_END boost::ptr_container and boost::array
+;-----------------------------------------------------------

Added: sandbox/boost_docs/subprojects/DebuggerVisualizers/demo.cpp
==============================================================================
--- (empty file)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/demo.cpp 2008-02-14 06:50:55 EST (Thu, 14 Feb 2008)
@@ -0,0 +1,44 @@
+#define BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE 5
+#define BOOST_MULTI_INDEX_LIMIT_TAG_SIZE 3
+#define BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE 5
+#include "mic_visualizer.hpp"
+
+#include <string>
+#include <boost/multi_index_container.hpp>
+#include <boost/multi_index/sequenced_index.hpp>
+#include <boost/multi_index/hashed_index.hpp>
+#include <boost/multi_index/ordered_index.hpp>
+#include <boost/multi_index/random_access_index.hpp>
+using namespace boost::multi_index;
+using std::wstring;
+using namespace std;
+
+struct test {
+ wstring x;
+ wstring y;
+ test(wchar_t const *str, wchar_t const *str2=L"def") : x(str), y(str2) {}
+ bool operator<(test const& other) const {
+ return x<other.x;
+ }
+ bool operator==(test const& other) const {
+ return x==other.x;
+ }
+};
+namespace boost {
+ inline std::size_t hash_value(test const& t)
+ {
+ return hash_value(t.x);
+ }
+}
+
+typedef multi_index_container<test, indexed_by<hashed_non_unique<identity<test> > > > cont;
+
+VISUALIZE_MULTI_INDEX_CONTAINER(cont);
+
+int wmain() {
+ cont test_cont;
+ test_cont.insert(test(L"aaa"));
+ test_cont.insert(test(L"aaa", L"other"));
+ test_cont.insert(test(L"aac"));
+ return 0; // see screenshoxt
+}

Added: sandbox/boost_docs/subprojects/DebuggerVisualizers/mic_visualizer.hpp
==============================================================================
--- (empty file)
+++ sandbox/boost_docs/subprojects/DebuggerVisualizers/mic_visualizer.hpp 2008-02-14 06:50:55 EST (Thu, 14 Feb 2008)
@@ -0,0 +1,84 @@
+#ifndef MIC_VISUALIZER_HPP
+#define MIC_VISUALIZER_HPP
+
+#if !defined(_DEBUG)||!defined(_MSC_VER)||(_MSC_VER<1400)
+
+#define VISUALIZE_MULTI_INDEX_CONTAINER(Type) /* empty def */
+
+#else
+
+namespace msvc_helpers {
+ template<typename T>
+ struct multi_index_helper {
+ };
+ template<typename T>
+ struct multi_index_helper_2 {
+ };
+ template<typename T>
+ struct multi_index_helper_3 {
+ };
+}
+
+#define __VISUALIZE_MIC_INDEX_DEF(Type) \
+ boost::multi_index::detail::multi_index_node_type< \
+ Type::value_type, \
+ Type::index_specifier_type_list, \
+ std::allocator<Type::value_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< \
+ std::allocator<Type::value_type>, \
+ index_node_type \
+ >::type> \
+ base_type; \
+ typedef \
+ 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, \
+ std::allocator<Type::value_type> >::type \
+ index_type; \
+ /* mimic multi_index_container layout */ \
+ base_type base; \
+ header_holder_type header; \
+ index_type 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; \
+ } \
+}; \
+}
+
+#endif
+
+#endif
+


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk