eolian: new API: eolian_class_c_get_function_name_get
authorDaniel Kolesa <d.kolesa@samsung.com>
Thu, 2 Oct 2014 10:00:06 +0000 (11:00 +0100)
committerDaniel Kolesa <d.kolesa@samsung.com>
Thu, 2 Oct 2014 10:00:06 +0000 (11:00 +0100)
This allows bindings to easily retrieve name of the C function used to
retrieve the Eo_Class. Also, update the Lua Eolian bindings and generator.

src/bin/elua/modules/lualian.lua
src/bindings/luajit/eolian.lua
src/lib/eolian/Eolian.h
src/lib/eolian/database_class_api.c

index 745c228..d74cb02 100644 (file)
@@ -364,7 +364,6 @@ end
 local Mixin = Node:clone {
     __ctor = function(self, klass, iface, ch, evs)
         self.klass    = klass
-        self.prefix   = klass:eo_prefix_get()
         self.children = ch
         self.events   = evs
         self.is_iface = iface
@@ -386,9 +385,8 @@ local Mixin = Node:clone {
     end,
 
     gen_ffi = function(self, s)
-        local prefix = self.is_iface and "interface" or "mixin"
-        s:write("    const Eo_Class *", self.prefix, "_", prefix,
-            "_get(void);\n")
+        s:write("    const Eo_Class *", self.klass:c_get_function_name_get(),
+            "(void);\n")
         for i, v in ipairs(self.children) do
             v.parent_node = self
             v:gen_ffi(s)
@@ -415,7 +413,6 @@ local Class = Node:clone {
         self.parent     = parent
         self.interfaces = interfaces
         self.mixins     = mixins
-        self.prefix     = klass:eo_prefix_get()
         self.children   = ch
         self.events     = evs
     end,
index 5931741..3e43750 100644 (file)
@@ -249,6 +249,7 @@ ffi.cdef [[
     const char *eolian_event_c_name_get(const Eolian_Event *event);
     Eina_Bool eolian_class_ctor_enable_get(const Eolian_Class *klass);
     Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass);
+    const char *eolian_class_c_get_function_name_get(const Eolian_Class *klass);
     const Eolian_Type *eolian_type_alias_get_by_name(const char *name);
     const Eolian_Type *eolian_type_struct_get_by_name(const char *name);
     const Eolian_Type *eolian_type_enum_get_by_name(const char *name);
@@ -960,6 +961,12 @@ M.Class = ffi.metatype("Eolian_Class", {
 
         dtor_enable_get = function(self)
             return eolian.eolian_class_dtor_enable_get(self) ~= 0
+        end,
+
+        c_get_function_name_get = function(self)
+            local v = eolian.eolian_class_c_get_function_name_get(self)
+            if v == nil then return nil end
+            return ffi_stringshare(v)
         end
     }
 })
index 0fcecd8..4463862 100644 (file)
@@ -1245,6 +1245,18 @@ EAPI Eina_Bool eolian_class_ctor_enable_get(const Eolian_Class *klass);
 EAPI Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass);
 
 /*
+ * @brief Returns the name of the C function used to get the Eo_Class pointer.
+ *
+ * @param[in] klass the class.
+ * @return a stringshare containing the func name or NULL on error.
+ *
+ * You have to delete the stringshare manually.
+ *
+ * @ingroup Eolian
+ */
+EAPI Eina_Stringshare *eolian_class_c_get_function_name_get(const Eolian_Class *klass);
+
+/*
  * @brief Get an alias type by name. Supports namespaces.
  *
  * @param[in] name the name of the alias
index c6f9262..8de2fae 100644 (file)
@@ -174,3 +174,31 @@ eolian_class_dtor_enable_get(const Eolian_Class *cl)
    EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
    return cl->class_dtor_enable;
 }
+
+EAPI Eina_Stringshare *
+eolian_class_c_get_function_name_get(const Eolian_Class *cl)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
+   Eina_Stringshare *ret;
+   Eina_Strbuf *buf = eina_strbuf_new();
+   char *bufp;
+   eina_strbuf_append(buf, cl->full_name);
+   switch (cl->type)
+     {
+      case EOLIAN_CLASS_INTERFACE:
+        eina_strbuf_append(buf, "_interface_get");
+        break;
+      case EOLIAN_CLASS_MIXIN:
+        eina_strbuf_append(buf, "_mixin_get");
+        break;
+      default:
+        eina_strbuf_append(buf, "_class_get");
+        break;
+     }
+   eina_strbuf_replace_all(buf, ".", "_");
+   bufp = eina_strbuf_string_steal(buf);
+   eina_str_tolower(&bufp);
+   ret = eina_stringshare_add(bufp);
+   free(bufp);
+   return ret;
+}