Skip to content
Snippets Groups Projects
NextSoftware.py 4.66 KiB
Newer Older
  • Learn to ignore specific revisions
  • import lldb
    
    
    # Synthetic view for static_vector objects
    class static_vector_SynthChildProvider:
      def __init__( self, valobj, dict ):
        self.valobj = valobj
    
      def num_children( self ):
        size = self.valobj.GetChildMemberWithName( '_size' ).GetValueAsUnsigned()
        return size + 2
    
      def has_children( self ):
        return self.num_children() != 0
    
      def get_child_at_index( self, index ):
        if index < 0:
          return None
        if index >= self.num_children():
          return None
        if index == self.num_children() - 2:
          return self.valobj.GetChildMemberWithName( '_arr' )
        if index == self.num_children() - 1:
          return self.valobj.GetChildMemberWithName( '_size' )
        arr = self.valobj.GetChildMemberWithName( '_arr' )
        return arr.GetChildAtIndex(index)
    
      def update( self ):
        pass
    
    
    # Summary for UnitArea objects
    def static_vector_SummaryProvider( valobj, dict ):
      size = valobj.GetNumChildren() - 2
      return 'size=' + str( size )
    
    # Synthetic view for UnitArea objects
    class UnitArea_SynthChildProvider:
      def __init__( self, valobj, dict ):
        self.valobj = valobj
    
      def num_children( self ):
        blocks = self.valobj.GetChildMemberWithName( 'blocks' )
        size = blocks.GetChildMemberWithName( '_size' ).GetValueAsUnsigned()
        return size + 3
    
      def has_children( self ):
        return True
    
      def get_child_at_index( self, index ):
        if index < 0:
          return None
        if index >= self.num_children():
          return None
        if index == 0:
          return self.valobj.GetChildMemberWithName( 'chromaFormat' )
        if index == self.num_children()-2:
          return self.valobj.GetChildMemberWithName( 'blocks' ).GetChildMemberWithName( '_arr' )
        if index == self.num_children()-1:
          return self.valobj.GetChildMemberWithName( 'blocks' ).GetChildMemberWithName( '_size' )
        if index > 0:
          arr = self.valobj.GetChildMemberWithName( 'blocks' ).GetChildMemberWithName( '_arr' )
          return arr.GetChildAtIndex( index - 1 )
    
      def update( self ):
        pass
    
    # Summary for Area objects
    def Area_SummaryProvider( valobj, dict ):
      x      = valobj.GetChildMemberWithName( 'x' ).GetValueAsUnsigned()
      y      = valobj.GetChildMemberWithName( 'y' ).GetValueAsUnsigned()
      width  = valobj.GetChildMemberWithName( 'width' ).GetValueAsUnsigned()
      height = valobj.GetChildMemberWithName( 'height' ).GetValueAsUnsigned()
      return 'x=' + str( x ) + ', y=' + str( y ) + ', width=' + str( width ) + ', height=' + str( height )
    
    # Summary for CompArea objects
    def CompArea_SummaryProvider( valobj, dict ):
      compid = valobj.GetChildMemberWithName( 'compID' ).GetValueAsUnsigned()
      if compid == 0:
        comp = 'Y '
      elif compid == 1:
        comp = 'Cb '
      elif compid == 2:
        comp = 'Cr '
      elif compid == 3:
        comp = 'Cb2 '
      elif compid == 4:
        comp = 'Cr2 '
      else:
        comp = 'invalid '
      return comp + Area_SummaryProvider( valobj, dict)
    
    # Summary for UnitArea objects
    def UnitArea_SummaryProvider( valobj, dict ):
      area = valobj.GetChildAtIndex( 1 )
      return Area_SummaryProvider( area, dict)
    
    # Summary for CodingUnit objects
    def CodingUnit_SummaryProvider( valobj, dict ):
      area = valobj.GetChildMemberWithName( 'blocks' ).GetChildAtIndex( 0 )
      return 'CU: ' + Area_SummaryProvider( area, dict)
    
    # Summary for PredictionUnit objects
    def PredictionUnit_SummaryProvider( valobj, dict ):
      area = valobj.GetChildMemberWithName( 'blocks' ).GetChildAtIndex( 0 )
      return 'PU: ' + Area_SummaryProvider( area, dict)
    
    # Summary for TransformUnit objects
    def TransformUnit_SummaryProvider( valobj, dict ):
      area = valobj.GetChildMemberWithName( 'blocks' ).GetChildAtIndex( 0 )
      return 'TU: ' + Area_SummaryProvider( area, dict)
    
    def __lldb_init_module( debugger, dict ):
      debugger.HandleCommand( 'type synthetic add -l NextSoftware.static_vector_SynthChildProvider -x "static_vector<.*>$"' )
      debugger.HandleCommand( 'type summary add -F NextSoftware.static_vector_SummaryProvider -e -x "static_vector<.*>$"' )
    #  debugger.HandleCommand( 'type summary add --summary-string size=${svar%#} -e -x "static_vector<.*>$"' )
      debugger.HandleCommand( 'type synthetic add -l NextSoftware.UnitArea_SynthChildProvider UnitArea' )
      debugger.HandleCommand( 'type summary add -F NextSoftware.UnitArea_SummaryProvider -e  UnitArea' )
      debugger.HandleCommand( 'type summary add -F NextSoftware.Area_SummaryProvider -e Area' )
      debugger.HandleCommand( 'type summary add -F NextSoftware.CompArea_SummaryProvider -e CompArea' )
      debugger.HandleCommand( 'type summary add -F NextSoftware.CodingUnit_SummaryProvider -e CodingUnit' )
      debugger.HandleCommand( 'type summary add -F NextSoftware.PredictionUnit_SummaryProvider -e PredictionUnit' )
      debugger.HandleCommand( 'type summary add -F NextSoftware.TransformUnit_SummaryProvider -e TransformUnit' )