glib/libgobject/inc/gobject_wsd.h
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #ifndef __GOBJECT_WSD_H__
       
    20 #define __GOBJECT_WSD_H__
       
    21 
       
    22 #if (defined(__SYMBIAN32__) && (defined(__WINSCW__) || defined(__WINS__)))
       
    23 
       
    24 #include <_ansi.h>
       
    25 #include <sys/cdefs.h>
       
    26 #include <gobject.h>
       
    27 #include <gbsearcharray.h>
       
    28 
       
    29 /* --------------------------- MACRO DEFINATIONS --------------------------*/
       
    30 
       
    31 #ifndef EMULATOR
       
    32 #define EMULATOR (defined(__SYMBIAN32__) && (defined(__WINSCW__) || defined(__WINS__)))
       
    33 #endif /* EMULATOR */
       
    34 
       
    35 #define VARIABLE_NAME_MACRO(name,filename) s_##filename##_g__ ## name ## _lock
       
    36 
       
    37 #define FUNCTION_NAME_MACRO(name,filename) _s_##filename##_g__ ## name ## _lock
       
    38 
       
    39 #define VARIABLE_NAME(var,filename) s_##filename##_##var
       
    40 
       
    41 #define FUNCTION_NAME(var,filename) _s_##filename##_##var
       
    42 
       
    43 #define VARIABLE_DECL_MACRO(name,filename,datatype) \
       
    44 datatype VARIABLE_NAME_MACRO(name,filename);
       
    45 
       
    46 #define VARIABLE_DECL(var,filename,datatype)\
       
    47 datatype VARIABLE_NAME(var,filename);
       
    48 
       
    49 #define VARIABLE_DECL_ARRAY(name,filename,datatype,size) \
       
    50 datatype VARIABLE_NAME(name,filename)[size];
       
    51 
       
    52 #define RETURN_VAL(var,filename) (Gobject_ImpurePtr()->VARIABLE_NAME(var,filename))
       
    53 
       
    54 #define RETURN_VAL_MACRO(var,filename) (Gobject_ImpurePtr()->VARIABLE_NAME_MACRO(var,filename))
       
    55 
       
    56 #define PLS(var,filename,type) \
       
    57 type *FUNCTION_NAME(var,filename)() \
       
    58 { \
       
    59 return &RETURN_VAL(var,filename);\
       
    60 }
       
    61 
       
    62 #define PLS_MACRO(var,filename,type) \
       
    63 type *FUNCTION_NAME_MACRO(var,filename)() \
       
    64 { \
       
    65 return &RETURN_VAL_MACRO(var,filename);\
       
    66 }
       
    67 
       
    68 #define PLS_ARRAY(var,filename,type) \
       
    69 type *FUNCTION_NAME(var,filename)() \
       
    70 { \
       
    71 return RETURN_VAL(var,filename);\
       
    72 }
       
    73 /* ------------------------ END MACRO DEFINATIONS --------------------------*/
       
    74 
       
    75 
       
    76 typedef struct _GObjectNotifyContext          GObjectNotifyContext;
       
    77 typedef void (*GObjectNotifyQueueDispatcher) (GObject     *object,
       
    78 					      guint        n_pspecs,
       
    79 					      GParamSpec **pspecs);
       
    80 
       
    81 struct _GObjectNotifyContext
       
    82 {
       
    83   GQuark                       quark_notify_queue;
       
    84   GObjectNotifyQueueDispatcher dispatcher;
       
    85   GTrashStack                 *_nqueue_trash; /* unused */
       
    86 };
       
    87 
       
    88 typedef guint (*function_type) (GObject*, gint);
       
    89 #ifdef __cplusplus
       
    90 extern "C"
       
    91 #endif /* extern "C" */
       
    92 guint object_floating_flag_handler (GObject *object,gint job);
       
    93 
       
    94 typedef struct _Emission     Emission;
       
    95 typedef enum
       
    96 {
       
    97   EMISSION_STOP,
       
    98   EMISSION_RUN,
       
    99   EMISSION_HOOK,
       
   100   EMISSION_RESTART
       
   101 } EmissionState;
       
   102 typedef struct _SignalNode   SignalNode;
       
   103 typedef struct
       
   104 {
       
   105   GSignalAccumulator func;
       
   106   gpointer           data;
       
   107 } SignalAccumulator;
       
   108 
       
   109 struct _Emission
       
   110 {
       
   111   Emission             *next;
       
   112   gpointer              instance;
       
   113   GSignalInvocationHint ihint;
       
   114   EmissionState         state;
       
   115   GType			chain_type;
       
   116 };
       
   117 
       
   118 struct _SignalNode
       
   119 {
       
   120   /* permanent portion */
       
   121   guint              signal_id;
       
   122   GType              itype;
       
   123   const gchar             *name;
       
   124   guint              destroyed : 1;
       
   125   
       
   126   /* reinitializable portion */
       
   127   guint		     test_class_offset : 12;
       
   128   guint              flags : 8;
       
   129   guint              n_params : 8;
       
   130   GType		    *param_types; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */
       
   131   GType		     return_type; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */
       
   132   GBSearchArray     *class_closure_bsa;
       
   133   SignalAccumulator *accumulator;
       
   134   GSignalCMarshaller c_marshaller;
       
   135   GHookList         *emission_hooks;
       
   136 };
       
   137 
       
   138 #define class class1
       
   139 
       
   140 typedef struct _TypeNode        TypeNode;
       
   141 typedef struct _CommonData      CommonData;
       
   142 typedef struct _IFaceData       IFaceData;
       
   143 typedef struct _ClassData       ClassData;
       
   144 typedef struct _InstanceData    InstanceData;
       
   145 typedef union  _TypeData        TypeData;
       
   146 typedef struct _IFaceEntry      IFaceEntry;
       
   147 
       
   148 typedef enum
       
   149 {
       
   150   UNINITIALIZED,
       
   151   BASE_CLASS_INIT,
       
   152   BASE_IFACE_INIT,
       
   153   CLASS_INIT,
       
   154   IFACE_INIT,
       
   155   INITIALIZED
       
   156 } InitState;
       
   157 
       
   158 struct _TypeNode
       
   159 {
       
   160   GTypePlugin *plugin;
       
   161   guint        n_children : 12;
       
   162   guint        n_supers : 8;
       
   163   guint        _prot_n_ifaces_prerequisites : 9;
       
   164   guint        is_classed : 1;
       
   165   guint        is_instantiatable : 1;
       
   166   guint        mutatable_check_cache : 1;	/* combines some common path checks */
       
   167   GType       *children;
       
   168   TypeData * volatile data;
       
   169   GQuark       qname;
       
   170   GData       *global_gdata;
       
   171   union {
       
   172     IFaceEntry  *iface_entries;		/* for !iface types */
       
   173     GType       *prerequisistes;
       
   174   } _prot;
       
   175   GType        supers[1]; /* flexible array */
       
   176 };
       
   177 
       
   178 struct _IFaceEntry
       
   179 {
       
   180   GType           iface_type;
       
   181   GTypeInterface *vtable;
       
   182   InitState       init_state;
       
   183 };
       
   184 struct _CommonData
       
   185 {
       
   186   guint             ref_count;
       
   187   GTypeValueTable  *value_table;
       
   188 };
       
   189 struct _IFaceData
       
   190 {
       
   191   CommonData         common;
       
   192   guint16            vtable_size;
       
   193   GBaseInitFunc      vtable_init_base;
       
   194   GBaseFinalizeFunc  vtable_finalize_base;
       
   195   GClassInitFunc     dflt_init;
       
   196   GClassFinalizeFunc dflt_finalize;
       
   197   gconstpointer      dflt_data;
       
   198   gpointer           dflt_vtable;
       
   199 };
       
   200 struct _ClassData
       
   201 {
       
   202   CommonData         common;
       
   203   guint16            class_size;
       
   204   guint              init_state : 4;
       
   205   GBaseInitFunc      class_init_base;
       
   206   GBaseFinalizeFunc  class_finalize_base;
       
   207   GClassInitFunc     class_init;
       
   208   GClassFinalizeFunc class_finalize;
       
   209   gconstpointer      class_data;
       
   210   gpointer           class;
       
   211 };
       
   212 struct _InstanceData
       
   213 {
       
   214   CommonData         common;
       
   215   guint16            class_size;
       
   216   guint              init_state : 4;
       
   217   GBaseInitFunc      class_init_base;
       
   218   GBaseFinalizeFunc  class_finalize_base;
       
   219   GClassInitFunc     class_init;
       
   220   GClassFinalizeFunc class_finalize;
       
   221   gconstpointer      class_data;
       
   222   gpointer           class;
       
   223   guint16            instance_size;
       
   224   guint16            private_size;
       
   225   guint16            n_preallocs;
       
   226   GInstanceInitFunc  instance_init;
       
   227   GMemChunk        *mem_chunk;
       
   228 };
       
   229 union _TypeData
       
   230 {
       
   231   CommonData         common;
       
   232   IFaceData          iface;
       
   233   ClassData          class;
       
   234   InstanceData       instance;
       
   235 };
       
   236 typedef struct {
       
   237   gpointer            cache_data;
       
   238   GTypeClassCacheFunc cache_func;
       
   239 } ClassCacheFunc;
       
   240 typedef struct {
       
   241   gpointer                check_data;
       
   242   GTypeInterfaceCheckFunc check_func;
       
   243 } IFaceCheckFunc;
       
   244 
       
   245 struct global_struct
       
   246 {
       
   247 	//Global data of gboxed.c
       
   248 	VARIABLE_DECL(boxed_bsa,gboxed,GBSearchArray *)
       
   249 	VARIABLE_DECL(type_id,g_closure_get_type ,GType)
       
   250 	VARIABLE_DECL(type_id,g_value_get_type ,GType)
       
   251 	VARIABLE_DECL(type_id,g_value_array_get_type ,GType)
       
   252 	VARIABLE_DECL(type_id,g_date_get_type ,GType)
       
   253 	VARIABLE_DECL(type_id,g_strv_get_type ,GType)
       
   254 	VARIABLE_DECL(type_id,g_gstring_get_type ,GType)
       
   255 	VARIABLE_DECL(type_id,g_hash_table_get_type ,GType)
       
   256 
       
   257 	//Global data of genums.c
       
   258 	VARIABLE_DECL(initialized ,g_enum_types_init,gboolean)
       
   259 	VARIABLE_DECL(info,g_enum_types_init,GTypeInfo)
       
   260 
       
   261 	//Global data of gobject.c
       
   262 	VARIABLE_DECL(quark_closure_array,gobject,GQuark)
       
   263 	VARIABLE_DECL(quark_weak_refs,gobject,GQuark)
       
   264 	VARIABLE_DECL(quark_toggle_refs,gobject,GQuark)
       
   265 	VARIABLE_DECL(pspec_pool,gobject,GParamSpecPool *)
       
   266 	VARIABLE_DECL(property_notify_context,gobject,GObjectNotifyContext)
       
   267 	VARIABLE_DECL_ARRAY(gobject_signals,gobject,gulong,1)
       
   268 	VARIABLE_DECL_MACRO(construct_objects_lock,gobject,GStaticMutex)
       
   269 	VARIABLE_DECL(construct_objects,gobject,GSList *)
       
   270 	#ifdef	G_ENABLE_DEBUG
       
   271 	VARIABLE_DECL_MACRO(debug_objects,gobject,GStaticMutex)
       
   272 	VARIABLE_DECL(g_trap_object_ref,gobject,volatile GObject *)
       
   273 	VARIABLE_DECL(debug_objects_count,gobject,guint)
       
   274 	VARIABLE_DECL(debug_objects_ht,gobject,GHashTable	*)
       
   275 	#endif /* G_ENABLE_DEBUG */
       
   276 	VARIABLE_DECL(initialized ,g_object_type_init,gboolean)
       
   277 	VARIABLE_DECL(info,g_object_type_init,GTypeInfo)
       
   278 	VARIABLE_DECL(floating_flag_handler,gobject,function_type)
       
   279 	VARIABLE_DECL(g_initially_unowned_parent_class,gobject,gpointer)
       
   280 	VARIABLE_DECL(g_define_type_id,g_initially_unowned_get_type,GType)
       
   281 
       
   282 	//GLobal data of gparam.c
       
   283 	VARIABLE_DECL(quark_floating ,gparam,GQuark)
       
   284 	VARIABLE_DECL(init_smutex,g_param_spec_pool_new ,GStaticMutex)
       
   285 
       
   286 	//Global data of gparamspec.c
       
   287 	VARIABLE_DECL(pspec_info,g_param_spec_types_init,GParamSpecTypeInfo)
       
   288 	VARIABLE_DECL(g_param_spec_types ,gparamspecs,GType *)
       
   289 
       
   290 	//Global data of gsignal.c
       
   291 	#ifdef	G_ENABLE_DEBUG
       
   292 	VARIABLE_DECL(g_trace_instance_signals,gsignal,volatile gpointer )
       
   293 	VARIABLE_DECL(g_trap_instance_signals,gsignal,volatile gpointer )
       
   294 	#endif /* G_ENABLE_DEBUG */
       
   295 
       
   296  	VARIABLE_DECL(g_signal_key_bsa,gsignal,GBSearchArray *)
       
   297 	VARIABLE_DECL(g_signal_hlbsa_bconfig,gsignal,GBSearchConfig)
       
   298 	VARIABLE_DECL(g_class_closure_bconfig,gsignal,GBSearchConfig)
       
   299 	VARIABLE_DECL(g_handler_list_bsa_ht,gsignal,GHashTable    *)
       
   300 	VARIABLE_DECL(g_recursive_emissions,gsignal,Emission *)
       
   301 	VARIABLE_DECL(g_restart_emissions ,gsignal,Emission *)
       
   302 	VARIABLE_DECL(g_handler_sequential_number ,gsignal,gulong)
       
   303 	VARIABLE_DECL_MACRO(g_signal_mutex,gsignal,GStaticMutex)
       
   304 	VARIABLE_DECL(g_n_signal_nodes,gsignal,guint)
       
   305 	VARIABLE_DECL(g_signal_nodes ,gsignal,SignalNode   **)
       
   306 	VARIABLE_DECL(seq_hook_id ,g_signal_add_emission_hook ,gulong)
       
   307 
       
   308 	//Global data of gsourceclosure.c
       
   309 	VARIABLE_DECL(our_type ,g_io_channel_get_type ,GType)
       
   310 	VARIABLE_DECL(etype ,g_io_condition_get_type,GType)
       
   311 	VARIABLE_DECL(closure_callback_funcs,gsourceclosure,GSourceCallbackFuncs)
       
   312 
       
   313 	//Global data of gtype.c
       
   314 	VARIABLE_DECL(type_rw_lock,gtype,GStaticRWLock)
       
   315 	VARIABLE_DECL(static_n_class_cache_funcs,gtype,guint)
       
   316 	VARIABLE_DECL(static_class_cache_funcs ,gtype,ClassCacheFunc *)
       
   317 	VARIABLE_DECL(static_n_iface_check_funcs,gtype,guint)
       
   318 	VARIABLE_DECL(static_iface_check_funcs,gtype,IFaceCheckFunc *)
       
   319 	VARIABLE_DECL(static_quark_type_flags,gtype,GQuark)
       
   320 	VARIABLE_DECL(static_quark_iface_holder,gtype,GQuark)
       
   321 	VARIABLE_DECL(static_quark_dependants_array,gtype,GQuark)
       
   322 	VARIABLE_DECL(_g_type_debug_flags,gtype,GTypeDebugFlags)
       
   323 	VARIABLE_DECL(static_type_nodes_ht,gtype,GHashTable *)
       
   324 	VARIABLE_DECL_ARRAY(static_fundamental_type_nodes,gtype,TypeNode *,(G_TYPE_FUNDAMENTAL_MAX >> G_TYPE_FUNDAMENTAL_SHIFT) + 1)
       
   325 	VARIABLE_DECL(static_fundamental_next,gtype,GType)
       
   326 	VARIABLE_DECL_MACRO(instance_real_class,gtype,GStaticMutex)
       
   327 	VARIABLE_DECL(instance_real_class_bsa,gtype,GBSearchArray *)
       
   328 	VARIABLE_DECL(instance_real_class_bconfig,gtype,GBSearchConfig)
       
   329 	VARIABLE_DECL_ARRAY(debug_keys,g_type_init_with_debug_flags ,GDebugKey,2)
       
   330 	VARIABLE_DECL_MACRO(type_init_lock,g_type_init_with_debug_flags,GStaticMutex)
       
   331 
       
   332 	//Global data of gtypemodule.c
       
   333 	VARIABLE_DECL(parent_class ,gtypemodule,gpointer)
       
   334 	VARIABLE_DECL(type_module_type,g_type_module_get_type ,GType)
       
   335 
       
   336 	//Global data of gtypeplugin.c
       
   337 	VARIABLE_DECL(type_plugin_type ,g_type_plugin_get_type,GType)
       
   338 
       
   339 	//Global data of gvalue.c
       
   340 	VARIABLE_DECL(transform_array,gvalue,GBSearchArray *)
       
   341 	VARIABLE_DECL(transform_bconfig,gvalue,GBSearchConfig)
       
   342 
       
   343 	// Global data of gvaluetypes.c
       
   344 	VARIABLE_DECL(type ,g_gtype_get_type ,GType)
       
   345 
       
   346 };
       
   347 
       
   348 #undef class
       
   349 
       
   350 __BEGIN_DECLS
       
   351 struct global_struct *Gobject_ImpurePtr();
       
   352 __END_DECLS
       
   353 #endif 
       
   354 
       
   355 #endif /* __GOBJECT_WSD_H__ */