package compute
import (
"unsafe"
"github.com/daviszhen/plan/pkg/chunk"
"github.com/daviszhen/plan/pkg/common"
"github.com/daviszhen/plan/pkg/util"
)
func AddInPlace(input *chunk.Vector, right int64, cnt int) {
util.AssertFunc(input.Typ().Id == common.LTID_POINTER)
if right == 0 {
return
}
switch input.PhyFormat() {
case chunk.PF_CONST:
util.AssertFunc(!chunk.IsNullInPhyFormatConst(input))
data := chunk.GetSliceInPhyFormatConst[unsafe.Pointer](input)
data[0] = util.PointerAdd(data[0], int(right))
default:
util.AssertFunc(input.PhyFormat().IsFlat())
data := chunk.GetSliceInPhyFormatFlat[unsafe.Pointer](input)
for i := 0; i < cnt; i++ {
data[i] = util.PointerAdd(data[i], int(right))
}
}
}
func And(left, right, result *chunk.Vector, count int) {
}
type UnaryData struct {
_tryCastData *VectorTryCastData
}
type VectorTryCastData struct {
_result *chunk.Vector
_errorMsg *string
_strict bool
_allConverted bool
}
func TryCastLoop[T any, R any](
src, res *chunk.Vector,
count int,
params *CastParams,
op CastOp[T, R],
) bool {
tryCastOp := func(input *T, result *R, mask *util.Bitmap, idx int, data *UnaryData) {
VectorTryCastOperator(input, result, mask, idx, data, op)
}
return TemplatedTryCastLoop[T, R](
src,
res,
count,
params,
tryCastOp)
}
func TemplatedTryCastLoop[T any, R any](
src, res *chunk.Vector,
count int,
params *CastParams,
op UnaryOp2[T, R],
) bool {
input := &VectorTryCastData{
_result: res,
_strict: params._strict,
_errorMsg: ¶ms._errorMsg,
}
data := &UnaryData{
_tryCastData: input,
}
unaryGenericExec[T, R](
src, res,
count,
data,
false,
op)
return data._tryCastData._allConverted
}