From 303a250fd057ce628ca179b87419b47fd93c6a27 Mon Sep 17 00:00:00 2001 From: David Anthoff Date: Sun, 9 Jun 2019 20:44:13 -0700 Subject: [PATCH] Add lift macro --- src/DataValues.jl | 3 ++- src/scalar/helper.jl | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/scalar/helper.jl diff --git a/src/DataValues.jl b/src/DataValues.jl index 99a0198..5a99296 100644 --- a/src/DataValues.jl +++ b/src/DataValues.jl @@ -1,4 +1,3 @@ -__precompile__() module DataValues using Dates @@ -9,6 +8,8 @@ export DataValueArray, DataValueVector, DataValueMatrix export isna, hasvalue, dropna, dropna!, padna!, padna +include("scalar/helper.jl") + include("scalar/core.jl") # TODO 0.7 migration, enable again # include("scalar/broadcast.jl") diff --git a/src/scalar/helper.jl b/src/scalar/helper.jl new file mode 100644 index 0000000..90a3558 --- /dev/null +++ b/src/scalar/helper.jl @@ -0,0 +1,14 @@ +macro lift(f_sign, ret_type) + + func_name = f_sign.args[1].args[1] + arg_type_name = f_sign.args[1].args[2].args[2] + type_constraint = f_sign.args[2] + + quote + function $(esc(func_name))(x::DataValue{$(esc(arg_type_name))}) where {$(esc(type_constraint))} + return isna(x) ? DataValue{$(esc(ret_type))}() : DataValue{$(esc(ret_type))}($(esc(func_name))(unsafe_get(x))) + end + + $(esc(func_name))(::DataValue{Union{}}) = NA + end +end