WWW-www.enlightenment.org pushed a commit to branch master.

http://git.enlightenment.org/website/www-content.git/commit/?id=8159c04ae77d07330401a1e4d2f30dcf9fc447cf

commit 8159c04ae77d07330401a1e4d2f30dcf9fc447cf
Author: Xavi Artigas <xavierarti...@yahoo.es>
Date:   Fri May 25 10:25:48 2018 -0700

    Wiki page eo-multiinherit.md changed with summary [Updated to efl_new] by 
Xavi Artigas
---
 pages/develop/tutorials/c/eo-multiinherit.md.txt | 35 +++++++++++++++++-------
 1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/pages/develop/tutorials/c/eo-multiinherit.md.txt 
b/pages/develop/tutorials/c/eo-multiinherit.md.txt
index 8fcffd3c7..93508fc61 100644
--- a/pages/develop/tutorials/c/eo-multiinherit.md.txt
+++ b/pages/develop/tutorials/c/eo-multiinherit.md.txt
@@ -19,7 +19,7 @@ Allowing a class to have more than one parent has some 
caveats, such as the well
 
 C++, for example, allows you to create such hierarchies but forces you to 
specify which implementation you want to use in ambiguous cases. Most languages 
however solve the diamond problem by imposing restrictions on the classes from 
which you can inherit. These restrictions remove the possibility of ambiguous 
hierarchies and result in arguably cleaner code.
 
-Eolian (and [other languages](https://en.wikipedia.org/wiki/Mixin)) define two 
new kinds of classes, *interfaces* and *mixins* and imposes inheritance rules:
+Eolian (and [other 
languages](https://en.wikipedia.org/wiki/Mixin#Programming_languages_that_use_mixins))
 defines two new kinds of classes, *interfaces* and *mixins* and imposes some 
inheritance rules:
 
 1. You can only *inherit* from one *regular* class, which must be the first 
one in the inheritance list.
  
@@ -29,7 +29,7 @@ Eolian (and [other 
languages](https://en.wikipedia.org/wiki/Mixin)) define two n
 
 *Inherit*, *implement* and *include* all mean *use functionality from a parent 
class*. Using a different word for each kind of parent class helps keep 
ambiguity to a minimum.
 
-Interfaces are like classes but they only define methods and contain no 
implementation. Mixins are classes which contain implementations but they 
cannot be inherited from, only included. Neither is instantiable on its own : 
they are meant to be implemented or included.
+Interfaces are like classes but they only define methods and contain no 
implementation. Mixins are classes which contain implementations but they 
cannot be inherited from, only included. Neither is instantiable on its own: 
they are meant to be implemented or included.
 
 The following steps will clarify these concepts.
 
@@ -158,9 +158,9 @@ Pay careful attention to the ``-I`` switch so it can find 
the new class you are
 
 This means that in the implementation file you will now find:
 
-*An empty method where you must put the implementation for 
``Example.Shape.area()``: ``_example_rectangle_example_shape_area()``.
+* An empty method where you must put the implementation for 
``Example.Shape.area()``: ``_example_rectangle_example_shape_area()``.
 
-*Your previous implementation of the ``Example.Rectangle.area()`` method: 
``_example_rectangle_area()``.
+* Your previous implementation of the ``Example.Rectangle.area()`` method: 
``_example_rectangle_area()``.
 
 Simply move the one-line implementation (``return pd->width * pd->height;``) 
from the old method to the new one, then completely remove the old one.
 
@@ -258,7 +258,7 @@ _example_circle_radius_set(Eo *obj EINA_UNUSED, 
Example_Circle_Data *pd, int rad
 }
 
 EOLIAN static int
-_example_circle_radius_get(Eo *obj EINA_UNUSED , Example_Circle_Data *pd)
+_example_circle_radius_get(const Eo *obj EINA_UNUSED , Example_Circle_Data *pd)
 {
    return pd->radius;
 }
@@ -284,7 +284,7 @@ _circle_create()
 {
    Example_Circle *circle;
 
-   circle = efl_add(EXAMPLE_CIRCLE_CLASS, NULL,
+   circle = efl_new(EXAMPLE_CIRCLE_CLASS,
                     efl_name_set(efl_added, "Circle"),
                     example_circle_radius_set(efl_added, 5));
 
@@ -421,7 +421,7 @@ _example_colored_color_set(Eo *obj EINA_UNUSED, 
Example_Colored_Data *pd,
 }
 
 EOLIAN static void
-_example_colored_color_get(Eo *obj EINA_UNUSED, Example_Colored_Data *pd,
+_example_colored_color_get(const Eo *obj EINA_UNUSED, Example_Colored_Data *pd,
                            int *red, int *green, int *blue)
 {
    if (red)
@@ -435,14 +435,29 @@ _example_colored_color_get(Eo *obj EINA_UNUSED, 
Example_Colored_Data *pd,
 #include "example_colored.eo.c"
 ```
 
-## Step Ten: Using the Mixin ##
+## Step Ten: Including the Mixin ##
+
+Modify ``example_rectangle.eo`` to include the ``Example.Colored`` Mixin. 
There's nothing to do beyond adding the Mixin name in the inheritance list:
+
+```
+class Example.Rectangle (Efl.Object, Example.Shape, Example.Colored) {
+    [...]
+}
+```
+The Mixin provides a new property to the class, and takes care of its 
implementation. ``Example.Rectangle`` (and its derived class 
``Example.Square``) can start using this new property without further work. You 
can now generate the C files as usual:
+
+```bash
+eolian_gen -gchi example_circle.eo -I .
+```
+
+## Step 11: Using the Mixin ##
 
 Modify ``eo_multiinherit_main.c`` to make use of this new functionality. 
There's little to change.
 
 Add a new configuration call to ``example_colored_color_set()`` in the 
creation of the rectangle:
 
 ```c
-   rectangle = efl_add(EXAMPLE_RECTANGLE_CLASS, NULL,
+   rectangle = efl_new(EXAMPLE_RECTANGLE_CLASS,
                        efl_name_set(efl_added, "Rectangle"),
                        example_rectangle_width_set(efl_added, 5),
                        example_rectangle_height_set(efl_added, 10),
@@ -452,7 +467,7 @@ Add a new configuration call to 
``example_colored_color_set()`` in the creation
 Do the same for for the creation of the square:
 
 ```c
-   square = efl_add(EXAMPLE_SQUARE_CLASS, NULL,
+   square = efl_new(EXAMPLE_SQUARE_CLASS,
                     efl_name_set(efl_added, "Square"),
                     example_rectangle_width_set(efl_added, 7),
                     example_colored_color_set(efl_added, 64, 64, 64));

-- 


Reply via email to