diff -r acd3cd4aaceb -r 2efc27d87e1c glib/libgobject/inc/gobject_wsd.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/glib/libgobject/inc/gobject_wsd.h Wed Sep 01 12:36:54 2010 +0100 @@ -0,0 +1,355 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __GOBJECT_WSD_H__ +#define __GOBJECT_WSD_H__ + +#if (defined(__SYMBIAN32__) && (defined(__WINSCW__) || defined(__WINS__))) + +#include <_ansi.h> +#include +#include +#include + +/* --------------------------- MACRO DEFINATIONS --------------------------*/ + +#ifndef EMULATOR +#define EMULATOR (defined(__SYMBIAN32__) && (defined(__WINSCW__) || defined(__WINS__))) +#endif /* EMULATOR */ + +#define VARIABLE_NAME_MACRO(name,filename) s_##filename##_g__ ## name ## _lock + +#define FUNCTION_NAME_MACRO(name,filename) _s_##filename##_g__ ## name ## _lock + +#define VARIABLE_NAME(var,filename) s_##filename##_##var + +#define FUNCTION_NAME(var,filename) _s_##filename##_##var + +#define VARIABLE_DECL_MACRO(name,filename,datatype) \ +datatype VARIABLE_NAME_MACRO(name,filename); + +#define VARIABLE_DECL(var,filename,datatype)\ +datatype VARIABLE_NAME(var,filename); + +#define VARIABLE_DECL_ARRAY(name,filename,datatype,size) \ +datatype VARIABLE_NAME(name,filename)[size]; + +#define RETURN_VAL(var,filename) (Gobject_ImpurePtr()->VARIABLE_NAME(var,filename)) + +#define RETURN_VAL_MACRO(var,filename) (Gobject_ImpurePtr()->VARIABLE_NAME_MACRO(var,filename)) + +#define PLS(var,filename,type) \ +type *FUNCTION_NAME(var,filename)() \ +{ \ +return &RETURN_VAL(var,filename);\ +} + +#define PLS_MACRO(var,filename,type) \ +type *FUNCTION_NAME_MACRO(var,filename)() \ +{ \ +return &RETURN_VAL_MACRO(var,filename);\ +} + +#define PLS_ARRAY(var,filename,type) \ +type *FUNCTION_NAME(var,filename)() \ +{ \ +return RETURN_VAL(var,filename);\ +} +/* ------------------------ END MACRO DEFINATIONS --------------------------*/ + + +typedef struct _GObjectNotifyContext GObjectNotifyContext; +typedef void (*GObjectNotifyQueueDispatcher) (GObject *object, + guint n_pspecs, + GParamSpec **pspecs); + +struct _GObjectNotifyContext +{ + GQuark quark_notify_queue; + GObjectNotifyQueueDispatcher dispatcher; + GTrashStack *_nqueue_trash; /* unused */ +}; + +typedef guint (*function_type) (GObject*, gint); +#ifdef __cplusplus +extern "C" +#endif /* extern "C" */ +guint object_floating_flag_handler (GObject *object,gint job); + +typedef struct _Emission Emission; +typedef enum +{ + EMISSION_STOP, + EMISSION_RUN, + EMISSION_HOOK, + EMISSION_RESTART +} EmissionState; +typedef struct _SignalNode SignalNode; +typedef struct +{ + GSignalAccumulator func; + gpointer data; +} SignalAccumulator; + +struct _Emission +{ + Emission *next; + gpointer instance; + GSignalInvocationHint ihint; + EmissionState state; + GType chain_type; +}; + +struct _SignalNode +{ + /* permanent portion */ + guint signal_id; + GType itype; + const gchar *name; + guint destroyed : 1; + + /* reinitializable portion */ + guint test_class_offset : 12; + guint flags : 8; + guint n_params : 8; + GType *param_types; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */ + GType return_type; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */ + GBSearchArray *class_closure_bsa; + SignalAccumulator *accumulator; + GSignalCMarshaller c_marshaller; + GHookList *emission_hooks; +}; + +#define class class1 + +typedef struct _TypeNode TypeNode; +typedef struct _CommonData CommonData; +typedef struct _IFaceData IFaceData; +typedef struct _ClassData ClassData; +typedef struct _InstanceData InstanceData; +typedef union _TypeData TypeData; +typedef struct _IFaceEntry IFaceEntry; + +typedef enum +{ + UNINITIALIZED, + BASE_CLASS_INIT, + BASE_IFACE_INIT, + CLASS_INIT, + IFACE_INIT, + INITIALIZED +} InitState; + +struct _TypeNode +{ + GTypePlugin *plugin; + guint n_children : 12; + guint n_supers : 8; + guint _prot_n_ifaces_prerequisites : 9; + guint is_classed : 1; + guint is_instantiatable : 1; + guint mutatable_check_cache : 1; /* combines some common path checks */ + GType *children; + TypeData * volatile data; + GQuark qname; + GData *global_gdata; + union { + IFaceEntry *iface_entries; /* for !iface types */ + GType *prerequisistes; + } _prot; + GType supers[1]; /* flexible array */ +}; + +struct _IFaceEntry +{ + GType iface_type; + GTypeInterface *vtable; + InitState init_state; +}; +struct _CommonData +{ + guint ref_count; + GTypeValueTable *value_table; +}; +struct _IFaceData +{ + CommonData common; + guint16 vtable_size; + GBaseInitFunc vtable_init_base; + GBaseFinalizeFunc vtable_finalize_base; + GClassInitFunc dflt_init; + GClassFinalizeFunc dflt_finalize; + gconstpointer dflt_data; + gpointer dflt_vtable; +}; +struct _ClassData +{ + CommonData common; + guint16 class_size; + guint init_state : 4; + GBaseInitFunc class_init_base; + GBaseFinalizeFunc class_finalize_base; + GClassInitFunc class_init; + GClassFinalizeFunc class_finalize; + gconstpointer class_data; + gpointer class; +}; +struct _InstanceData +{ + CommonData common; + guint16 class_size; + guint init_state : 4; + GBaseInitFunc class_init_base; + GBaseFinalizeFunc class_finalize_base; + GClassInitFunc class_init; + GClassFinalizeFunc class_finalize; + gconstpointer class_data; + gpointer class; + guint16 instance_size; + guint16 private_size; + guint16 n_preallocs; + GInstanceInitFunc instance_init; + GMemChunk *mem_chunk; +}; +union _TypeData +{ + CommonData common; + IFaceData iface; + ClassData class; + InstanceData instance; +}; +typedef struct { + gpointer cache_data; + GTypeClassCacheFunc cache_func; +} ClassCacheFunc; +typedef struct { + gpointer check_data; + GTypeInterfaceCheckFunc check_func; +} IFaceCheckFunc; + +struct global_struct +{ + //Global data of gboxed.c + VARIABLE_DECL(boxed_bsa,gboxed,GBSearchArray *) + VARIABLE_DECL(type_id,g_closure_get_type ,GType) + VARIABLE_DECL(type_id,g_value_get_type ,GType) + VARIABLE_DECL(type_id,g_value_array_get_type ,GType) + VARIABLE_DECL(type_id,g_date_get_type ,GType) + VARIABLE_DECL(type_id,g_strv_get_type ,GType) + VARIABLE_DECL(type_id,g_gstring_get_type ,GType) + VARIABLE_DECL(type_id,g_hash_table_get_type ,GType) + + //Global data of genums.c + VARIABLE_DECL(initialized ,g_enum_types_init,gboolean) + VARIABLE_DECL(info,g_enum_types_init,GTypeInfo) + + //Global data of gobject.c + VARIABLE_DECL(quark_closure_array,gobject,GQuark) + VARIABLE_DECL(quark_weak_refs,gobject,GQuark) + VARIABLE_DECL(quark_toggle_refs,gobject,GQuark) + VARIABLE_DECL(pspec_pool,gobject,GParamSpecPool *) + VARIABLE_DECL(property_notify_context,gobject,GObjectNotifyContext) + VARIABLE_DECL_ARRAY(gobject_signals,gobject,gulong,1) + VARIABLE_DECL_MACRO(construct_objects_lock,gobject,GStaticMutex) + VARIABLE_DECL(construct_objects,gobject,GSList *) + #ifdef G_ENABLE_DEBUG + VARIABLE_DECL_MACRO(debug_objects,gobject,GStaticMutex) + VARIABLE_DECL(g_trap_object_ref,gobject,volatile GObject *) + VARIABLE_DECL(debug_objects_count,gobject,guint) + VARIABLE_DECL(debug_objects_ht,gobject,GHashTable *) + #endif /* G_ENABLE_DEBUG */ + VARIABLE_DECL(initialized ,g_object_type_init,gboolean) + VARIABLE_DECL(info,g_object_type_init,GTypeInfo) + VARIABLE_DECL(floating_flag_handler,gobject,function_type) + VARIABLE_DECL(g_initially_unowned_parent_class,gobject,gpointer) + VARIABLE_DECL(g_define_type_id,g_initially_unowned_get_type,GType) + + //GLobal data of gparam.c + VARIABLE_DECL(quark_floating ,gparam,GQuark) + VARIABLE_DECL(init_smutex,g_param_spec_pool_new ,GStaticMutex) + + //Global data of gparamspec.c + VARIABLE_DECL(pspec_info,g_param_spec_types_init,GParamSpecTypeInfo) + VARIABLE_DECL(g_param_spec_types ,gparamspecs,GType *) + + //Global data of gsignal.c + #ifdef G_ENABLE_DEBUG + VARIABLE_DECL(g_trace_instance_signals,gsignal,volatile gpointer ) + VARIABLE_DECL(g_trap_instance_signals,gsignal,volatile gpointer ) + #endif /* G_ENABLE_DEBUG */ + + VARIABLE_DECL(g_signal_key_bsa,gsignal,GBSearchArray *) + VARIABLE_DECL(g_signal_hlbsa_bconfig,gsignal,GBSearchConfig) + VARIABLE_DECL(g_class_closure_bconfig,gsignal,GBSearchConfig) + VARIABLE_DECL(g_handler_list_bsa_ht,gsignal,GHashTable *) + VARIABLE_DECL(g_recursive_emissions,gsignal,Emission *) + VARIABLE_DECL(g_restart_emissions ,gsignal,Emission *) + VARIABLE_DECL(g_handler_sequential_number ,gsignal,gulong) + VARIABLE_DECL_MACRO(g_signal_mutex,gsignal,GStaticMutex) + VARIABLE_DECL(g_n_signal_nodes,gsignal,guint) + VARIABLE_DECL(g_signal_nodes ,gsignal,SignalNode **) + VARIABLE_DECL(seq_hook_id ,g_signal_add_emission_hook ,gulong) + + //Global data of gsourceclosure.c + VARIABLE_DECL(our_type ,g_io_channel_get_type ,GType) + VARIABLE_DECL(etype ,g_io_condition_get_type,GType) + VARIABLE_DECL(closure_callback_funcs,gsourceclosure,GSourceCallbackFuncs) + + //Global data of gtype.c + VARIABLE_DECL(type_rw_lock,gtype,GStaticRWLock) + VARIABLE_DECL(static_n_class_cache_funcs,gtype,guint) + VARIABLE_DECL(static_class_cache_funcs ,gtype,ClassCacheFunc *) + VARIABLE_DECL(static_n_iface_check_funcs,gtype,guint) + VARIABLE_DECL(static_iface_check_funcs,gtype,IFaceCheckFunc *) + VARIABLE_DECL(static_quark_type_flags,gtype,GQuark) + VARIABLE_DECL(static_quark_iface_holder,gtype,GQuark) + VARIABLE_DECL(static_quark_dependants_array,gtype,GQuark) + VARIABLE_DECL(_g_type_debug_flags,gtype,GTypeDebugFlags) + VARIABLE_DECL(static_type_nodes_ht,gtype,GHashTable *) + VARIABLE_DECL_ARRAY(static_fundamental_type_nodes,gtype,TypeNode *,(G_TYPE_FUNDAMENTAL_MAX >> G_TYPE_FUNDAMENTAL_SHIFT) + 1) + VARIABLE_DECL(static_fundamental_next,gtype,GType) + VARIABLE_DECL_MACRO(instance_real_class,gtype,GStaticMutex) + VARIABLE_DECL(instance_real_class_bsa,gtype,GBSearchArray *) + VARIABLE_DECL(instance_real_class_bconfig,gtype,GBSearchConfig) + VARIABLE_DECL_ARRAY(debug_keys,g_type_init_with_debug_flags ,GDebugKey,2) + VARIABLE_DECL_MACRO(type_init_lock,g_type_init_with_debug_flags,GStaticMutex) + + //Global data of gtypemodule.c + VARIABLE_DECL(parent_class ,gtypemodule,gpointer) + VARIABLE_DECL(type_module_type,g_type_module_get_type ,GType) + + //Global data of gtypeplugin.c + VARIABLE_DECL(type_plugin_type ,g_type_plugin_get_type,GType) + + //Global data of gvalue.c + VARIABLE_DECL(transform_array,gvalue,GBSearchArray *) + VARIABLE_DECL(transform_bconfig,gvalue,GBSearchConfig) + + // Global data of gvaluetypes.c + VARIABLE_DECL(type ,g_gtype_get_type ,GType) + +}; + +#undef class + +__BEGIN_DECLS +struct global_struct *Gobject_ImpurePtr(); +__END_DECLS +#endif + +#endif /* __GOBJECT_WSD_H__ */