Guest User

Untitled

a guest
Feb 21st, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. from struct import Struct
  2. from recordtype import recordtype
  3.  
  4. def populate(value, mask):
  5. mask = mask[-1]
  6. if value:
  7. return value
  8. elif mask in 'bBhHiIlLqQfd':
  9. return 0
  10. elif mask in 'sp':
  11. return ''
  12. elif mask == '?':
  13. return False
  14.  
  15. def encode(struct):
  16. encoder = struct._struct
  17. params = [populate(x, mask) for x, mask in zip(struct, struct._fieldTypes)]
  18. return encoder.pack(*params)
  19.  
  20. def decode(struct, data):
  21. decoder = struct._struct
  22. values = decoder.unpack(data)
  23. for x in zip(struct._fields, values):
  24. setattr(struct, x[0], x[1])
  25.  
  26. def sizeof(struct):
  27. return struct._struct.size
  28.  
  29. def create(name, description):
  30. description = description.split(',')
  31. fields = [field[:field.find(':')] for field in description]
  32. typeList = [field[field.find(':') + 1:] for field in description]
  33. types = ''.join(['@'] + typeList)
  34. newType = recordtype(name, fields, default=None)
  35. newType._struct = Struct(types)
  36. newType._fieldTypes = typeList
  37. newType.encode = encode
  38. newType.decode = decode
  39. newType.sizeof = sizeof
  40. return newType
  41.  
  42.  
  43. if __name__ == '__main__':
  44. Point = create('Point', 'x:f,y:f')
  45. print Point
  46. p1 = Point(1, 2)
  47. p2 = Point(0, 0)
  48. print p1._asdict().values(), p2
  49. p2.decode(p1.encode())
  50. print p2
Add Comment
Please, Sign In to add comment