From 15acb0586a3e8e6a17d074e1e0142403752aa41b Mon Sep 17 00:00:00 2001 From: Felipe Magno de Almeida Date: Mon, 8 Jun 2020 18:05:49 -0300 Subject: [PATCH] cxx: Fix uses of intrinsic eolian binbuf type Add special binbuf and Eina_Strbuf conversions Reviewed-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D11950 --- src/bindings/cxx/eo_cxx/eo_cxx_interop.hh | 29 +++++++++++++++++++++++ src/lib/eolian_cxx/grammar/type_impl.hpp | 4 ++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh b/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh index 633d377b0b..3f4521fe66 100644 --- a/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh +++ b/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh @@ -53,6 +53,10 @@ template <> struct in_traits { typedef efl::eina::strbuf type; }; template <> struct in_traits { typedef efl::eina::strbuf const type; }; +template <> +struct in_traits { typedef efl::eina::strbuf_view type; }; +template <> +struct in_traits { typedef efl::eina::strbuf_view const type; }; template struct in_traits { typedef T& type; }; template @@ -550,10 +554,22 @@ inline const char* convert_to_c_impl(efl::eina::stringshare x, tag) +{ + return x.native_handle(); +} inline Eina_Strbuf* convert_to_c_impl(efl::eina::strbuf& x, tag) { return x.native_handle(); } +inline Eina_Strbuf const* convert_to_c_impl(efl::eina::strbuf_view const& x, tag) +{ + return x.native_handle(); +} +inline Eina_Strbuf* convert_to_c_impl(efl::eina::strbuf_view const& x, tag) +{ + return const_cast(x.native_handle()); +} template T* convert_to_c_impl(std::unique_ptr& v, tag>) { @@ -732,6 +748,19 @@ T convert_to_return(U* value, tag, typename std::enable_if::v // const should be to the type if value is const return T{const_cast::type*>(value)}; } +inline eina::strbuf convert_to_return(Eina_Strbuf* value, tag) +{ + eina::strbuf_wrapper t{value}; + return t; +} +inline eina::strbuf_view convert_to_return(Eina_Strbuf* value, tag) +{ + return {value}; +} +inline eina::strbuf_view convert_to_return(Eina_Strbuf const* value, tag) +{ + return {value}; +} inline eina::stringshare convert_to_return(const Eina_Stringshare* value, tag) { return efl::eina::stringshare(value); diff --git a/src/lib/eolian_cxx/grammar/type_impl.hpp b/src/lib/eolian_cxx/grammar/type_impl.hpp index b43641a052..547132a31b 100644 --- a/src/lib/eolian_cxx/grammar/type_impl.hpp +++ b/src/lib/eolian_cxx/grammar/type_impl.hpp @@ -174,10 +174,10 @@ struct visitor_generate if (r.base_qualifier.qualifier & qualifier_info::is_const) { r.base_qualifier.qualifier ^= qualifier_info::is_const; - return replace_base_type(r, " Eina_Binbuf*"); + return replace_base_type(r, " ::efl::eina::strbuf"); } else - return replace_base_type(r, " Eina_Binbuf const*"); + return replace_base_type(r, " ::efl::eina::strbuf_view"); }} /* FIXME: handle any_value_ref */ , {"any_value", true, nullptr, nullptr, [&]