mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-31 15:31:11 +08:00
printers.py (StdVectorPrinter): Added stuff to handle pretty-printing of std::vector<bool>.
2010-08-16 Chris Moller <cmoller@redhat.com> http://sourceware.org/bugzilla/show_bug.cgi?id=11874 * python/libstdcxx/v6/printers.py (StdVectorPrinter): Added stuff to handle pretty-printing of std::vector<bool>. From-SVN: r163282
This commit is contained in:
parent
c29e2982e4
commit
7bf7b578b7
@ -1,3 +1,9 @@
|
||||
2010-08-16 Chris Moller <cmoller@redhat.com>
|
||||
|
||||
http://sourceware.org/bugzilla/show_bug.cgi?id=11874
|
||||
* python/libstdcxx/v6/printers.py (StdVectorPrinter): Added stuff
|
||||
to handle pretty-printing of std::vector<bool>.
|
||||
|
||||
2010-08-14 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||
|
||||
PR libstdc++/45283
|
||||
|
@ -153,37 +153,71 @@ class StdVectorPrinter:
|
||||
"Print a std::vector"
|
||||
|
||||
class _iterator:
|
||||
def __init__ (self, start, finish):
|
||||
self.item = start
|
||||
self.finish = finish
|
||||
def __init__ (self, start, finish, bitvec):
|
||||
self.bitvec = bitvec
|
||||
if bitvec:
|
||||
self.item = start['_M_p']
|
||||
self.so = start['_M_offset']
|
||||
self.finish = finish['_M_p']
|
||||
self.fo = finish['_M_offset']
|
||||
itype = self.item.dereference().type
|
||||
self.isize = 8 * itype.sizeof
|
||||
else:
|
||||
self.item = start
|
||||
self.finish = finish
|
||||
self.count = 0
|
||||
|
||||
def __iter__(self):
|
||||
return self
|
||||
|
||||
def next(self):
|
||||
if self.item == self.finish:
|
||||
raise StopIteration
|
||||
count = self.count
|
||||
self.count = self.count + 1
|
||||
elt = self.item.dereference()
|
||||
self.item = self.item + 1
|
||||
return ('[%d]' % count, elt)
|
||||
if self.bitvec:
|
||||
if self.item == self.finish and self.so >= self.fo:
|
||||
raise StopIteration
|
||||
elt = self.item.dereference()
|
||||
obit = 1 if elt & (1 << self.so) else 0
|
||||
self.so = self.so + 1
|
||||
if self.so >= self.isize:
|
||||
self.item = self.item + 1
|
||||
self.so = 0
|
||||
return ('[%d]' % count, obit)
|
||||
else:
|
||||
if self.item == self.finish:
|
||||
raise StopIteration
|
||||
elt = self.item.dereference()
|
||||
self.item = self.item + 1
|
||||
return ('[%d]' % count, elt)
|
||||
|
||||
def __init__(self, typename, val):
|
||||
self.typename = typename
|
||||
self.val = val
|
||||
self.is_bool = val.type.template_argument(0).code == gdb.TYPE_CODE_BOOL
|
||||
|
||||
def children(self):
|
||||
return self._iterator(self.val['_M_impl']['_M_start'],
|
||||
self.val['_M_impl']['_M_finish'])
|
||||
self.val['_M_impl']['_M_finish'],
|
||||
self.is_bool)
|
||||
|
||||
def to_string(self):
|
||||
start = self.val['_M_impl']['_M_start']
|
||||
finish = self.val['_M_impl']['_M_finish']
|
||||
end = self.val['_M_impl']['_M_end_of_storage']
|
||||
return ('%s of length %d, capacity %d'
|
||||
% (self.typename, int (finish - start), int (end - start)))
|
||||
if self.is_bool:
|
||||
start = self.val['_M_impl']['_M_start']['_M_p']
|
||||
so = self.val['_M_impl']['_M_start']['_M_offset']
|
||||
finish = self.val['_M_impl']['_M_finish']['_M_p']
|
||||
fo = self.val['_M_impl']['_M_finish']['_M_offset']
|
||||
itype = start.dereference().type
|
||||
bl = 8 * itype.sizeof
|
||||
length = (bl - so) + bl * ((finish - start) - 1) + fo
|
||||
capacity = bl * (end - start)
|
||||
return ('%s<bool> of length %d, capacity %d'
|
||||
% (self.typename, int (length), int (capacity)))
|
||||
else:
|
||||
return ('%s of length %d, capacity %d'
|
||||
% (self.typename, int (finish - start), int (end - start)))
|
||||
|
||||
def display_hint(self):
|
||||
return 'array'
|
||||
|
Loading…
x
Reference in New Issue
Block a user