blob: c7b3e45e5d708e8409a2f91ff38af1bb5e488357 [file] [log] [blame]
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)
}
}