Пример #1
0
    def __setattr__(self, name, value):
        if self.frozen: raise Enumeration.ConstError('Enumeration is frozen.')

        sd = self.__dict__
        if name in sd: raise Enumeration.ConstError('Cannot rebind %s.' % name)

        i, desc = self._next_val, None
        if is_a_string(value):
            desc = value
        elif is_an_integer(value):
            i = value
        else:
            i, desc = value

        if self.unique and i in self._values:
            raise ValueError('Value already used: %d.' % i)

        sa = self._super_setattr
        sa(name, i)
        self._names.add(name)
        self._values.add(i)
        sa('_next_val', i + 1)
        if desc:
            sdd = self._descriptions
            sdd[name] = desc
            sdd[i] = desc
Пример #2
0
    def __getitem__(self, key):
        if is_an_integer(key):
            for sec in self.section:
                if key >= sec.start_addr and key <= sec.end_addr:
                    key -= sec.start_addr
                    return sec.buffer[key]
        else:
            start = key.start
            if start is None:
                raise IndexError('Must give start index.')
            stop = key.stop
            for sec in self.section:
                if start >= sec.start_addr and start <= sec.end_addr:
                    start -= sec.start_addr
                    if stop is not None:
                        stop -= sec.start_addr
                    return sec.buffer[slice(start, stop, key.step)]

        raise IndexError('Given index is invalid.')
Пример #3
0
 def _serialize(self, f, name, val):
     if is_an_integer(val):
         f.write('^i %s %d\n' % (name, val))
     elif isinstance(val, str):
         f.write('^b %s %d\n' % (name, len(val)))
         f.write(val)
     elif isinstance(val, list):
         f.write('^a %s %d\n' % (name, len(val)))
         for i, e in enumerate(val):
             self._serialize(f, str(i), e)
     elif isinstance(val, dict):
         f.write('^h %s %d\n' % (name, len(val)))
         keys = val.keys()
         keys.sort()
         for i, k in enumerate(keys):
             ks = str(i)
             self._serialize(f, ks, k)
             self._serialize(f, ks, val[k])
     elif isinstance(val, float):
         hexflt = val.hex()
         f.write('^f %s %d\n' % (name, len(hexflt)))
         f.write(hexflt)
     else:
         raise ValueError("Can't serialize %s, %s." % (name, type(val)))
Пример #4
0
 def _serialize(self, f, name, val):
     if is_an_integer(val):
         f.write('^i %s %d\n' % (name, val))
     elif isinstance(val, str):
         f.write('^b %s %d\n' % (name, len(val)))
         f.write(val)
     elif isinstance(val, list):
         f.write('^a %s %d\n' % (name, len(val)))
         for i, e in enumerate(val):
             self._serialize(f, str(i), e)
     elif isinstance(val, dict):
         f.write('^h %s %d\n' % (name, len(val)))
         keys = val.keys()
         keys.sort()
         for i, k in enumerate(keys):
             ks = str(i)
             self._serialize(f, ks, k)
             self._serialize(f, ks, val[k])
     elif isinstance(val, float):
         hexflt = val.hex()
         f.write('^f %s %d\n' % (name, len(hexflt)))
         f.write(hexflt)
     else:
         raise ValueError("Can't serialize %s, %s." % (name, type(val)))