// Copyright 2026 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//specgen:category Conditional logic

package spec

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
//
//specgen:require maskN=xN
func Masked[E Elt, W Width, mE MaskElt](x Vec[E, W], mask Vec[mE, W]) (z Vec[E, W]) {
	z = makeVec[E, W]()
	for i, xi := range x {
		if mask[i] != 0 {
			z[i] = xi
		}
	}
	return z
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
//
//specgen:require maskN=xN
func IfElse[E Elt, W Width, mE MaskElt](x Vec[E, W], mask Vec[mE, W], y Vec[E, W]) (z Vec[E, W]) {
	z = makeVec[E, W]()
	for i, xi := range x {
		if mask[i] != 0 {
			z[i] = xi
		} else {
			z[i] = y[i]
		}
	}
	return z
}
