class StdVecDequeSyntheticProvider:
"""Pretty-printer for alloc::collections::vec_deque::VecDeque<T>
- struct VecDeque<T> { tail: usize, head: usize, buf: RawVec<T> }
+ struct VecDeque<T> { head: usize, len: usize, buf: RawVec<T> }
"""
def __init__(self, valobj, dict):
def get_child_index(self, name):
# type: (str) -> int
index = name.lstrip('[').rstrip(']')
- if index.isdigit() and self.tail <= index and (self.tail + index) % self.cap < self.head:
+ if index.isdigit() and int(index) < self.size:
return int(index)
else:
return -1
def get_child_at_index(self, index):
# type: (int) -> SBValue
start = self.data_ptr.GetValueAsUnsigned()
- address = start + ((index + self.tail) % self.cap) * self.element_type_size
+ address = start + ((index + self.head) % self.cap) * self.element_type_size
element = self.data_ptr.CreateValueFromAddress("[%s]" % index, address, self.element_type)
return element
def update(self):
# type: () -> None
self.head = self.valobj.GetChildMemberWithName("head").GetValueAsUnsigned()
- self.tail = self.valobj.GetChildMemberWithName("tail").GetValueAsUnsigned()
+ self.size = self.valobj.GetChildMemberWithName("len").GetValueAsUnsigned()
self.buf = self.valobj.GetChildMemberWithName("buf")
self.cap = self.buf.GetChildMemberWithName("cap").GetValueAsUnsigned()
- if self.head >= self.tail:
- self.size = self.head - self.tail
- else:
- self.size = self.cap + self.head - self.tail
self.data_ptr = unwrap_unique_or_non_null(self.buf.GetChildMemberWithName("ptr"))