INNER CODE UNIT · Python

is_direct

SpartanJ/eepp · projects/scripts/debug/eepp_gdb.py:13

    def is_direct(self):
        # bit 0 of the first byte is the discriminator
        return (int(self.m_data[0]) & 1) != 0

    def to_string(self):
        if self.is_direct():
            size = int(self.m_data[0]) >> 1
            return f"EE::SmallVector<{self.type_t}> [Direct] (size={size})"
        else:
            # For indirect, we have to fetch the pointer from m_data
            void_ptr = self.m_data.address.cast(
                gdb.lookup_type("void").pointer().pointer()
            ).dereference()
            storage_ptr = void_ptr.cast(
                gdb.lookup_type(f"ankerl::v1_0_3::detail::storage<{self.type_t}>").pointer()
            )
            size = int(storage_ptr["m_size"])
            cap = int(storage_ptr["m_capacity"])

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…