# RUN: mkdir -p %t
# RUN: %python %S/../../../../examples/python/formatter_bytecode.py --compile %s --format c --type-name RigidArray --output %t/c-output.txt
# RUN: %python %S/../../../../examples/python/formatter_bytecode.py --compile %s --format swift --type-name RigidArray --output %t/swift-output.txt
# RUN: diff -u --strip-trailing-cr %S/Inputs/FormatterBytecode/RigidArrayLLDBFormatterC.txt %t/c-output.txt
# RUN: diff -u --strip-trailing-cr %S/Inputs/FormatterBytecode/RigidArrayLLDBFormatterSwift.txt %t/swift-output.txt
import lldb


class RigidArraySynthetic:
    valobj: lldb.SBValue
    storage: lldb.SBValue
    count: int

    def __init__(self, valobj: lldb.SBValue, _) -> None:
        self.valobj = valobj

    def num_children(self) -> int:
        return self.count

    def get_child_at_index(self, idx: int) -> lldb.SBValue:
        return self.storage.GetChildAtIndex(idx)

    def update(self) -> None:
        self.storage = self.valobj.GetChildMemberWithName(
            "_storage"
        ).GetSyntheticValue()
        self.count = (
            self.valobj.GetChildMemberWithName("_count")
            .GetSyntheticValue()
            .GetValueAsUnsigned()
        )
