package gen

import (
	"github.com/influxdata/influxdb/v2/tsdb"
	"github.com/influxdata/influxdb/v2/tsdb/engine/tsm1"
)

{{range .}}
{{ $typename := print .name "Array" }}
{{ $tsdbname := print .Name "Array" }}
type {{.Name}}Values interface {
	Copy(*tsdb.{{$tsdbname}})
}

type {{$typename}} struct {
	tsdb.{{$tsdbname}}
}

func new{{$tsdbname}}Len(sz int) *{{$typename}} {
	return &{{$typename}}{
		{{$tsdbname}}: tsdb.{{$tsdbname}}{
			Timestamps: make([]int64, sz),
			Values: make([]{{.Type}}, sz),
		},
	}
}

func (a *{{$typename}}) Encode(b []byte) ([]byte, error) {
	return tsm1.Encode{{$tsdbname}}Block(&a.{{$tsdbname}}, b)
}

func (a *{{$typename}}) Copy(dst *tsdb.{{$tsdbname}}) {
	dst.Timestamps = append(dst.Timestamps[:0], a.Timestamps...)
	dst.Values = append(dst.Values[:0], a.Values...)
}
{{end}}
