Пример #1
0
    def _aggregateFields(self):
        #if not self.pointerResolved:
        #  raise ValueError('I should be resolved')
        self._dirty = True

        self._fields.sort()
        myfields = []

        signature = self.getSignature()
        pencoder = pattern.PatternEncoder(signature, minGroupSize=3)
        patterns = pencoder.makePattern()

        #txt = self.getSignature(text=True)
        #log.warning('signature of len():%d, %s'%(len(txt),txt))
        #p = pattern.findPatternText(txt, 2, 3)
        #log.debug(p)

        #log.debug('aggregateFields came up with pattern %s'%(patterns))

        # pattern is made on FieldType,
        #so we need to dequeue self.fields at the same time to enqueue in myfields
        for nb, fieldTypesAndSizes in patterns:
            #print 'fieldTypesAndSizes:',fieldTypesAndSizes
            if nb == 1:
                fieldType = fieldTypesAndSizes[0]  # its a tuple
                field = self._fields.pop(0)
                myfields.append(field)  # single el
                #log.debug('simple field:%s '%(field) )
            elif len(fieldTypesAndSizes
                     ) > 1:  #  array of subtructure DEBUG XXX TODO
                log.debug('substructure with sig %s' % (fieldTypesAndSizes))
                myelements = []
                for i in range(nb):
                    fields = [
                        self._fields.pop(0)
                        for i in range(len(fieldTypesAndSizes))
                    ]  # nb-1 left
                    #otherFields = [ self.fields.pop(0) for i in range((nb-1)*len(fieldTypesAndSizes)) ]
                    # need global ref to compare substructure signature to other anonstructure
                    firstField = FieldType.makeStructField(
                        self, fields[0].offset, fields)
                    myelements.append(firstField)
                array = makeArrayField(self, myelements)
                myfields.append(array)
                #log.debug('array of structure %s'%(array))
            elif len(fieldTypesAndSizes) == 1:  #make array of elements or
                log.debug('found array of %s' %
                          (self._fields[0].typename.basename))
                fields = [self.fields.pop(0) for i in range(nb)]
                array = makeArrayField(self, fields)
                myfields.append(array)
                #log.debug('array of elements %s'%(array))
            else:  # TODO DEBUG internal struct
                raise ValueError('fields patterns len is incorrect %d' %
                                 (len(fieldTypesAndSizes)))

        log.debug('done with aggregateFields')
        self._fields = myfields
        #print 'final', self.fields
        return
Пример #2
0
    def _findSubStructures(self):
        if not self._pointerResolved:
            raise ValueError('I should be resolved')
        self._dirty = True

        self._fields.sort()
        myfields = []

        signature = self.getTypeSignature()
        pencoder = pattern.PatternEncoder(signature, minGroupSize=2)
        patterns = pencoder.makePattern()

        txt = self.getTypeSignature(text=True)
        p = pattern.findPatternText(txt, 1, 2)

        log.debug('substruct typeSig: %s' % txt)
        log.debug('substruct findPatterntext: %s' % p)
        log.debug('substruct came up with pattern %s' % (patterns))

        # pattern is made on FieldType,
        #so we need to dequeue self.fields at the same time to enqueue in myfields
        for nb, fieldTypes in patterns:
            if nb == 1:
                field = self._fields.pop(0)
                myfields.append(field)  # single el
                #log.debug('simple field:%s '%(field) )
            elif len(fieldTypes) > 1:  #  array of subtructure DEBUG XXX TODO
                log.debug('fieldTypes:%s' % fieldTypes)
                log.debug('substructure with sig %s' %
                          (''.join([ft.sig[0] for ft in fieldTypes])))
                myelements = []
                for i in range(nb):
                    fields = [
                        self._fields.pop(0) for i in range(len(fieldTypes))
                    ]  # nb-1 left
                    #otherFields = [ self.fields.pop(0) for i in range((nb-1)*len(fieldTypesAndSizes)) ]
                    # need global ref to compare substructure signature to other anonstructure
                    firstField = FieldType.makeStructField(
                        self, fields[0].offset, fields)
                    myelements.append(firstField)
                array = makeArrayField(self, myelements)
                myfields.append(array)
                #log.debug('array of structure %s'%(array))
            elif len(fieldTypes
                     ) == 1:  #make array of elements obase on same base type
                log.debug('found array of %s' %
                          (self._fields[0].typename.basename))
                fields = [self._fields.pop(0) for i in range(nb)]
                array = makeArrayField(self, fields)
                myfields.append(array)
                #log.debug('array of elements %s'%(array))
            else:  # TODO DEBUG internal struct
                raise ValueError('fields patterns len is incorrect %d' %
                                 (len(fieldTypes)))

        log.debug('done with findSubstructure')
        self._fields = myfields
        #print 'final', self.fields
        return
Пример #3
0
    def _aggregateFields(self):
        # if not self.resolvedPointers:
        #  raise ValueError('I should be resolved')
        self._dirty = True

        self._fields.sort()
        myfields = []

        signature = self.getSignature()
        pencoder = pattern.PatternEncoder(signature, minGroupSize=3)
        patterns = pencoder.makePattern()

        # txt = self.getSignature(text=True)
        # log.warning('signature of len():%d, %s'%(len(txt),txt))
        # p = pattern.findPatternText(txt, 2, 3)
        # log.debug(p)

        # log.debug('aggregateFields came up with pattern %s'%(patterns))

        # pattern is made on FieldType,
        # so we need to dequeue self.fields at the same time to enqueue in
        # myfields
        for nb, fieldTypesAndSizes in patterns:
            # print 'fieldTypesAndSizes:',fieldTypesAndSizes
            if nb == 1:
                fieldType = fieldTypesAndSizes[0]  # its a tuple
                field = self._fields.pop(0)
                myfields.append(field)  # single el
                # log.debug('simple field:%s '%(field) )
            # array of subtructure DEBUG XXX TODO
            elif len(fieldTypesAndSizes) > 1:
                log.debug("substructure with sig %s" % (fieldTypesAndSizes))
                myelements = []
                for i in range(nb):
                    fields = [self._fields.pop(0) for i in range(len(fieldTypesAndSizes))]  # nb-1 left
                    # otherFields = [ self.fields.pop(0) for i in range((nb-1)*len(fieldTypesAndSizes)) ]
                    # need global ref to compare substructure signature to
                    # other anonstructure
                    firstField = FieldType.makeStructField(self, fields[0].offset, fields)
                    myelements.append(firstField)
                array = makeArrayField(self, myelements)
                myfields.append(array)
                # log.debug('array of structure %s'%(array))
            elif len(fieldTypesAndSizes) == 1:  # make array of elements or
                log.debug("found array of %s" % (self._fields[0].typename.basename))
                fields = [self.fields.pop(0) for i in range(nb)]
                array = makeArrayField(self, fields)
                myfields.append(array)
                # log.debug('array of elements %s'%(array))
            else:  # TODO DEBUG internal struct
                raise ValueError("fields patterns len is incorrect %d" % (len(fieldTypesAndSizes)))

        log.debug("done with aggregateFields")
        self._fields = myfields
        # print 'final', self.fields
        return
Пример #4
0
    def _findSubStructures(self):
        if not self.resolvedPointers:
            raise ValueError("I should be resolved")
        self._dirty = True

        self._fields.sort()
        myfields = []

        signature = self.getTypeSignature()
        pencoder = pattern.PatternEncoder(signature, minGroupSize=2)
        patterns = pencoder.makePattern()

        txt = self.getTypeSignature(text=True)
        p = pattern.findPatternText(txt, 1, 2)

        log.debug("substruct typeSig: %s" % txt)
        log.debug("substruct findPatterntext: %s" % p)
        log.debug("substruct came up with pattern %s" % (patterns))

        # pattern is made on FieldType,
        # so we need to dequeue self.fields at the same time to enqueue in
        # myfields
        for nb, fieldTypes in patterns:
            if nb == 1:
                field = self._fields.pop(0)
                myfields.append(field)  # single el
                # log.debug('simple field:%s '%(field) )
            elif len(fieldTypes) > 1:  # array of subtructure DEBUG XXX TODO
                log.debug("fieldTypes:%s" % fieldTypes)
                log.debug("substructure with sig %s" % ("".join([ft.sig[0] for ft in fieldTypes])))
                myelements = []
                for i in range(nb):
                    fields = [self._fields.pop(0) for i in range(len(fieldTypes))]  # nb-1 left
                    # otherFields = [ self.fields.pop(0) for i in range((nb-1)*len(fieldTypesAndSizes)) ]
                    # need global ref to compare substructure signature to
                    # other anonstructure
                    firstField = FieldType.makeStructField(self, fields[0].offset, fields)
                    myelements.append(firstField)
                array = makeArrayField(self, myelements)
                myfields.append(array)
                # log.debug('array of structure %s'%(array))
            # make array of elements obase on same base type
            elif len(fieldTypes) == 1:
                log.debug("found array of %s" % (self._fields[0].typename.basename))
                fields = [self._fields.pop(0) for i in range(nb)]
                array = makeArrayField(self, fields)
                myfields.append(array)
                # log.debug('array of elements %s'%(array))
            else:  # TODO DEBUG internal struct
                raise ValueError("fields patterns len is incorrect %d" % (len(fieldTypes)))

        log.debug("done with findSubstructure")
        self._fields = myfields
        # print 'final', self.fields
        return