Last active
December 19, 2015 14:49
-
-
Save harvimt/5972099 to your computer and use it in GitHub Desktop.
Revisions
-
Mark Harviston revised this gist
Jul 13, 2013 . 1 changed file with 27 additions and 4 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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""" @classmethod def __prepare__(metacls, name, bases): return CustomCollection() def __new__(cls, name, bases, classdict): if bases: return Struct(*classdict.items()) else: 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, )) -
Mark Harviston created this gist
Jul 11, 2013 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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