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 }