bu5hm4n pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=15acb0586a3e8e6a17d074e1e0142403752aa41b
commit 15acb0586a3e8e6a17d074e1e0142403752aa41b Author: Felipe Magno de Almeida <[email protected]> Date: Mon Jun 8 18:05:49 2020 -0300 cxx: Fix uses of intrinsic eolian binbuf type Add special binbuf and Eina_Strbuf conversions Reviewed-by: Marcel Hollerbach <[email protected]> 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<efl::eina::strbuf> { typedef efl::eina::strbuf type; }; template <> struct in_traits<efl::eina::strbuf const> { typedef efl::eina::strbuf const type; }; +template <> +struct in_traits<efl::eina::strbuf_view> { typedef efl::eina::strbuf_view type; }; +template <> +struct in_traits<efl::eina::strbuf_view const> { typedef efl::eina::strbuf_view const type; }; template <typename T> struct in_traits<T&> { typedef T& type; }; template <typename T> @@ -550,10 +554,22 @@ inline const char* convert_to_c_impl(efl::eina::stringshare x, tag<const char*, { return eina_stringshare_ref(x.c_str()); } +inline Eina_Strbuf const* convert_to_c_impl(efl::eina::strbuf& x, tag<Eina_Strbuf const*, efl::eina::strbuf, false>) +{ + return x.native_handle(); +} inline Eina_Strbuf* convert_to_c_impl(efl::eina::strbuf& x, tag<Eina_Strbuf*, efl::eina::strbuf, false>) { return x.native_handle(); } +inline Eina_Strbuf const* convert_to_c_impl(efl::eina::strbuf_view const& x, tag<Eina_Strbuf const*, efl::eina::strbuf_view, false>) +{ + return x.native_handle(); +} +inline Eina_Strbuf* convert_to_c_impl(efl::eina::strbuf_view const& x, tag<Eina_Strbuf*, efl::eina::strbuf_view, false>) +{ + return const_cast<Eina_Strbuf*>(x.native_handle()); +} template <typename T, typename U, typename Deleter> T* convert_to_c_impl(std::unique_ptr<U, Deleter>& v, tag<T*, std::unique_ptr<U, Deleter>>) { @@ -732,6 +748,19 @@ T convert_to_return(U* value, tag<T, U*>, typename std::enable_if<is_range<T>::v // const should be to the type if value is const return T{const_cast<typename std::remove_const<U>::type*>(value)}; } +inline eina::strbuf convert_to_return(Eina_Strbuf* value, tag<Eina_Strbuf*, efl::eina::strbuf>) +{ + eina::strbuf_wrapper t{value}; + return t; +} +inline eina::strbuf_view convert_to_return(Eina_Strbuf* value, tag<Eina_Strbuf*, efl::eina::strbuf_view>) +{ + return {value}; +} +inline eina::strbuf_view convert_to_return(Eina_Strbuf const* value, tag<Eina_Strbuf const*, efl::eina::strbuf_view>) +{ + return {value}; +} inline eina::stringshare convert_to_return(const Eina_Stringshare* value, tag<const char*, efl::eina::stringshare>) { 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, [&] --
