Advertisement
Guest User

Alternative union representation

a guest
Jun 17th, 2014
359
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 0.76 KB | None | 0 0
  1. // union foo {
  2. //     int i;
  3. //     float f;
  4. // };
  5. type foo struct {
  6.     data [4]byte
  7. }
  8.  
  9. func (f foo) i() int32 {
  10.     return int32(f.data)
  11. }
  12.  
  13. func (f foo) setI(i int32) {
  14.     f.data = [4]byte(b)
  15. }
  16.  
  17. func (f foo) f() float32 {
  18.     return float32(f.data)
  19. }
  20.  
  21. func (f foo) setF(f float32) {
  22.     f.data = [4]byte(b)
  23. }
  24.  
  25. // Read a foo from r into data
  26. func readFoo(r io.Reader, order binary.ByteOrder, data *foo) error {
  27.     b := make([]byte, 4)
  28.     if _, err := io.ReadFull(r, b); err != nil {
  29.         return err
  30.     }
  31.  
  32.     *data = foo{data: [4]byte(order.PutUint32(b))}
  33.     return nil
  34. }
  35.  
  36. // Write a foo from data into w
  37. func writeFoo(w io.Writer, order binary.ByteOrder, data foo) error {
  38.     b := make([]byte, 4)
  39.     order.PutUint32(b, uint32(data))
  40.     _, err := w.Write(b)
  41.     return err
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement