Hello, here's the missing gdb macro code for the std::deque
# ----------------------------------------------------------------- # std::deque # # A deque<T> allocates memory in pages of min(512, sizeof(T)) bytes. # **deque._M_impl_M_map has the "value_type" of the deque # calculate deque size and store in $size; # calculate size of data element $datasize and number of nodes per memory page $bufsize define deque_size set $vec = ($arg0) # size of one data element set $datasize = sizeof(**$vec._M_impl._M_map) # bufsize is the number of nodes per memory page set $bufsize = $datasize < 512 ? 512/$datasize : 1 set $x = $vec->_M_impl->_M_finish set $y = $vec->_M_impl->_M_start set $size = $bufsize * ($x._M_node - $y._M_node - 1) + ($x._M_cur - $x._M_first) + ($y._M_last - $y._M_cur) end define p_deque_size deque_size ($arg0) printf "Deque size: %d\n", $size end document p_deque_size p_deque_size <variable> -- Print size of deque end define p_deque set $vec = ($arg0) whatis $vec p_deque_size $vec set $iter = $vec._M_impl._M_start set $enditer = $vec._M_impl._M_finish set $i=0 set $mnode = $iter._M_node set $mfirst = $iter._M_first set $mlast = $iter._M_last set $mcur = $iter._M_cur while ($mcur != $enditer._M_cur) printf "Deque element %d: ", $i p *$mcur # now imitate iter.operator++ set $mcur++ if ($mcur == $mlast) set $mnode++ set $mfirst = *$mnode set $mlast = $mfirst + $bufsize set $mcur = $mfirst end set $i++ end end document p_deque p_deque <variable> -- Prints whole deque end define p_deque_node set $vec = ($arg0) deque_size $vec set $iter = $vec._M_impl._M_start set $enditer = $vec._M_impl._M_finish set $i=0 set $mnode = $iter._M_node set $mfirst = $iter._M_first set $mlast = $iter._M_last set $mcur = $iter._M_cur # print deque[ n ] set $n = $arg1 if ($n >= 0 && $n < $size) if ($n < $bufsize) set $mcur += $n else set $node_offset = $n / $bufsize set $mnode += $node_offset set $mfirst = *$mnode set $mlast = $mfirst + $bufsize set $mcur = $mfirst + ($n - $node_offset*$bufsize) end p *$mcur else printf "index out of range 0...%d \n", $size-1 end end document p_deque_node p_deque_node <variable> <value> -- Prints the node with index #value end define p_deque_front set $vec = ($arg0) #p_deque_node $vec 0 p *$vec._M_impl._M_start._M_cur end document p_deque_front p_deque_front <variable> -- Prints the front node end define p_deque_back set $vec = ($arg0) deque_size $vec # we imitate: deque.end()-- set $iter = $vec._M_impl._M_finish set $mnode = $iter._M_node set $mfirst = $iter._M_first set $mlast = $iter._M_last set $mcur = $iter._M_cur if ($mcur == $mfirst) set $mnode-- set $mfirst = *$mnode set $mlast = $mfirst + $bufsize set $mcur = $mlast end set $mcur-- p *$mcur end document p_deque_back p_deque_back <variable> -- Prints the back node end _______________________________________________ help-gplusplus mailing list help-gplusplus@gnu.org http://lists.gnu.org/mailman/listinfo/help-gplusplus