add cfunction wrapper