Skip to content

Instantly share code, notes, and snippets.

@harvimt
Last active December 19, 2015 14:49
Show Gist options
  • Select an option

  • Save harvimt/5972099 to your computer and use it in GitHub Desktop.

Select an option

Save harvimt/5972099 to your computer and use it in GitHub Desktop.

Revisions

  1. Mark Harviston revised this gist Jul 13, 2013. 1 changed file with 27 additions and 4 deletions.
    31 changes: 27 additions & 4 deletions metastruct.py
    Original file line number Diff line number Diff line change
    @@ -1,17 +1,40 @@
    class CustomCollection():
    def __init__(self):
    super().__init__()
    self.items = []

    def __setitem__(self, key, value):
    if key == '_':
    self.items.append(value)
    else:
    self.items.append((key, value))

    def __getitem__(self, key):
    if key == '_':
    raise KeyError('_')
    return dict(self.items)[key]


    class _MetaStruct(type):
    """ metaclass for use by magic struct"""
    def __new__(

    @classmethod
    def __prepare__(metacls, name, bases):
    return OrderedDict()
    return CustomCollection()

    def __new__(cls, name, bases, classdict):
    if name != 'MagicStruct':
    if bases:
    return Struct(*classdict.items())
    else:
    return super().__new__(name, bases, classdict)
    return super().__new__(name, bases, classdict.items())

    class MagicStruct(metaclass=_MetaStruct):
    """ syntactic sugar for making Structs"""
    pass

    class ExampleStruct(MagicStruct)
    named = uint64l
    _ = Embedded(Flags(uint64l,
    flag1=0x01,
    flag2=0x20,
    ))
  2. Mark Harviston created this gist Jul 11, 2013.
    17 changes: 17 additions & 0 deletions metastruct.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,17 @@
    class _MetaStruct(type):
    """ metaclass for use by magic struct"""
    def __new__(

    @classmethod
    def __prepare__(metacls, name, bases):
    return OrderedDict()

    def __new__(cls, name, bases, classdict):
    if name != 'MagicStruct':
    return Struct(*classdict.items())
    else:
    return super().__new__(name, bases, classdict)

    class MagicStruct(metaclass=_MetaStruct):
    """ syntactic sugar for making Structs"""
    pass