| package lib |
| |
| import ( |
| "encoding/binary" |
| "fmt" |
| "io" |
| ) |
| |
| type DataType uint |
| |
| const ( |
| DATA_TYPE_UINT8 DataType = 0x00 |
| DATA_TYPE_UINT16 = 0x01 |
| DATA_TYPE_UINT32 = 0x02 |
| DATA_TYPE_UINT64 = 0x03 |
| DATA_TYPE_INT8 = 0x10 |
| DATA_TYPE_INT16 = 0x11 |
| DATA_TYPE_INT32 = 0x12 |
| DATA_TYPE_INT64 = 0x13 |
| DATA_TYPE_FLOAT32 = 0x40 |
| ) |
| |
| func (dt DataType) Size() int { |
| switch dt { |
| case DATA_TYPE_UINT8: |
| return 1 |
| case DATA_TYPE_UINT16: |
| return 2 |
| case DATA_TYPE_UINT32: |
| return 4 |
| case DATA_TYPE_UINT64: |
| return 8 |
| case DATA_TYPE_INT8: |
| return 1 |
| case DATA_TYPE_INT16: |
| return 2 |
| case DATA_TYPE_INT32: |
| return 4 |
| case DATA_TYPE_INT64: |
| return 8 |
| case DATA_TYPE_FLOAT32: |
| return 4 |
| default: |
| return -1 |
| } |
| } |
| |
| func (dt DataType) Read(r io.Reader) (float64, error) { |
| switch dt { |
| case DATA_TYPE_UINT8: |
| var val uint8 |
| err := binary.Read(r, binary.LittleEndian, &val) |
| return float64(val), err |
| case DATA_TYPE_UINT16: |
| var val uint16 |
| err := binary.Read(r, binary.LittleEndian, &val) |
| return float64(val), err |
| case DATA_TYPE_UINT32: |
| var val uint32 |
| err := binary.Read(r, binary.LittleEndian, &val) |
| return float64(val), err |
| case DATA_TYPE_UINT64: |
| var val uint64 |
| err := binary.Read(r, binary.LittleEndian, &val) |
| return float64(val), err |
| case DATA_TYPE_INT8: |
| var val int8 |
| err := binary.Read(r, binary.LittleEndian, &val) |
| return float64(val), err |
| case DATA_TYPE_INT16: |
| var val int16 |
| err := binary.Read(r, binary.LittleEndian, &val) |
| return float64(val), err |
| case DATA_TYPE_INT32: |
| var val int32 |
| err := binary.Read(r, binary.LittleEndian, &val) |
| return float64(val), err |
| case DATA_TYPE_INT64: |
| var val int64 |
| err := binary.Read(r, binary.LittleEndian, &val) |
| return float64(val), err |
| case DATA_TYPE_FLOAT32: |
| var val float32 |
| err := binary.Read(r, binary.LittleEndian, &val) |
| return float64(val), err |
| default: |
| return 0.0, fmt.Errorf("Can't decode type %d.", dt) |
| } |
| } |