Hibiki/cgo/lemire.go

36 lines
808 B
Go

package cgo
/*
#cgo CFLAGS: -march=native -Ofast -std=c99
#include "lemire.h"
*/
import "C"
import (
"fmt"
"unsafe"
)
type LemireMaxClampedFilter struct {
ptr *C.LemireMaxClampedFilter
}
func NewLemireMaxClampedFilter(windowSize, dataLength int) (*LemireMaxClampedFilter, error) {
ob := &LemireMaxClampedFilter{
ptr: C.lemire_max_clamped_init(C.int(windowSize), C.int(dataLength)),
}
if ob.ptr == nil {
return nil, fmt.Errorf("windowSize should be odd when clamping edges, it is even")
}
return ob, nil
}
func (l *LemireMaxClampedFilter) Filter(data, max []float32) {
C.lemire_max_clamped_filter(l.ptr, (*C.float)(unsafe.SliceData(data)), C.size_t(len(data)), (*C.float)(unsafe.SliceData(max)))
}
func (l *LemireMaxClampedFilter) Close() {
C.lemire_max_clamped_free(l.ptr)
l.ptr = nil
}