summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2017-11-22 17:17:04 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2017-12-05 10:14:03 +0900
commit753304c69d27a5303e742dffaaff6f6230c3211b (patch)
tree89817211f34ec95915863f24857da916db02fb45
parent425d8db90f9b67ab9645216a71bbba651cc54732 (diff)
downloadefl-753304c69d27a5303e742dffaaff6f6230c3211b.tar.gz
cxx: Add define EFL_CXXPERIMENTAL for testing
I'll hide some controversial features behind this, until we come to an agreement with @felipealmeida and people who actually know C++ (iow: not just me^^). Features protected: - easy wref (using -> without locking) - xxx_event_cb_add() functions in object classes - instantiate(obj) to create a new object - add as a synonym for instantiate (both in efl::eo)
-rw-r--r--src/bindings/cxx/eo_cxx/eo_concrete.hh6
-rw-r--r--src/bindings/cxx/eo_cxx/eo_wref.hh2
-rw-r--r--src/examples/elementary/bg_cxx_example_02.cc4
-rw-r--r--src/examples/elementary/button_cxx_example_00.cc2
-rw-r--r--src/examples/elementary/button_cxx_example_01.cc2
-rw-r--r--src/examples/elementary/calendar_cxx_example_02.cc8
-rw-r--r--src/examples/elementary/radio_cxx_example_01.cc2
-rw-r--r--src/lib/eolian_cxx/grammar/class_definition.hpp12
8 files changed, 27 insertions, 11 deletions
diff --git a/src/bindings/cxx/eo_cxx/eo_concrete.hh b/src/bindings/cxx/eo_cxx/eo_concrete.hh
index adc33985b7..47013dcbc6 100644
--- a/src/bindings/cxx/eo_cxx/eo_concrete.hh
+++ b/src/bindings/cxx/eo_cxx/eo_concrete.hh
@@ -32,6 +32,7 @@ namespace efl { namespace eo {
/// @{
struct instantiate_t {
+#ifdef EFL_CXXPERIMENTAL
/// @brief A helper to create objects with a different syntax
///
/// @param obj The object to instantiate
@@ -49,6 +50,7 @@ struct instantiate_t {
obj = T(*this);
return obj;
}
+#endif
};
/// @brief The handle to use to create real EFL objects
@@ -57,6 +59,10 @@ struct instantiate_t {
/// to trigger a real EFL object creation. The following syntax is preferred:
/// T obj(instantiate, ...);
instantiate_t const instantiate = {};
+
+#ifdef EFL_CXXPERIMENTAL
+instantiate_t const add = {};
+#endif
/// @brief Creates concrete versions for <em>Eo</em> wrappers.
///
diff --git a/src/bindings/cxx/eo_cxx/eo_wref.hh b/src/bindings/cxx/eo_cxx/eo_wref.hh
index e28409c513..aed6d699d0 100644
--- a/src/bindings/cxx/eo_cxx/eo_wref.hh
+++ b/src/bindings/cxx/eo_cxx/eo_wref.hh
@@ -123,7 +123,7 @@ struct wref
return *this;
}
-#ifdef EFL_CXX_WREF_EASY
+#ifdef EFL_CXXPERIMENTAL
T operator->() const {
if (!_eo_wref) return T(nullptr);
return T(detail::ref(_eo_wref));
diff --git a/src/examples/elementary/bg_cxx_example_02.cc b/src/examples/elementary/bg_cxx_example_02.cc
index 34016b6c9c..8ef33a8816 100644
--- a/src/examples/elementary/bg_cxx_example_02.cc
+++ b/src/examples/elementary/bg_cxx_example_02.cc
@@ -5,6 +5,8 @@
* ./bg_cxx_example_02
*/
+#define EFL_CXXPERIMENTAL
+
#include <Elementary.hh>
#include <sstream>
@@ -16,7 +18,7 @@ efl::ui::Win win;
EAPI_MAIN void
efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
{
- instantiate(win);
+ win = efl::ui::Win(instantiate);
::efl_ref(win._eo_ptr()); // FIXME: Window is doing BAD THINGSā„¢!
win.text_set("Bg Image");
win.autohide_set(true);
diff --git a/src/examples/elementary/button_cxx_example_00.cc b/src/examples/elementary/button_cxx_example_00.cc
index 5e899e1591..d44f18a924 100644
--- a/src/examples/elementary/button_cxx_example_00.cc
+++ b/src/examples/elementary/button_cxx_example_00.cc
@@ -1,6 +1,6 @@
// g++ -g `pkg-config --cflags --libs elementary-cxx efl-cxx eina-cxx eo-cxx ecore-cxx evas-cxx edje-cxx` button_cxx_example_00.cc -o button_cxx_example_00
-#define EFL_CXX_WREF_EASY
+#define EFL_CXXPERIMENTAL
#include <Elementary.hh>
#include <iostream>
diff --git a/src/examples/elementary/button_cxx_example_01.cc b/src/examples/elementary/button_cxx_example_01.cc
index e6b5147af5..7de67d3abb 100644
--- a/src/examples/elementary/button_cxx_example_01.cc
+++ b/src/examples/elementary/button_cxx_example_01.cc
@@ -1,6 +1,6 @@
// g++ -g `pkg-config --cflags --libs elementary-cxx efl-cxx eina-cxx eo-cxx ecore-cxx evas-cxx edje-cxx` button_cxx_example_01.cc -o button_cxx_example_01
-#define EFL_CXX_WREF_EASY
+#define EFL_CXXPERIMENTAL
#include <Elementary.hh>
using efl::eo::instantiate;
diff --git a/src/examples/elementary/calendar_cxx_example_02.cc b/src/examples/elementary/calendar_cxx_example_02.cc
index d6cb766f9b..fd001f7184 100644
--- a/src/examples/elementary/calendar_cxx_example_02.cc
+++ b/src/examples/elementary/calendar_cxx_example_02.cc
@@ -1,9 +1,9 @@
-#define EFL_CXX_WREF_EASY
+#define EFL_CXXPERIMENTAL
#include <Elementary.hh>
-using efl::eo::instantiate;
using namespace std::placeholders;
+using efl::eo::add;
struct appData
{
@@ -16,11 +16,11 @@ struct appData
void create() {
std::cout << "Hello!" << std::endl;
- instantiate(m_win);
+ add(m_win);
m_win.text_set("Calendar Layout Formatting Example");
m_win.delete_request_event_cb_add([&](){ destroy(); });
- efl::ui::Calendar cal(instantiate, m_win);
+ efl::ui::Calendar cal(add, m_win);
m_win.content_set(cal);
auto wcal(cal._get_wref());
diff --git a/src/examples/elementary/radio_cxx_example_01.cc b/src/examples/elementary/radio_cxx_example_01.cc
index 71507947ad..6fb410c89c 100644
--- a/src/examples/elementary/radio_cxx_example_01.cc
+++ b/src/examples/elementary/radio_cxx_example_01.cc
@@ -1,6 +1,6 @@
// g++ -g `pkg-config --cflags --libs elementary-cxx efl-cxx eina-cxx eo-cxx ecore-cxx evas-cxx edje-cxx` radio_cxx_example_01.cc -o radio_cxx_example_01
-#define EFL_CXX_WREF_EASY
+#define EFL_CXXPERIMENTAL
#include <Elementary.hh>
#include <iostream>
diff --git a/src/lib/eolian_cxx/grammar/class_definition.hpp b/src/lib/eolian_cxx/grammar/class_definition.hpp
index 295662f94d..d5810da033 100644
--- a/src/lib/eolian_cxx/grammar/class_definition.hpp
+++ b/src/lib/eolian_cxx/grammar/class_definition.hpp
@@ -156,6 +156,10 @@ struct class_definition_generator
<< scope_tab << "} const " << string_replace(',', '_') << "_event;\n"
))).generate(sink, std::vector<attributes::event_def>{e}, context))
return false;
+
+ /* EXPERIMENTAL: event_cb_add */
+ if (!as_generator("#ifdef EFL_CXXPERIMENTAL\n").generate(sink, attributes::unused, context))
+ return false;
if (!as_generator(
scope_tab << "template <typename F>\n"
<< scope_tab << "typename std::enable_if<std::is_bind_expression<F>::value, ::efl::eolian::signal_connection>::type\n"
@@ -174,6 +178,9 @@ struct class_definition_generator
<< scope_tab << "}\n")
.generate(sink, std::make_tuple(e.name, e.name), context))
return false;
+ if (!as_generator("#endif\n").generate(sink, attributes::unused, context))
+ return false;
+
if (e.beta && !as_generator("#endif\n").generate(sink, attributes::unused, context))
return false;
if (e.protect && !as_generator("#endif\n").generate(sink, attributes::unused, context))
@@ -192,12 +199,13 @@ struct class_definition_generator
"return ::efl::eo::wref<" << string << ">(*this); }\n"
).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false;
- if(!as_generator("#ifdef EFL_CXX_WREF_EASY\n").generate(sink, attributes::unused, context)) return false;
+ // EXPERIMENTAL
+ if(!as_generator("#ifdef EFL_CXXPERIMENTAL\n").generate(sink, attributes::unused, context)) return false;
if(!as_generator( scope_tab << "const " << string << "* operator->() const { return this; }\n"
).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false;
if(!as_generator( scope_tab << string << "* operator->() { return this; }\n"
).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false;
- if(!as_generator("#endif \n").generate(sink, attributes::unused, context)) return false;
+ if(!as_generator("#endif \n").generate(sink, attributes::unused, context)) return false;
if(!as_generator( scope_tab << "::efl::eo::concrete const& _get_concrete() const { return *this; }\n"
<< scope_tab << "::efl::eo::concrete& _get_concrete() { return *this; }\n"