rustperf/src/vec3.go

54 lines
1.1 KiB
Go

package vec3
import (
"strconv"
"github.com/francoispqt/gojay"
)
type Vec3 struct {
X float32 `json:"x"`
Y float32 `json:"y"`
Z float32 `json:"z"`
}
func (v *Vec3) MarshalJSONObject(enc *gojay.Encoder) {
enc.FloatKey("x", float64(v.X))
enc.FloatKey("y", float64(v.Y))
enc.FloatKey("z", float64(v.Z))
}
func (v *Vec3) IsNil() bool {
return v == nil
}
func HandRolled(vs []Vec3) ([]byte, error) {
buf := []byte("[")
for i, v := range vs {
if i > 0 {
buf = append(buf, []byte(`,{"x":`)...)
} else {
buf = append(buf, []byte(`{"x":`)...)
}
buf = strconv.AppendFloat(buf, float64(v.X), 'f', -1, 32)
buf = append(buf, []byte(`,"y":`)...)
buf = strconv.AppendFloat(buf, float64(v.Y), 'f', -1, 32)
buf = append(buf, []byte(`,"z":`)...)
buf = strconv.AppendFloat(buf, float64(v.Z), 'f', -1, 32)
buf = append(buf, []byte("}")...)
}
buf = append(buf, ']')
return buf, nil
}
type Vec3Slice []*Vec3
func (vs *Vec3Slice) MarshalJSONArray(enc *gojay.Encoder) {
for _, e := range *vs {
enc.AddObject(e)
}
}
func (vs Vec3Slice) IsNil() bool {
return vs == nil
}