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