36 lines
808 B
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
|
|
}
|