1 /*
2  * Copyright 2019 by its authors. See AUTHORS.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #pragma warning disable 1591
17 
18 using System;
19 using System.Runtime.InteropServices;
20 using System.Runtime.CompilerServices;
21 using System.Collections.Generic;
22 using System.Diagnostics;
23 using System.Diagnostics.CodeAnalysis;
24 using System.Reflection;
25 using System.Threading;
26 using System.Linq;
27 
28 using static Eina.NativeCustomExportFunctions;
29 using EoG = Efl.Eo.Globals;
30 
31 namespace Efl
32 {
33 
34 namespace Eo
35 {
36 
37 internal static class Globals
38 {
39     /// <summary>Represents the type of the native Efl_Class.</summary>
40     internal enum EflClassType
41     {
42         /// <summary>Regular EFL classes.</summary>
43         Regular = 0,
44         /// <summary>Non-instantiable efl classes (i.e. Abstracts).</summary>
45         RegularNoInstant,
46         /// <summary>Interface types.</summary>
47         Interface,
48         /// <summary>Mixins types.</summary>
49         Mixin,
50         /// <summary>Invalid class type.</summary>
51         Invalid
52     }
53 
54     [return: MarshalAs(UnmanagedType.U1)]
efl_object_init_delegate()55     internal delegate bool efl_object_init_delegate();
56     static readonly FunctionWrapper<efl_object_init_delegate> efl_object_init_ptr =
57         new FunctionWrapper<efl_object_init_delegate>(efl.Libs.EoModule, "efl_object_init");
efl_object_init()58     internal static bool efl_object_init() => efl_object_init_ptr.Value.Delegate();
59 
efl_object_shutdown_delegate()60     internal delegate void efl_object_shutdown_delegate();
61     static readonly FunctionWrapper<efl_object_shutdown_delegate> efl_object_shutdown_ptr = new FunctionWrapper<efl_object_shutdown_delegate>(efl.Libs.EoModule, "efl_object_shutdown");
efl_object_shutdown()62     internal static void efl_object_shutdown() => efl_object_shutdown_ptr.Value.Delegate();
63     // [DllImport(efl.Libs.Eo)] internal static extern void efl_object_shutdown();
64 
efl_mono_wrapper_supervisor_get(IntPtr eo)65     [DllImport(efl.Libs.CustomExports)] internal static extern IntPtr efl_mono_wrapper_supervisor_get(IntPtr eo);
efl_mono_wrapper_supervisor_set(IntPtr eo, IntPtr ws)66     [DllImport(efl.Libs.CustomExports)] internal static extern void efl_mono_wrapper_supervisor_set(IntPtr eo, IntPtr ws);
67 
68     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
_efl_add_internal_start([MarshalAs(UnmanagedType.LPStr)] String file, int line, IntPtr klass, IntPtr parent, byte is_ref, byte is_fallback)69         _efl_add_internal_start([MarshalAs(UnmanagedType.LPStr)] String file, int line,
70                                 IntPtr klass, IntPtr parent, byte is_ref, byte is_fallback);
71     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
_efl_add_internal_start_bindings([MarshalAs(UnmanagedType.LPStr)] String file, int line, IntPtr klass, IntPtr parent, byte is_ref, byte is_fallback, IntPtr substitute_ctor, IntPtr data)72         _efl_add_internal_start_bindings([MarshalAs(UnmanagedType.LPStr)] String file, int line, IntPtr klass, IntPtr parent,
73                                          byte is_ref, byte is_fallback, IntPtr substitute_ctor, IntPtr data);
74     internal delegate  IntPtr
_efl_add_end_delegate(IntPtr eo, byte is_ref, byte is_fallback)75         _efl_add_end_delegate(IntPtr eo, byte is_ref, byte is_fallback);
76     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
_efl_add_end(IntPtr eo, byte is_ref, byte is_fallback)77         _efl_add_end(IntPtr eo, byte is_ref, byte is_fallback);
78     internal delegate  IntPtr
efl_ref_delegate(IntPtr eo)79         efl_ref_delegate(IntPtr eo);
80     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_ref(IntPtr eo)81         efl_ref(IntPtr eo);
82     internal delegate  void
efl_unref_delegate(IntPtr eo)83         efl_unref_delegate(IntPtr eo);
84     [DllImport(efl.Libs.CustomExports)] internal static extern void
efl_unref(IntPtr eo)85         efl_unref(IntPtr eo);
86     internal delegate  int
efl_ref_count_delegate(IntPtr eo)87         efl_ref_count_delegate(IntPtr eo);
88     [DllImport(efl.Libs.Eo)] internal static extern int
efl_ref_count(IntPtr eo)89         efl_ref_count(IntPtr eo);
90     [DllImport(efl.Libs.CustomExports)] internal static extern void
efl_mono_wrapper_supervisor_callbacks_set(Efl.FreeWrapperSupervisorCb freeWrapperSupervisorCb)91         efl_mono_wrapper_supervisor_callbacks_set(Efl.FreeWrapperSupervisorCb freeWrapperSupervisorCb);
92     [DllImport(efl.Libs.CustomExports)] internal static extern void
efl_mono_native_dispose(IntPtr eo)93         efl_mono_native_dispose(IntPtr eo);
94     [DllImport(efl.Libs.CustomExports)] internal static extern void
efl_mono_thread_safe_native_dispose(IntPtr eo)95         efl_mono_thread_safe_native_dispose(IntPtr eo);
96     [DllImport(efl.Libs.CustomExports)] internal static extern void
efl_mono_thread_safe_efl_unref(IntPtr eo)97         efl_mono_thread_safe_efl_unref(IntPtr eo);
98 
99     [DllImport(efl.Libs.CustomExports)] internal static extern void
efl_mono_thread_safe_free_cb_exec(IntPtr free_cb, IntPtr cb_data)100         efl_mono_thread_safe_free_cb_exec(IntPtr free_cb, IntPtr cb_data);
101 
102     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_name_get(IntPtr eo)103         efl_class_name_get(IntPtr eo);
104     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr term)105         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr term);
106     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr term)107         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr term);
108     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr term)109         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr term);
110     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr term)111         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr term);
112     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr term)113         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr term);
114     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr term)115         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr term);
116     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr term)117         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr term);
118     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr term)119         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr term);
120     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr term)121         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr term);
122     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr term)123         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr term);
124     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr term)125         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr term);
126     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr term)127         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr term);
128     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr term)129         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr term);
130     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr term)131         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr term);
132     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr term)133         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr term);
134     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr term)135         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr term);
136     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr term)137         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr term);
138     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr term)139         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr term);
140     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr term)141         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr term);
142     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr term)143         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr term);
144     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr term)145         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr term);
146     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr term)147         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr term);
148     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr term)149         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr term);
150     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr term)151         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr term);
152     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr term)153         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr term);
154     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr term)155         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr term);
156     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr term)157         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr term);
158     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr term)159         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr term);
160     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr term)161         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr term);
162     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr term)163         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr term);
164     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr term)165         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr term);
166     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr term)167         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr term);
168     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr term)169         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr term);
170     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr term)171         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr term);
172     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr term)173         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr term);
174     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr term)175         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr term);
176     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr term)177         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr term);
178     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr term)179         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr term);
180     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr term)181         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr term);
182     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr term)183         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr term);
184     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr term)185         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr term);
186     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr term)187         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr term);
188     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr term)189         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr term);
190     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr term)191         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr term);
192     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr term)193         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr term);
194     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr term)195         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr term);
196     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr term)197         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr term);
198     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr extn47, IntPtr term)199         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr extn47, IntPtr term);
200     [DllImport(efl.Libs.Eo)] internal static extern IntPtr
efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr extn47, IntPtr extn48, IntPtr term)201         efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr extn47, IntPtr extn48, IntPtr term);
202 
efl_class_functions_set_delegate(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops)203     internal delegate  byte efl_class_functions_set_delegate(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops);
efl_class_functions_set(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops)204     [DllImport(efl.Libs.Eo)] internal static extern byte efl_class_functions_set(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops);
efl_data_scope_get_delegate(IntPtr obj, IntPtr klass)205     internal delegate  IntPtr efl_data_scope_get_delegate(IntPtr obj, IntPtr klass);
efl_data_scope_get(IntPtr obj, IntPtr klass)206     [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_data_scope_get(IntPtr obj, IntPtr klass);
efl_super_delegate(IntPtr obj, IntPtr klass)207     internal delegate  IntPtr efl_super_delegate(IntPtr obj, IntPtr klass);
208 
209     /// <summary>Gets a native pointer to <c>obj</c> that forwards the method call to its parent
210     /// implementation.
211     ///
212     /// <para>For generated code use only.</para>
213     /// <para>Since EFL 1.23.</para>
214     /// </summary>
215     /// <param name="obj">The native pointer to be prepared.</param>
216     /// <param name="klass">The current class.</param>
217     /// <returns>The native pointer to <c>obj</c> prepared to call the parent implementation of <c>klass</c>.</returns>
Super(IntPtr obj, IntPtr klass)218     internal static IntPtr Super(IntPtr obj, IntPtr klass)
219     {
220         return efl_super(obj, klass);
221     }
222 
efl_super(IntPtr obj, IntPtr klass)223     [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_super(IntPtr obj, IntPtr klass);
efl_class_get_delegate(IntPtr obj)224     internal delegate  IntPtr efl_class_get_delegate(IntPtr obj);
efl_class_get(IntPtr obj)225     [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_get(IntPtr obj);
226 
227     /// <summary>Gets the native EO class pointer for the given object.
228     /// <para>For generated code use only.</para>
229     /// <para>Since EFL 1.23.</para>
230     /// </summary>
231     /// <param name="obj">The native pointer to the <see cref="Efl.Object" /> instance to get the native class
232     /// from.</param>
233     /// <returns>The native class pointer or <see cref="IntPtr.Zero" /> if no such class existis.</returns>
GetClass(IntPtr obj)234     internal static IntPtr GetClass(IntPtr obj)
235     {
236         return efl_class_get(obj);
237     }
238 
efl_class_type_get(IntPtr klass)239     [DllImport(efl.Libs.Eo)] internal static extern EflClassType efl_class_type_get(IntPtr klass);
dlerror_delegate()240     internal delegate  IntPtr dlerror_delegate();
dlerror()241     [DllImport(efl.Libs.Evil)] internal static extern IntPtr dlerror();
242 
efl_constructor(IntPtr obj)243     [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_constructor(IntPtr obj);
244 
efl_mono_avoid_top_level_constructor_callback_addr_get()245     [DllImport(efl.Libs.CustomExports)] internal static extern IntPtr efl_mono_avoid_top_level_constructor_callback_addr_get();
246 
247     [DllImport(efl.Libs.Eo)] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool
efl_event_callback_priority_add(IntPtr obj, IntPtr desc, short priority, IntPtr cb, IntPtr data)248         efl_event_callback_priority_add(IntPtr obj, IntPtr desc, short priority, IntPtr cb, IntPtr data);
249 
250     [DllImport(efl.Libs.Eo)] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool
efl_event_callback_del(IntPtr obj, IntPtr desc, IntPtr cb, IntPtr data)251         efl_event_callback_del(IntPtr obj, IntPtr desc, IntPtr cb, IntPtr data);
252 
253     [DllImport(efl.Libs.Eo)] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool
efl_event_callback_call(IntPtr obj, IntPtr desc, IntPtr event_info)254         efl_event_callback_call(IntPtr obj, IntPtr desc, IntPtr event_info);
255 
256     /// <summary>Calls the callbacks associated to an event.
257     /// <para>For generated code use only.</para>
258     /// <para>Since EFL 1.23.</para>
259     /// </summary>
260     /// <param name="obj">The native pointer to the <see cref="Efl.Object" /> instance that will be the emitter
261     /// of the event.</param>
262     /// <param name="desc">The native event description.</param>
263     /// <param name="event_info">The native payload of the event.</param>
264     /// <returns><c>false</c> if one of the callbacks aborted the call. <c>true</c> otherwise.</returns>
CallEventCallback(IntPtr obj, IntPtr desc, IntPtr event_info)265     internal static bool CallEventCallback(IntPtr obj, IntPtr desc, IntPtr event_info)
266     {
267         return efl_event_callback_call(obj, desc, event_info);
268     }
269 
270     internal const int RTLD_NOW = 2;
271 
class_initializer(IntPtr klass)272     internal delegate byte class_initializer(IntPtr klass);
273 
274     internal static T GetParamHelper<T>(Nullable<T> v) where T : struct
275     {
276         return v.Value;
277     }
278 
GetParamHelper(U v)279     internal static U GetParamHelper<U>(U v)
280     {
281         return v;
282     }
283 
284     internal static bool ParamHelperCheck<T>(Nullable<T> v) where T : struct
285     {
286         return v.HasValue;
287     }
288 
ParamHelperCheck(U v)289     internal static bool ParamHelperCheck<U>(U v)
290     {
291         return v != null;
292     }
293 
register_class(String class_name, IntPtr base_klass, System.Type type)294     internal static IntPtr register_class(String class_name, IntPtr base_klass, System.Type type)
295     {
296         ClassDescription description;
297         description.version = 2; // EO_VERSION
298         description.name = class_name;
299         description.class_type = 0; // REGULAR
300         description.data_size = (UIntPtr)0;
301         description.class_initializer = IntPtr.Zero;
302         description.class_constructor = IntPtr.Zero;
303         description.class_destructor = IntPtr.Zero;
304 
305         class_initializer init = (IntPtr kls) =>
306         {
307             return Globals.class_initializer_call(kls, type);
308         };
309 
310         description.class_initializer = Marshal.GetFunctionPointerForDelegate(init);
311 
312         IntPtr description_ptr = Eina.MemoryNative.Alloc(Marshal.SizeOf(description));
313         Marshal.StructureToPtr(description, description_ptr, false);
314 
315         // FIXME: description_ptr seems to be leaking memory even after an eo_shutdown
316 
317         var interface_list = EoG.get_efl_interfaces(type);
318 
319         Eina.Log.Debug($"Going to register new class named {class_name}");
320         IntPtr klass = EoG.call_efl_class_new(description_ptr, base_klass, interface_list);
321         if (klass == IntPtr.Zero)
322         {
323             Eina.Log.Error("klass was not registered");
324         }
325         else
326         {
327             Eina.Log.Debug("Registered class successfully");
328         }
329 
330         return klass;
331     }
332 
get_efl_interfaces(System.Type type)333     internal static List<IntPtr> get_efl_interfaces(System.Type type)
334     {
335         System.Type base_type = type.BaseType;
336 
337         var ifaces_lst = new List<IntPtr>();
338         var base_ifaces = base_type.GetInterfaces();
339         var ifaces = type.GetInterfaces();
340         foreach (var iface in ifaces)
341         {
342             if (!System.Array.Exists(base_ifaces, element => element == iface))
343             {
344                 var attrs = System.Attribute.GetCustomAttributes(iface);
345                 foreach (var attr in attrs)
346                 {
347                     if (attr is Efl.Eo.NativeClass)
348                     {
349                         ifaces_lst.Add(((Efl.Eo.NativeClass)attr).GetEflClass());
350                         break;
351                     }
352                 }
353             }
354         }
355 
356         return ifaces_lst;
357     }
358 
GetNativeClass(System.Type type)359     private static Efl.Eo.NativeClass GetNativeClass(System.Type type)
360     {
361         var attrs = System.Attribute.GetCustomAttributes(type, false);
362         foreach (var attr in attrs)
363         {
364             if (attr is Efl.Eo.NativeClass)
365             {
366                 return (Efl.Eo.NativeClass)attr;
367             }
368         }
369 
370         return null;
371     }
372 
373     internal static System.Collections.Generic.List<string>
GetUserMethods(System.Type type)374         GetUserMethods(System.Type type)
375     {
376         var r = new System.Collections.Generic.List<string>();
377         var flags =
378             System.Reflection.BindingFlags.Instance
379             | System.Reflection.BindingFlags.DeclaredOnly
380             | System.Reflection.BindingFlags.Public
381             | System.Reflection.BindingFlags.NonPublic;
382 
383         for (var base_type = type;;base_type = base_type.BaseType)
384         {
385             r.AddRange(base_type.GetMethods(flags)
386                        .AsParallel().Select(info=>info.Name).ToList());
387             if (IsGeneratedClass(base_type.BaseType))
388             {
389                 break;
390             }
391 
392             if (base_type.BaseType == null)
393             {
394                 break;
395             }
396         }
397 
398         return r;
399     }
400 
class_initializer_call(IntPtr klass, System.Type type)401     internal static byte class_initializer_call(IntPtr klass, System.Type type)
402     {
403         Eina.Log.Debug($"called with 0x{klass.ToInt64():x} {type}");
404         var derived = type.BaseType;
405         Efl.Eo.NativeClass nativeClass = GetNativeClass(derived);
406 
407         while (nativeClass == null)
408         {
409             derived = derived.BaseType;
410             if (derived == null)
411                 break;
412             nativeClass = GetNativeClass(derived);
413         }
414 
415         if (nativeClass != null)
416         {
417             Eina.Log.Debug("nativeClass != null");
418             var descs = nativeClass.GetEoOps(type, true);
419             var count = descs.Count;
420             IntPtr descs_ptr = IntPtr.Zero;
421 
422             if (count > 0)
423             {
424                 descs_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(descs[0]) * count);
425             }
426 
427             IntPtr ptr = descs_ptr;
428             for (int i = 0; i != count; ++i)
429             {
430                Marshal.StructureToPtr(descs[i], ptr, false);
431                ptr = IntPtr.Add(ptr, Marshal.SizeOf(descs[0]));
432             }
433 
434             EflObjectOps ops;
435             ops.descs = descs_ptr;
436             ops.count = (UIntPtr)count;
437             IntPtr ops_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ops));
438             Marshal.StructureToPtr(ops, ops_ptr, false);
439             Efl.Eo.Globals.efl_class_functions_set(klass, ops_ptr, IntPtr.Zero);
440             //EoKlass = klass;
441         }
442         else
443         {
444             Eina.Log.Debug("nativeClass == null");
445         }
446 
447        return 1;
448     }
449 
call_efl_class_new(IntPtr desc, IntPtr bk, List<IntPtr> il = null)450     internal static IntPtr call_efl_class_new(IntPtr desc, IntPtr bk, List<IntPtr> il = null)
451     {
452         IntPtr nul = IntPtr.Zero;
453         int iface_list_count = (il == null ? 0 : il.Count);
454         switch (iface_list_count)
455         {
456             default: return nul;
457             case  0: return EoG.efl_class_new(desc, bk, nul);
458             case  1: return EoG.efl_class_new(desc, bk, il[0], nul);
459             case  2: return EoG.efl_class_new(desc, bk, il[0], il[1], nul);
460             case  3: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], nul);
461             case  4: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], nul);
462             case  5: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], nul);
463             case  6: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], nul);
464             case  7: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], nul);
465             case  8: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], nul);
466             case  9: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], nul);
467             case 10: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], nul);
468             case 11: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], nul);
469             case 12: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], nul);
470             case 13: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], nul);
471             case 14: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], nul);
472             case 15: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], nul);
473             case 16: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], nul);
474             case 17: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], nul);
475             case 18: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], nul);
476             case 19: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], nul);
477             case 20: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], nul);
478             case 21: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], nul);
479             case 22: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], nul);
480             case 23: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], nul);
481             case 24: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], nul);
482             case 25: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], nul);
483             case 26: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], nul);
484             case 27: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], nul);
485             case 28: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], nul);
486             case 29: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], nul);
487             case 30: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], nul);
488             case 31: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], nul);
489             case 32: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], nul);
490             case 33: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], nul);
491             case 34: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], nul);
492             case 35: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], nul);
493             case 36: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], nul);
494             case 37: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], nul);
495             case 38: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], nul);
496             case 39: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], nul);
497             case 40: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], nul);
498             case 41: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], nul);
499             case 42: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], nul);
500             case 43: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], nul);
501             case 44: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], il[43], nul);
502             case 45: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], il[43], il[44], nul);
503             case 46: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], il[43], il[44], il[45], nul);
504             case 47: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], il[43], il[44], il[45], il[46], nul);
505             case 48: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], il[43], il[44], il[45], il[46], il[47], nul);
506         }
507     }
508 
WrapperSupervisorPtrToManaged(IntPtr wsPtr)509     internal static Efl.Eo.WrapperSupervisor WrapperSupervisorPtrToManaged(IntPtr wsPtr)
510     {
511         return (Efl.Eo.WrapperSupervisor) GCHandle.FromIntPtr(wsPtr).Target;
512     }
513 
GetWrapperSupervisor(IntPtr eo)514     internal static Efl.Eo.WrapperSupervisor GetWrapperSupervisor(IntPtr eo)
515     {
516         var wsPtr = Efl.Eo.Globals.efl_mono_wrapper_supervisor_get(eo);
517         if (wsPtr == IntPtr.Zero)
518         {
519             return null;
520         }
521 
522         return WrapperSupervisorPtrToManaged(wsPtr);
523     }
524 
SetWrapperSupervisor(IntPtr eo, Efl.Eo.WrapperSupervisor ws)525     internal static void SetWrapperSupervisor(IntPtr eo, Efl.Eo.WrapperSupervisor ws)
526     {
527         GCHandle gch = GCHandle.Alloc(ws);
528         Efl.Eo.Globals.efl_mono_wrapper_supervisor_set(eo, GCHandle.ToIntPtr(gch));
529     }
530 
free_dict_values(Dictionary<String, IntPtr> dict)531     internal static void free_dict_values(Dictionary<String, IntPtr> dict)
532     {
533         foreach (IntPtr ptr in dict.Values)
534         {
535             Eina.MemoryNative.Free(ptr);
536         }
537     }
538 
free_stringshare_values(Dictionary<String, IntPtr> dict)539     internal static void free_stringshare_values(Dictionary<String, IntPtr> dict)
540     {
541         foreach (IntPtr ptr in dict.Values)
542         {
543             Eina.NativeMethods.eina_stringshare_del(ptr);
544         }
545     }
546 
free_gchandle(IntPtr ptr)547     internal static void free_gchandle(IntPtr ptr)
548     {
549         GCHandle handle = GCHandle.FromIntPtr(ptr);
550         handle.Free();
551     }
552 
WrapAsync(Eina.Future future, CancellationToken token)553     internal static System.Threading.Tasks.Task<Eina.Value> WrapAsync(Eina.Future future, CancellationToken token)
554     {
555         // Creates a task that will wait for SetResult for completion.
556         // TaskCompletionSource is used to create tasks for 'external' Task sources.
557         var tcs = new System.Threading.Tasks.TaskCompletionSource<Eina.Value>();
558 
559         // Flag to be passed to the cancell callback
560         bool fulfilled = false;
561 
562         future.Then((Eina.Value received) =>
563         {
564             lock (future)
565             {
566                 // Convert an failed Future to a failed Task.
567                 if (received.GetValueType() == Eina.ValueType.Error)
568                 {
569                     Eina.Error err;
570                     received.Get(out err);
571                     if (err == Eina.Error.ECANCELED)
572                     {
573                         tcs.SetCanceled();
574                     }
575                     else
576                     {
577                         tcs.TrySetException(new Efl.FutureException(err));
578                     }
579                 }
580                 else
581                 {
582                     // Async receiver methods may consume the value C# wrapper, like when awaiting in the start of an
583                     // using block. In order to continue to forward the value correctly to the next futures
584                     // in the chain, we give the Async wrapper a copy of the received wrapper.
585                     tcs.SetResult(new Eina.Value(received));
586                 }
587 
588                 fulfilled = true;
589                 return received;
590             }
591         });
592         // Callback to be called when the token is cancelled.
593         token.Register(() =>
594         {
595             lock (future)
596             {
597                 // Will trigger the Then callback above with an Eina.Error
598                 if (!fulfilled)
599                 {
600                     future.Cancel();
601                 }
602             }
603         });
604 
605         return tcs.Task;
606     }
607 
608     /// <summary>Returns whether the given type was generated by eolian-mono</summary>
609     /// <param name="managedType">The type to check.</param>
610     /// <returns>True if generated by eolian-mono. False otherwise.</returns>
IsGeneratedClass(System.Type managedType)611     private static bool IsGeneratedClass(System.Type managedType)
612     {
613         return GetNativeClass(managedType) != null;
614     }
615 
616     /// <summary>Creates a new wrapper for the given Eo id.
617     ///
618     /// <para>If the Eo have a WrapperSupervisor, it returns the C# instance handle stored in its
619     /// WrapperSupervisor. otherwise, we use reflection to get the correct C# type to re-wrap it.</para>
620     /// </summary>
621     ///
622     /// <param name="handle">The Eo id to be wrapped.</param>
623     /// <param name="shouldIncRef">Whether we should increase the refcount of the Eo instance.</param>
624     /// <returns>The C# wrapper for this instance.</returns>
CreateWrapperFor(System.IntPtr handle, bool shouldIncRef=true)625     internal static Efl.Eo.IWrapper CreateWrapperFor(System.IntPtr handle, bool shouldIncRef=true)
626     {
627 
628         if (handle == IntPtr.Zero)
629         {
630             return null;
631         }
632 
633         Efl.Eo.Globals.efl_ref(handle);
634         try
635         {
636             var ws = Efl.Eo.Globals.GetWrapperSupervisor(handle);
637             if (ws != null && ws.Target != null)
638             {
639                 if (!shouldIncRef)
640                 {
641                     Efl.Eo.Globals.efl_unref(handle);
642                 }
643 
644                 return ws.Target;
645             }
646 
647             IntPtr eoKlass = efl_class_get(handle);
648 
649             if (eoKlass == IntPtr.Zero)
650             {
651                 throw new InvalidOperationException($"Can't get Eo class for object handle 0x{handle.ToInt64():x}");
652             }
653 
654             var managedType = ClassRegister.GetManagedType(eoKlass);
655 
656             if (managedType == null)
657             {
658                 IntPtr nativeName = efl_class_name_get(eoKlass);
659                 var name = Eina.StringConversion.NativeUtf8ToManagedString(nativeName);
660 
661                 throw new InvalidOperationException($"Can't get Managed class for object handle 0x{handle.ToInt64():x} with native class [{name}]");
662             }
663 
664             Debug.Assert(IsGeneratedClass(managedType));
665             System.Reflection.ConstructorInfo constructor = null;
666 
667             try
668             {
669                 var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
670                 constructor = managedType.GetConstructor(flags, null, new Type[1] { typeof(WrappingHandle) }, null);
671             }
672             catch (InvalidOperationException)
673             {
674                 throw new InvalidOperationException($"Can't get constructor for type {managedType}");
675             }
676 
677             WrappingHandle wh = new WrappingHandle(handle);
678             var ret = (Efl.Eo.IWrapper) constructor.Invoke(new object[1] { wh });
679 
680             if (ret == null)
681             {
682                 throw new InvalidOperationException($"Can't construct type {managedType} from IntPtr handle");
683             }
684 
685             if (shouldIncRef)
686             {
687                 Efl.Eo.Globals.efl_ref(handle);
688             }
689 
690             return ret;
691         }
692         finally
693         {
694             Efl.Eo.Globals.efl_unref(handle);
695         }
696     }
697 
698     private static Efl.FreeWrapperSupervisorCb FreeWrapperSupervisorCallbackDelegate = new Efl.FreeWrapperSupervisorCb(FreeWrapperSupervisorCallback);
FreeWrapperSupervisorCallback(IntPtr eo)699     internal static void FreeWrapperSupervisorCallback(IntPtr eo)
700     {
701         try
702         {
703             var wsPtr = Efl.Eo.Globals.efl_mono_wrapper_supervisor_get(eo);
704             if (wsPtr == IntPtr.Zero)
705             {
706                 Eina.Log.Error($"Invalid wrapper supervisor [Eo pointer: {eo.ToInt64():x}]");
707                 return;
708             }
709 
710             Efl.Eo.Globals.efl_mono_wrapper_supervisor_set(eo, IntPtr.Zero);
711 
712             GCHandle gch = GCHandle.FromIntPtr(wsPtr);
713             var ws = (Efl.Eo.WrapperSupervisor) gch.Target;
714             foreach (var item in ws.EoEvents)
715             {
716                 if (!efl_event_callback_del(eo, item.Key.desc, item.Value.evtCallerPtr, wsPtr))
717                 {
718                     Eina.Log.Error($"Failed to remove event proxy for event {item.Key.desc} [eo: {eo.ToInt64():x}; cb: {item.Value.evtCallerPtr.ToInt64():x}]");
719                 }
720             }
721 
722             // Free the native eo
723             Efl.Eo.Globals.efl_unref(eo);
724 
725             // now the WrapperSupervisor can be collected, and so its member:
726             //     - the event dictionary
727             //     - and the EoWrapper if it is still pinned
728             gch.Free();
729         }
730         catch (Exception e)
731         {
732             Eina.Log.Error(e.ToString());
733             Eina.Error.Set(Eina.Error.UNHANDLED_EXCEPTION);
734         }
735     }
736 
SetNativeDisposeCallbacks()737     internal static void SetNativeDisposeCallbacks()
738     {
739         efl_mono_wrapper_supervisor_callbacks_set(FreeWrapperSupervisorCallbackDelegate);
740     }
741 
ThreadSafeFreeCbExec(Eina.Callbacks.EinaFreeCb cbFreeCb, IntPtr cbData)742     internal static void ThreadSafeFreeCbExec(Eina.Callbacks.EinaFreeCb cbFreeCb, IntPtr cbData)
743     {
744         Eina.Callbacks.EinaFreeCb cb = (IntPtr gcHandlePtr) => {
745             cbFreeCb(cbData);
746             GCHandle gcHandle = GCHandle.FromIntPtr(gcHandlePtr);
747             gcHandle.Free();
748         };
749 
750         Monitor.Enter(Efl.All.InitLock);
751         if (Efl.All.MainLoopInitialized)
752         {
753             IntPtr cbPtr = Marshal.GetFunctionPointerForDelegate(cb);
754             var handle = GCHandle.Alloc(cb);
755             var handlePtr = GCHandle.ToIntPtr(handle);
756 
757             efl_mono_thread_safe_free_cb_exec(cbPtr, handlePtr);
758         }
759         Monitor.Exit(Efl.All.InitLock);
760     }
761 
AccessorToIEnumerable(IntPtr accessor)762     internal static IEnumerable<T> AccessorToIEnumerable<T>(IntPtr accessor)
763     {
764         if (accessor == IntPtr.Zero)
765            throw new ArgumentException("accessor is null", nameof(accessor));
766 
767         IntPtr data = IntPtr.Zero;
768         uint position = 0;
769 
770         while (Eina.AccessorNativeFunctions.eina_accessor_data_get(accessor, position, out data))
771         {
772             yield return Eina.TraitFunctions.NativeToManaged<T>(data);
773             position += 1;
774         }
775     }
776 
IEnumerableToAccessor(IEnumerable<T> enumerable, bool isMoved)777     internal static IntPtr IEnumerableToAccessor<T>(IEnumerable<T> enumerable, bool isMoved)
778     {
779         if (enumerable == null)
780         {
781             throw new ArgumentException("enumerable is null", nameof(enumerable));
782         }
783 
784         // If we are a wrapper around an existing Eina.Accessor, we can just forward
785         // it and avoid unnecessary copying in non-owning transfers.
786         var wrappedAccessor = enumerable as Eina.Accessor<T>;
787 
788         if (wrappedAccessor != null && !isMoved)
789         {
790             return wrappedAccessor.Handle;
791         }
792 
793         // TODO: Check if we're either an Eina.List or Eina.Collection?
794         // We could just rewrap their native accessors
795         IntPtr[] intPtrs = new IntPtr[enumerable.Count()];
796 
797         int i = 0;
798         foreach (T data in enumerable)
799         {
800             intPtrs[i] = Eina.TraitFunctions.ManagedToNativeAlloc<T>(data);
801             i++;
802         }
803 
804         GCHandle pinnedArray = GCHandle.Alloc(intPtrs, GCHandleType.Pinned);
805         IntPtr nativeAccessor = IntPtr.Zero;
806 
807         if (isMoved)
808         {
809             // We need a custom accessor that would unpin the data when freed.
810             nativeAccessor = Eina.AccessorNativeFunctions.eina_mono_owned_carray_length_accessor_new(pinnedArray.AddrOfPinnedObject(),
811                                                                                                      (uint)IntPtr.Size,
812                                                                                                      (uint)intPtrs.Length,
813                                                                                                      free_gchandle,
814                                                                                                      GCHandle.ToIntPtr(pinnedArray));
815         }
816         else
817         {
818             // FIXME: Leaking....
819             nativeAccessor = Eina.AccessorNativeFunctions.eina_carray_length_accessor_new(pinnedArray.AddrOfPinnedObject(),
820                                                                                           (uint)(IntPtr.Size),
821                                                                                           (uint)intPtrs.Length);
822         }
823 
824         if (nativeAccessor == IntPtr.Zero)
825         {
826             pinnedArray.Free();
827             throw new InvalidOperationException("Failed to get native accessor for the given container");
828         }
829 
830         return nativeAccessor;
831     }
832 
IteratorToIEnumerable(IntPtr iterator)833     internal static IEnumerable<T> IteratorToIEnumerable<T>(IntPtr iterator)
834     {
835         if (iterator == IntPtr.Zero)
836            throw new ArgumentException("iterator is null", nameof(iterator));
837 
838         while (Eina.IteratorNativeFunctions.eina_iterator_next(iterator, out IntPtr data))
839         {
840             yield return Eina.TraitFunctions.NativeToManaged<T>(data);
841         }
842     }
843 
IEnumerableToIterator(IEnumerable<T> enumerable, bool isMoved)844     internal static IntPtr IEnumerableToIterator<T>(IEnumerable<T> enumerable, bool isMoved)
845     {
846         if (enumerable == null)
847         {
848             throw new ArgumentException("enumerable is null", nameof(enumerable));
849         }
850 
851         // If we are a wrapper around an existing Eina.Iterator, we can just forward
852         // it and avoid unnecessary copying in non-owning transfers.
853         var wrappedIterator = enumerable as Eina.Iterator<T>;
854 
855         if (wrappedIterator != null && !isMoved)
856         {
857             return wrappedIterator.Handle;
858         }
859 
860         var list = new List<IntPtr>();
861         foreach (T data in enumerable)
862         {
863             list.Add(Eina.TraitFunctions.ManagedToNativeAlloc<T>(data));
864         }
865 
866         IntPtr[] dataArray = list.ToArray();
867         GCHandle pinnedArray = GCHandle.Alloc(dataArray, GCHandleType.Pinned);
868         IntPtr ret = Eina.IteratorNativeFunctions.eina_carray_length_iterator_new(pinnedArray.AddrOfPinnedObject(), (uint)(IntPtr.Size), (uint)dataArray.Length);
869 
870         if (!isMoved)
871         {
872             // FIXME Need to free ret and unpin pinnedArray in the future.
873         }
874 
875         return ret;
876     }
877 
NativeListToIList(IntPtr nativeList)878     internal static IList<T> NativeListToIList<T>(IntPtr nativeList)
879     {
880         if (nativeList == IntPtr.Zero)
881             throw new ArgumentException("nativeList is null", nameof(nativeList));
882 
883         IntPtr l;
884         List<T> list = new List<T>();
885         for (l = nativeList; l != IntPtr.Zero; l = Eina.ListNativeFunctions.eina_list_next_custom_export_mono(l))
886         {
887             list.Add(Eina.TraitFunctions.NativeToManaged<T>(Eina.ListNativeFunctions.eina_list_data_get_custom_export_mono(l)));
888         }
889         return list;
890     }
891 
IListToNativeList(IList<T> list, bool isMoved)892     internal static IntPtr IListToNativeList<T>(IList<T> list, bool isMoved)
893     {
894         if (list == null)
895             throw new ArgumentException("list is null", nameof(list));
896 
897         // If we are a wrapper around an existing Eina.List, we can just forward
898         // it and avoid unnecessary copying in non-owning transfers.
899         var wrappedList = list as Eina.List<T>;
900 
901         if (wrappedList != null && !isMoved)
902         {
903             return wrappedList.Handle;
904         }
905 
906         IntPtr nativeList = IntPtr.Zero;
907         foreach (T data in list)
908         {
909             nativeList = Eina.ListNativeFunctions.eina_list_append(nativeList, Eina.TraitFunctions.ManagedToNativeAlloc(data)); //FIXME: need to free
910         }
911 
912         if (!isMoved)
913         {
914             // FIXME Need to free ret and unpin pinnedArray in the future.
915         }
916 
917         return nativeList;
918     }
919 
NativeArrayToIList(IntPtr nativeArray)920     internal static IList<T> NativeArrayToIList<T>(IntPtr nativeArray)
921     {
922         if (nativeArray == IntPtr.Zero)
923             throw new ArgumentException("nativeArray is null", nameof(nativeArray));
924 
925         List<T> list = new List<T>();
926         UpdateListFromNativeArray(list, nativeArray);
927 
928         // FIXME need to free `list` if the returned list is not @moved
929         return list;
930     }
931 
IListToNativeArray(IList<T> list, bool isMoved)932     internal static IntPtr IListToNativeArray<T>(IList<T> list, bool isMoved)
933     {
934         if (list == null)
935             throw new ArgumentException("list is null", nameof(list));
936 
937         // If we are a wrapper around an existing Eina.Array, we can just forward
938         // it and avoid unnecessary copying in non-owning transfers.
939         var wrappedArray = list as Eina.Array<T>;
940 
941         if (wrappedArray != null && !isMoved)
942         {
943             return wrappedArray.Handle;
944         }
945 
946         IntPtr nativeArray = Eina.ArrayNativeFunctions.eina_array_new(4);
947         foreach (T data in list)
948         {
949             Eina.ArrayNativeFunctions.eina_array_push_custom_export_mono(nativeArray, Eina.TraitFunctions.ManagedToNativeAlloc(data)); //FIXME: need to free
950         }
951 
952         if (!isMoved)
953         {
954             // FIXME Need to free ret and unpin pinnedArray in the future.
955         }
956 
957         return nativeArray;
958     }
959 
UpdateListFromNativeArray(IList<T> list, IntPtr nativeArray)960     internal static void UpdateListFromNativeArray<T>(IList<T> list, IntPtr nativeArray)
961     {
962         // Do not update if list Handle is same to nativeArray. They already updated in native code.
963         var wrappedArray = list as Eina.Array<T>;
964         if (wrappedArray != null && wrappedArray.Handle == nativeArray)
965             return;
966 
967         list.Clear();
968         if (nativeArray == IntPtr.Zero)
969         {
970             return;
971         }
972 
973         uint count = Eina.ArrayNativeFunctions.eina_array_count_custom_export_mono(nativeArray);
974         for (uint i = 0; i < count; i++)
975         {
976             list.Add(Eina.TraitFunctions.NativeToManaged<T>(Eina.ArrayNativeFunctions.eina_array_data_get_custom_export_mono(nativeArray, i)));
977         }
978     }
979 
980 } // Globals
981 
982 /// <summary>
983 /// Internal struct used by the binding to pass the native handle pointer
984 /// to the managed object wrapping constructor.
985 /// Internal usage only: do not use this class in inherited classes.
986 /// </summary>
987 internal struct WrappingHandle
988 {
WrappingHandleEfl.Eo.WrappingHandle989     public WrappingHandle(IntPtr h)
990     {
991         NativeHandle = h;
992     }
993 
994     public IntPtr NativeHandle { get; private set; }
995 }
996 
997 /// <summary>
998 /// Manage the initialization and cleanup for the Efl object subsystem.
999 /// <para>Since EFL 1.24.</para>
1000 /// </summary>
1001 public static class Config
1002 {
1003     /// <summary>
1004     /// Initialize the EFL object subsystem.
1005     /// <para>Since EFL 1.24.</para>
1006     /// </summary>
Init()1007     public static void Init()
1008     {
1009         Globals.efl_object_init();
1010         Globals.SetNativeDisposeCallbacks();
1011     }
1012 
1013     /// <summary>
1014     /// Shutdown the EFL object subsystem.
1015     /// <para>Since EFL 1.24.</para>
1016     /// </summary>
Shutdown()1017     public static void Shutdown()
1018     {
1019         Globals.efl_object_shutdown();
1020     }
1021 }
1022 
1023 [System.AttributeUsage(System.AttributeTargets.Class |
1024                        System.AttributeTargets.Interface,
1025                        AllowMultiple = false,
1026                        Inherited = false)
1027 ]
1028 abstract class NativeClass : System.Attribute
1029 {
GetEflClass()1030     internal abstract IntPtr GetEflClass();
GetEoOps(System.Type type, bool includeInherited)1031     internal abstract System.Collections.Generic.List<EflOpDescription> GetEoOps(System.Type type, bool includeInherited);
1032 }
1033 
1034 /// <summary>Attribute for private native classes.
1035 ///
1036 /// <para>For internal usage by generated code only.</para></summary>
1037 class PrivateNativeClass : NativeClass
1038 {
GetEflClass()1039     internal override IntPtr GetEflClass()
1040     {
1041         return IntPtr.Zero;
1042     }
1043 
GetEoOps(System.Type type, bool includeInherited)1044     internal override System.Collections.Generic.List<EflOpDescription> GetEoOps(System.Type type, bool includeInherited)
1045     {
1046         return null;
1047     }
1048 }
1049 
1050 [System.AttributeUsage(System.AttributeTargets.Class |
1051                        System.AttributeTargets.Interface |
1052                        System.AttributeTargets.Enum |
1053                        System.AttributeTargets.Delegate |
1054                        System.AttributeTargets.Struct,
1055                        AllowMultiple = false,
1056                        Inherited = false)
1057 ]
1058 internal class BindingEntityAttribute: System.Attribute
1059 {
IsBindingEntity(System.Type t)1060     public static bool IsBindingEntity(System.Type t)
1061     {
1062         return Attribute.GetCustomAttribute(t, typeof(BindingEntityAttribute), false) != null;
1063     }
1064 }
1065 
1066 public interface IWrapper
1067 {
1068     /// <summary>Pointer to internal Eo instance.</summary>
1069     IntPtr NativeHandle
1070     {
1071         get;
1072     }
1073 
1074     /// <summary>Pointer to internal Eo class.</summary>
1075     IntPtr NativeClass
1076     {
1077         get;
1078     }
1079 }
1080 
1081 internal static class ClassRegister
1082 {
GetManagedType(IntPtr klass)1083     internal static System.Type GetManagedType(IntPtr klass)
1084     {
1085         System.Type t;
1086         if (Efl.Eo.ClassRegister.typeFromKlass.TryGetValue(klass, out t))
1087         {
1088             return t;
1089         }
1090 
1091         // If it isn't on the dictionary then it is a Native binding class
1092         IntPtr namePtr = Efl.Eo.Globals.efl_class_name_get(klass);
1093         if (namePtr == IntPtr.Zero)
1094         {
1095             throw new System.InvalidOperationException($"Could not get Native class name. Handle: {klass}");
1096         }
1097 #pragma warning disable CA1307
1098         string name = Eina.StringConversion.NativeUtf8ToManagedString(namePtr)
1099             .Replace("_", ""); // Convert Efl C name to C# name
1100 #pragma warning restore CA1307
1101 
1102         // Check if this is an internal implementation of an abstract class
1103         var abstract_impl_suffix = "Realized";
1104         if (name.EndsWith(abstract_impl_suffix, StringComparison.Ordinal))
1105         {
1106             name = name.Substring(0, name.Length - abstract_impl_suffix.Length);
1107             var lastDot = name.LastIndexOf(".", StringComparison.Ordinal);
1108             var klassName = name.Substring(lastDot + 1);
1109             name += "+" + klassName + abstract_impl_suffix; // '+' is the separator for nested classes
1110         }
1111 
1112         // When converting to managed, interfaces and mixins gets the 'I' prefix.
1113         var klass_type = Efl.Eo.Globals.efl_class_type_get(klass);
1114         if (klass_type == Efl.Eo.Globals.EflClassType.Interface || klass_type == Efl.Eo.Globals.EflClassType.Mixin)
1115         {
1116             var pos = name.LastIndexOf(".", StringComparison.Ordinal);
1117             name = name.Insert(pos + 1, "I"); // -1 if not found, inserts at 0 normally
1118         }
1119 
1120         var curr_asm = typeof(IWrapper).Assembly;
1121         t = curr_asm.GetType(name);
1122         if (t == null)
1123         {
1124             foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
1125             {
1126                 if (assembly == curr_asm)
1127                 {
1128                     continue;
1129                 }
1130 
1131                 t = assembly.GetType(name);
1132                 if (t != null)
1133                 {
1134                     break;
1135                 }
1136             }
1137 
1138             if (t == null)
1139             {
1140                 return typeof(Efl.ObjectRealized);
1141             }
1142         }
1143 
1144         AddToKlassTypeBiDictionary(klass, t); // Cache it in the dictionary
1145         return t;
1146     }
1147 
GetKlass(System.Type objectType)1148     internal static IntPtr GetKlass(System.Type objectType)
1149     {
1150         IntPtr klass;
1151         if (klassFromType.TryGetValue(objectType, out klass))
1152         {
1153             return klass;
1154         }
1155 
1156         // Check if it is a Native binding class
1157         klass = GetNativeKlassPtr(objectType);
1158         if (klass != IntPtr.Zero)
1159         {
1160             // Add to the dictionary cache
1161             AddToKlassTypeBiDictionary(klass, objectType);
1162             return klass;
1163         }
1164 
1165         // Unregistered Inherited class, let's register it
1166         IntPtr baseKlass = GetNativeBaseKlassPtr(objectType);
1167         if (baseKlass == IntPtr.Zero)
1168         {
1169             throw new System.InvalidOperationException($"Could not get base C# binding class for Inherited type: {objectType.FullName}");
1170         }
1171 
1172         return RegisterKlass(baseKlass, objectType);
1173     }
1174 
GetInheritKlassOrRegister(IntPtr baseKlass, System.Type objectType)1175     internal static IntPtr GetInheritKlassOrRegister(IntPtr baseKlass, System.Type objectType)
1176     {
1177         IntPtr klass;
1178         if (klassFromType.TryGetValue(objectType, out klass))
1179         {
1180             return klass;
1181         }
1182 
1183         return RegisterKlass(baseKlass, objectType);
1184     }
1185 
RegisterKlass(IntPtr baseKlass, System.Type objectType)1186     private static IntPtr RegisterKlass(IntPtr baseKlass, System.Type objectType)
1187     {
1188         lock (klassAllocLock)
1189         {
1190             IntPtr newKlass = Efl.Eo.Globals.register_class(objectType.FullName, baseKlass, objectType);
1191             if (newKlass == IntPtr.Zero)
1192             {
1193                 throw new System.InvalidOperationException($"Failed to register class '{objectType.FullName}'");
1194             }
1195 
1196             AddToKlassTypeBiDictionary(newKlass, objectType);
1197             return newKlass;
1198         }
1199     }
1200 
GetNativeBaseKlassPtr(System.Type objectType)1201     private static IntPtr GetNativeBaseKlassPtr(System.Type objectType)
1202     {
1203         for (System.Type t = objectType.BaseType; t != null; t = t.BaseType)
1204         {
1205             var ptr = GetNativeKlassPtr(t);
1206             if (ptr != IntPtr.Zero)
1207             {
1208                 return ptr;
1209             }
1210         }
1211 
1212         throw new System.InvalidOperationException($"Class '{objectType.FullName}' is not an Efl object");
1213     }
1214 
GetNativeKlassPtr(System.Type objectType)1215     private static IntPtr GetNativeKlassPtr(System.Type objectType)
1216     {
1217         if (objectType == null)
1218         {
1219             return IntPtr.Zero;
1220         }
1221 
1222         if (objectType.IsInterface)
1223         {
1224             // Try to get the *NativeMethods class
1225             var nativeMethods = (Efl.Eo.NativeClass)System.Attribute.GetCustomAttributes(objectType)?.FirstOrDefault(attr => attr is Efl.Eo.NativeClass);
1226             if (nativeMethods == null)
1227                 return IntPtr.Zero;
1228 
1229             return nativeMethods.GetEflClass();
1230         }
1231 
1232         var method = objectType.GetMethod("GetEflClassStatic",
1233                                           System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
1234 
1235         if (method == null)
1236         {
1237             return IntPtr.Zero;
1238         }
1239 
1240         return (IntPtr)(method.Invoke(null, null));
1241     }
1242 
AddToKlassTypeBiDictionary(IntPtr klassPtr, System.Type objectType)1243     internal static void AddToKlassTypeBiDictionary(IntPtr klassPtr, System.Type objectType)
1244     {
1245         klassFromType[objectType] = klassPtr;
1246         typeFromKlass[klassPtr] = objectType;
1247     }
1248 
1249     internal static readonly System.Collections.Concurrent.ConcurrentDictionary<System.Type, System.IntPtr> klassFromType
1250         = new System.Collections.Concurrent.ConcurrentDictionary<System.Type, System.IntPtr>();
1251 
1252     internal static readonly System.Collections.Concurrent.ConcurrentDictionary<System.IntPtr, System.Type> typeFromKlass
1253         = new System.Collections.Concurrent.ConcurrentDictionary<System.IntPtr, System.Type>();
1254 
1255     private static readonly object klassAllocLock = new object();
1256 }
1257 
1258 /// <summary>Custom marshaler for Eo objects that do not move ownership between native and managed code.
1259 ///
1260 /// <para>For internal usage by generated code.</para>
1261 ///
1262 /// <para>Since EFL 1.24.</para>
1263 /// </summary>
1264 class MarshalEoNoMove : ICustomMarshaler
1265 {
1266     private static ICustomMarshaler instance = new MarshalEoNoMove();
1267 
1268     /// <summary>
1269     /// Gets an instance of this marshaler.
1270     /// <para>Since EFL 1.24.</para>
1271     /// </summary>
1272     /// <param name="cookie">Cookie to identify the marshaler. Unused.</param>
1273     /// <returns>The marshaler instance.</returns>
1274     [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Justification = "The same marshaler is used for all cases.")]
GetInstance(string cookie)1275     public static ICustomMarshaler GetInstance(string cookie) => instance;
1276 
1277     /// <summary>
1278     /// Clean ups the managed data.
1279     /// <para>Since EFL 1.24.</para>
1280     /// </summary>
1281     /// <param name="ManagedObj">The object to be cleaned.</param>
CleanUpManagedData(object ManagedObj)1282     public void CleanUpManagedData(object ManagedObj)
1283     {
1284     }
1285 
1286     /// <summary>
1287     /// Clean ups the native data if it was created.
1288     /// <para>Since EFL 1.24.</para>
1289     /// </summary>
1290     /// <param name="pNativeData">The native data to be cleaned.</param>
CleanUpNativeData(IntPtr pNativeData)1291     public void CleanUpNativeData(IntPtr pNativeData)
1292     {
1293     }
1294 
1295     /// <summary>
1296     /// Gets the native data size.
1297     /// <para>Since EFL 1.24.</para>
1298     /// </summary>
1299     /// <returns>The data size in bytes.</returns>
GetNativeDataSize()1300     public int GetNativeDataSize() => -1;
1301 
1302     /// <summary>
1303     /// Marshals the given managed object to its native handle.
1304     /// <para>As this marshaler does not move the reference, the managed code
1305     /// can keep its reference and does not need to incref.</para>
1306     /// <para>Since EFL 1.24.</para>
1307     /// </summary>
1308     /// <param name="ManagedObj">The object to be marshalled.</param>
1309     /// <returns>The marshalled native data.</returns>
MarshalManagedToNative(object ManagedObj)1310     public IntPtr MarshalManagedToNative(object ManagedObj)
1311     {
1312         if (ManagedObj == null)
1313         {
1314             return IntPtr.Zero;
1315         }
1316 
1317         IWrapper wrapper = ManagedObj as IWrapper;
1318 
1319         if (wrapper == null)
1320         {
1321             throw new ArgumentException("Managed object to be marshalled must be an IWrapper.");
1322         }
1323 
1324         return wrapper.NativeHandle;
1325     }
1326 
1327     /// <summary>
1328     /// Marshals the given native pointer into a managed object.
1329     /// <para>The given native object has its reference count incremented in order to make
1330     /// the C# wrapper capable of accessing it while the wrapper is alive.</para>
1331     /// <para>Since EFL 1.24.</para>
1332     /// </summary>
1333     /// <param name="pNativeData">The native pointer to the EO object.</param>
1334     /// <returns>The managed wrapper for the given native object.</returns>
MarshalNativeToManaged(IntPtr pNativeData)1335     public object MarshalNativeToManaged(IntPtr pNativeData)
1336     {
1337         return Efl.Eo.Globals.CreateWrapperFor(pNativeData, shouldIncRef : true);
1338     }
1339 }
1340 
1341 /// <summary>Custom marshaler for Eo objects that move ownership between native and managed code.
1342 ///
1343 /// <para>For internal usage by generated code.</para>
1344 ///
1345 /// <para>Since EFL 1.24.</para>
1346 /// </summary>
1347 class MarshalEoMove : ICustomMarshaler
1348 {
1349     private static ICustomMarshaler instance = new MarshalEoMove();
1350 
1351     /// <summary>
1352     /// Gets an instance of this marshaler.
1353     /// <para>Since EFL 1.24.</para>
1354     /// </summary>
1355     /// <param name="cookie">Cookie to identify the marshaler. Unused.</param>
1356     /// <returns>The marshaler instance.</returns>
1357     [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Justification = "The same marshaler is used for all cases.")]
GetInstance(string cookie)1358     public static ICustomMarshaler GetInstance(string cookie) => instance;
1359 
1360     /// <summary>
1361     /// Clean ups the managed data.
1362     /// <para>Since EFL 1.24.</para>
1363     /// </summary>
1364     /// <param name="ManagedObj">The object to be cleaned.</param>
CleanUpManagedData(object ManagedObj)1365     public void CleanUpManagedData(object ManagedObj)
1366     {
1367     }
1368 
1369     /// <summary>
1370     /// Clean ups the native data if it was created.
1371     /// <para>Since EFL 1.24.</para>
1372     /// </summary>
1373     /// <param name="pNativeData">The native data to be cleaned.</param>
CleanUpNativeData(IntPtr pNativeData)1374     public void CleanUpNativeData(IntPtr pNativeData)
1375     {
1376     }
1377 
1378     /// <summary>
1379     /// Gets the native data size.
1380     /// <para>Since EFL 1.24.</para>
1381     /// </summary>
1382     /// <returns>The data size in bytes.</returns>
GetNativeDataSize()1383     public int GetNativeDataSize() => -1;
1384 
1385     /// <summary>
1386     /// Marshals the given managed object to its native handle.
1387     /// <para>The wrapper given as parameter needs to keep a reference to the native
1388     /// object, so the EO has its refcount incremented.</para>
1389     /// <para>Since EFL 1.24.</para>
1390     /// </summary>
1391     /// <param name="ManagedObj">The object to be marshalled.</param>
1392     /// <returns>The marshalled native data.</returns>
MarshalManagedToNative(object ManagedObj)1393     public IntPtr MarshalManagedToNative(object ManagedObj)
1394     {
1395         if (ManagedObj == null)
1396         {
1397             return IntPtr.Zero;
1398         }
1399 
1400         IWrapper wrapper = ManagedObj as IWrapper;
1401 
1402         if (wrapper == null)
1403         {
1404             throw new ArgumentException("Managed object to be marshalled must be an IWrapper.");
1405         }
1406 
1407         return Efl.Eo.Globals.efl_ref(wrapper.NativeHandle);
1408     }
1409 
1410     /// <summary>
1411     /// Marshals the given native pointer into a managed object.
1412     /// <para>The returned wrapper "steals" the reference to keep it alive.</para>
1413     /// <para>Since EFL 1.24.</para>
1414     /// </summary>
1415     /// <param name="pNativeData">The native pointer to the EO object.</param>
1416     /// <returns>The managed wrapper for the given native object.</returns>
MarshalNativeToManaged(IntPtr pNativeData)1417     public object MarshalNativeToManaged(IntPtr pNativeData)
1418     {
1419         return Efl.Eo.Globals.CreateWrapperFor(pNativeData, shouldIncRef : false);
1420     }
1421 }
1422 
1423 ///<summary>Marshals between System.Type instances and Eo classes (IntPtrs).</summary>
1424 class MarshalEflClass : ICustomMarshaler
1425 {
GetInstance(string cookie)1426     internal static ICustomMarshaler GetInstance(string cookie)
1427     {
1428         Eina.Log.Debug("MarshalEflClass.GetInstance cookie " + cookie);
1429         return new MarshalEflClass();
1430     }
1431 
CleanUpManagedData(object ManagedObj)1432     public void CleanUpManagedData(object ManagedObj)
1433     {
1434     }
1435 
CleanUpNativeData(IntPtr pNativeData)1436     public void CleanUpNativeData(IntPtr pNativeData)
1437     {
1438     }
1439 
GetNativeDataSize()1440     public int GetNativeDataSize()
1441     {
1442         Eina.Log.Debug("MarshalEflClass.GetNativeDataSize");
1443         return 0;
1444     }
1445 
MarshalManagedToNative(object ManagedObj)1446     public IntPtr MarshalManagedToNative(object ManagedObj)
1447     {
1448         Eina.Log.Debug("MarshalEflClass.MarshallManagedToNative");
1449         if (ManagedObj == null)
1450         {
1451             return IntPtr.Zero;
1452         }
1453 
1454         var t = (System.Type)ManagedObj;
1455         return Efl.Eo.ClassRegister.GetKlass(t);
1456     }
1457 
MarshalNativeToManaged(IntPtr pNativeData)1458     public object MarshalNativeToManaged(IntPtr pNativeData)
1459     {
1460         Eina.Log.Debug("MarshalEflClass.MarshalNativeToManaged");
1461         if (pNativeData == IntPtr.Zero)
1462         {
1463             return null;
1464         }
1465 
1466         return Efl.Eo.ClassRegister.GetManagedType(pNativeData);
1467     }
1468 }
1469 
1470 class StringPassOwnershipMarshaler : ICustomMarshaler
1471 {
MarshalNativeToManaged(IntPtr pNativeData)1472     public object MarshalNativeToManaged(IntPtr pNativeData)
1473     {
1474         var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
1475         Eina.MemoryNative.Free(pNativeData);
1476         return ret;
1477     }
1478 
MarshalManagedToNative(object managedObj)1479     public IntPtr MarshalManagedToNative(object managedObj)
1480     {
1481         return Eina.MemoryNative.StrDup((string)managedObj);
1482     }
1483 
CleanUpNativeData(IntPtr pNativeData)1484     public void CleanUpNativeData(IntPtr pNativeData)
1485     {
1486         // No need to cleanup. C will take care of it.
1487     }
1488 
CleanUpManagedData(object managedObj)1489     public void CleanUpManagedData(object managedObj)
1490     {
1491     }
1492 
GetNativeDataSize()1493     public int GetNativeDataSize()
1494     {
1495         return -1;
1496     }
1497 
GetInstance(string cookie)1498     internal static ICustomMarshaler GetInstance(string cookie)
1499     {
1500         if (marshaler == null)
1501         {
1502             marshaler = new StringPassOwnershipMarshaler();
1503         }
1504 
1505         return marshaler;
1506     }
1507 
1508     static private StringPassOwnershipMarshaler marshaler;
1509 }
1510 
1511 
1512 class StringOutMarshaler: ICustomMarshaler
1513 {
MarshalNativeToManaged(IntPtr pNativeData)1514     public object MarshalNativeToManaged(IntPtr pNativeData)
1515     {
1516         return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
1517     }
1518 
MarshalManagedToNative(object managedObj)1519     public IntPtr MarshalManagedToNative(object managedObj)
1520     {
1521         return Eina.MemoryNative.SlstrCopyNew((string)managedObj);
1522     }
1523 
CleanUpNativeData(IntPtr pNativeData)1524     public void CleanUpNativeData(IntPtr pNativeData)
1525     {
1526     }
1527 
CleanUpManagedData(object managedObj)1528     public void CleanUpManagedData(object managedObj)
1529     {
1530     }
1531 
GetNativeDataSize()1532     public int GetNativeDataSize()
1533     {
1534         return -1;
1535     }
1536 
GetInstance(string cookie)1537     internal static ICustomMarshaler GetInstance(string cookie)
1538     {
1539         if (marshaler == null)
1540         {
1541             marshaler = new StringOutMarshaler();
1542         }
1543 
1544         return marshaler;
1545     }
1546 
1547     static private StringOutMarshaler marshaler;
1548 }
1549 
1550 class StringKeepOwnershipMarshaler: ICustomMarshaler
1551 {
MarshalNativeToManaged(IntPtr pNativeData)1552     public object MarshalNativeToManaged(IntPtr pNativeData)
1553     {
1554         return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
1555     }
1556 
MarshalManagedToNative(object managedObj)1557     public IntPtr MarshalManagedToNative(object managedObj)
1558     {
1559         return Eina.StringConversion.ManagedStringToNativeUtf8Alloc((string)managedObj);
1560     }
1561 
CleanUpNativeData(IntPtr pNativeData)1562     public void CleanUpNativeData(IntPtr pNativeData)
1563     {
1564         // No need to free. The Native side will keep the ownership.
1565     }
1566 
CleanUpManagedData(object managedObj)1567     public void CleanUpManagedData(object managedObj)
1568     {
1569     }
1570 
GetNativeDataSize()1571     public int GetNativeDataSize()
1572     {
1573         return -1;
1574     }
1575 
GetInstance(string cookie)1576     internal static ICustomMarshaler GetInstance(string cookie)
1577     {
1578         if (marshaler == null)
1579         {
1580             marshaler = new StringKeepOwnershipMarshaler();
1581         }
1582 
1583         return marshaler;
1584     }
1585 
1586     static private StringKeepOwnershipMarshaler marshaler;
1587 }
1588 
1589 class StringsharePassOwnershipMarshaler : ICustomMarshaler
1590 {
MarshalNativeToManaged(IntPtr pNativeData)1591     public object MarshalNativeToManaged(IntPtr pNativeData)
1592     {
1593         var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
1594         Eina.NativeMethods.eina_stringshare_del(pNativeData);
1595         return ret;
1596     }
1597 
MarshalManagedToNative(object managedObj)1598     public IntPtr MarshalManagedToNative(object managedObj)
1599     {
1600         return Eina.MemoryNative.AddStringshare((string)managedObj);
1601     }
1602 
CleanUpNativeData(IntPtr pNativeData)1603     public void CleanUpNativeData(IntPtr pNativeData)
1604     {
1605         // No need to free as it's for own() parameters.
1606     }
1607 
CleanUpManagedData(object managedObj)1608     public void CleanUpManagedData(object managedObj)
1609     {
1610     }
1611 
GetNativeDataSize()1612     public int GetNativeDataSize()
1613     {
1614         return -1;
1615     }
1616 
GetInstance(string cookie)1617     internal static ICustomMarshaler GetInstance(string cookie)
1618     {
1619         if (marshaler == null)
1620         {
1621             marshaler = new StringsharePassOwnershipMarshaler();
1622         }
1623 
1624         return marshaler;
1625     }
1626 
1627     static private StringsharePassOwnershipMarshaler marshaler;
1628 }
1629 
1630 class StringshareKeepOwnershipMarshaler : ICustomMarshaler
1631 {
MarshalNativeToManaged(IntPtr pNativeData)1632     public object MarshalNativeToManaged(IntPtr pNativeData)
1633     {
1634         return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
1635     }
1636 
MarshalManagedToNative(object managedObj)1637     public IntPtr MarshalManagedToNative(object managedObj)
1638     {
1639         return Eina.MemoryNative.AddStringshare((string)managedObj);
1640     }
1641 
CleanUpNativeData(IntPtr pNativeData)1642     public void CleanUpNativeData(IntPtr pNativeData)
1643     {
1644         // No need to free, as the native side will keep ownership.
1645     }
1646 
CleanUpManagedData(object managedObj)1647     public void CleanUpManagedData(object managedObj)
1648     {
1649     }
1650 
GetNativeDataSize()1651     public int GetNativeDataSize()
1652     {
1653         return -1;
1654     }
1655 
GetInstance(string cookie)1656     internal static ICustomMarshaler GetInstance(string cookie)
1657     {
1658         if (marshaler == null)
1659         {
1660             marshaler = new StringshareKeepOwnershipMarshaler();
1661         }
1662 
1663         return marshaler;
1664     }
1665 
1666     static private StringshareKeepOwnershipMarshaler marshaler;
1667 }
1668 
1669 class StrbufPassOwnershipMarshaler : ICustomMarshaler
1670 {
MarshalNativeToManaged(IntPtr pNativeData)1671     public object MarshalNativeToManaged(IntPtr pNativeData)
1672     {
1673         return new Eina.Strbuf(pNativeData, Eina.Ownership.Managed);
1674     }
1675 
MarshalManagedToNative(object managedObj)1676     public IntPtr MarshalManagedToNative(object managedObj)
1677     {
1678         Eina.Strbuf buf = managedObj as Eina.Strbuf;
1679         buf.ReleaseOwnership();
1680         return buf.Handle;
1681     }
1682 
CleanUpNativeData(IntPtr pNativeData)1683     public void CleanUpNativeData(IntPtr pNativeData)
1684     {
1685         // No need to cleanup. C will take care of it.
1686     }
1687 
CleanUpManagedData(object managedObj)1688     public void CleanUpManagedData(object managedObj)
1689     {
1690     }
1691 
GetNativeDataSize()1692     public int GetNativeDataSize()
1693     {
1694         return -1;
1695     }
1696 
GetInstance(string cookie)1697     internal static ICustomMarshaler GetInstance(string cookie)
1698     {
1699         if (marshaler == null)
1700         {
1701             marshaler = new StrbufPassOwnershipMarshaler();
1702         }
1703 
1704         return marshaler;
1705     }
1706 
1707     static private StrbufPassOwnershipMarshaler marshaler;
1708 }
1709 
1710 class StrbufKeepOwnershipMarshaler: ICustomMarshaler
1711 {
MarshalNativeToManaged(IntPtr pNativeData)1712     public object MarshalNativeToManaged(IntPtr pNativeData)
1713     {
1714         return new Eina.Strbuf(pNativeData, Eina.Ownership.Unmanaged);
1715     }
1716 
MarshalManagedToNative(object managedObj)1717     public IntPtr MarshalManagedToNative(object managedObj)
1718     {
1719         Eina.Strbuf buf = managedObj as Eina.Strbuf;
1720         return buf.Handle;
1721     }
1722 
CleanUpNativeData(IntPtr pNativeData)1723     public void CleanUpNativeData(IntPtr pNativeData)
1724     {
1725         // No need to free. The Native side will keep the ownership.
1726     }
1727 
CleanUpManagedData(object managedObj)1728     public void CleanUpManagedData(object managedObj)
1729     {
1730     }
1731 
GetNativeDataSize()1732     public int GetNativeDataSize()
1733     {
1734         return -1;
1735     }
1736 
GetInstance(string cookie)1737     internal static ICustomMarshaler GetInstance(string cookie)
1738     {
1739         if (marshaler == null)
1740         {
1741             marshaler = new StrbufKeepOwnershipMarshaler();
1742         }
1743 
1744         return marshaler;
1745     }
1746 
1747     static private StrbufKeepOwnershipMarshaler marshaler;
1748 }
1749 
1750 } // namespace eo
1751 
1752 /// <summary>General exception for errors inside the binding.</summary>
1753 public class EflException : Exception
1754 {
1755     /// <summary>
1756     ///   Default Constructor.
1757     /// <para>Since EFL 1.23.</para>
1758     /// </summary>
EflException()1759     public EflException()
1760     {
1761     }
1762 
1763     /// <summary>Create a new EflException with the given message.</summary>
EflException(string message)1764     public EflException(string message) : base(message)
1765     {
1766     }
1767 
1768     /// <summary>
1769     ///   Create a new EflException with the given message and inner exception.
1770     /// <para>Since EFL 1.23.</para>
1771     /// </summary>
1772     /// <param name="message">The message of the exception.</param>
1773     /// <param name="innerException">The inner exception.</param>
EflException(string message, Exception innerException)1774     public EflException(string message, Exception innerException)
1775         : base(message, innerException)
1776     {
1777     }
1778 }
1779 
1780 /// <summary>Exception to be raised when a Task fails due to a failed Eina.Future.</summary>
1781 public class FutureException : EflException
1782 {
1783     /// <summary>The error code returned by the failed Eina.Future.</summary>
1784     public Eina.Error Error { get; private set; }
1785 
1786     /// <summary>
1787     ///   Default constructor.
1788     /// <para>Since EFL 1.23.</para>
1789     /// </summary>
FutureException()1790     public FutureException() : this(Eina.Error.UNHANDLED_EXCEPTION)
1791     {
1792     }
1793 
1794     /// <summary>
1795     ///   Construct a new exception from the <see cref="Eina.Error" />
1796     /// with a given message
1797     /// <para>Since EFL 1.23.</para>
1798     /// </summary>
1799     /// <param name="message">The message of the exception.</param>
FutureException(string message)1800     public FutureException(string message)
1801         : this(Eina.Error.UNHANDLED_EXCEPTION, message)
1802     {
1803     }
1804 
1805     /// <summary>
1806     ///   Construct a new exception from the <see cref="Eina.Error" />
1807     /// with a given message and inner exception.
1808     /// <para>Since EFL 1.23.</para>
1809     /// </summary>
1810     /// <param name="message">The message of the exception.</param>
1811     /// <param name="innerException">The inner exception.</param>
FutureException(string message, Exception innerException)1812     public FutureException(string message, Exception innerException)
1813         : this(Eina.Error.UNHANDLED_EXCEPTION, message, innerException)
1814     {
1815     }
1816 
1817     /// <summary>
1818     ///   Construct a new exception from the <see cref="Eina.Error" />
1819     /// with a given error.
1820     /// <para>Since EFL 1.23.</para>
1821     /// </summary>
1822     /// <param name="error">The error of the exception..</param>
FutureException(Eina.Error error)1823     public FutureException(Eina.Error error)
1824         : this(error, "Future failed.")
1825     {
1826     }
1827 
1828     /// <summary>
1829     ///   Construct a new exception from the <see cref="Eina.Error" />
1830     /// with a given error and message.
1831     /// <para>Since EFL 1.23.</para>
1832     /// </summary>
1833     /// <param name="error">The error of the exception..</param>
1834     /// <param name="message">The message of the exception.</param>
FutureException(Eina.Error error, string message)1835     public FutureException(Eina.Error error, string message)
1836         : this(error, message, null)
1837     {
1838     }
1839 
1840     /// <summary>
1841     ///   Construct a new exception from the <see cref="Eina.Error" />
1842     /// with a given error, message and innerException.
1843     /// <para>Since EFL 1.23.</para>
1844     /// </summary>
1845     /// <param name="error">The error of the exception..</param>
1846     /// <param name="message">The message of the exception.</param>
1847     /// <param name="innerException">The inner exception.</param>
FutureException(Eina.Error error, string message, Exception innerException)1848     public FutureException(Eina.Error error, string message,
1849                            Exception innerException)
1850         : base(message, innerException) => Error = error;
1851 }
1852 } // namespace efl
1853