diff options
Diffstat (limited to 'navit/xmlconfig.h')
-rw-r--r-- | navit/xmlconfig.h | 65 |
1 files changed, 50 insertions, 15 deletions
diff --git a/navit/xmlconfig.h b/navit/xmlconfig.h index dd24253bc..d1c544a3f 100644 --- a/navit/xmlconfig.h +++ b/navit/xmlconfig.h @@ -65,23 +65,54 @@ typedef void *(*object_func_ref)(void *); typedef void *(*object_func_unref)(void *); +/** + * @brief Basic functions for Navit objects + * + * This is the minimal list of functions which is supported by every Navit object. + * + * Some members can be NULL for certain object types: while Navit does not mandate this function to be + * implemented for every object class, the function may need to be defined for some object classes. + * + * Default implementations are available for every function in the list except `create`, `init` and + * `dup`. These can be set directly, or type-specific implementations can call through to them as they + * see fit. + */ struct object_func { - enum attr_type type; - void *(*create)(struct attr *parent, struct attr **attrs); - int (*get_attr)(void *, enum attr_type type, struct attr *attr, struct attr_iter *iter); - struct attr_iter *(*iter_new)(void *); - void (*iter_destroy)(struct attr_iter *); - int (*set_attr)(void *, struct attr *attr); - int (*add_attr)(void *, struct attr *attr); - int (*remove_attr)(void *, struct attr *attr); - int (*init)(void *); - void (*destroy)(void *); - void *(*dup)(void *); - void *(*ref)(void *); - void *(*unref)(void *); + enum attr_type type; /**< The object type */ + void *(*create)(struct attr *parent, struct attr **attrs); /**< Function to create a new object instance */ + int (*get_attr)(void *, enum attr_type type, struct attr *attr, struct attr_iter *iter); /**< Function + * to get an attribute of the object, + * set to `navit_object_get_attr` for default behavior */ + struct attr_iter *(*iter_new)(void *); /**< Function to obtain a new attribute iterator, + * set to `navit_object_attr_iter_new` for default + * behavior, can be NULL for some object types */ + void (*iter_destroy)(struct attr_iter *); /**< Function to destroy an attribute iterator, + * set to `navit_object_attr_iter_destroy` for default + * behavior, can be NULL for some object types */ + int (*set_attr)(void *, struct attr *attr); /**< Function to set an attribute, + * set to `navit_object_set_attr` for default behavior, + * can be NULL for some object types */ + int (*add_attr)(void *, struct attr *attr); /**< Function to add an attribute, + * set to `navit_object_add_attr` for default behavior, + * can be NULL for some object types */ + int (*remove_attr)(void *, struct attr *attr); /**< Function to remove an attribute, + * set to `navit_object_remove_attr` for default behavior, + * can be NULL for some object types */ + int (*init)(void *); /**< TODO, + * can be NULL for some object types */ + void (*destroy)(void *); /**< Function to destroy an object instance, + * set to `navit_object_destroy` for default behavior, + * can be NULL */ + void *(*dup)(void *); /**< Function to create a copy of an object instance */ + void *(*ref)(void *); /**< Function to increase the reference count for an + * object instance, set to `navit_object_ref` for + * default behavior, can be NULL for some object types */ + void *(*unref)(void *); /**< Function to decrease the reference count for an + * object instance, set to `navit_object_unref` for + * default behavior, can be NULL for some object types */ }; -extern struct object_func map_func, mapset_func, navit_func, osd_func, tracking_func, vehicle_func, maps_func, layout_func, roadprofile_func, vehicleprofile_func, layer_func, config_func, profile_option_func, script_func, log_func, speech_func, navigation_func, route_func, audio_func; +extern struct object_func map_func, mapset_func, navit_func, osd_func, tracking_func, vehicle_func, maps_func, layout_func, roadprofile_func, vehicleprofile_func, layer_func, config_func, profile_option_func, script_func, log_func, speech_func, navigation_func, route_func, traffic_func, audio_func; #define HAS_OBJECT_FUNC(x) ((x) == attr_map || (x) == attr_mapset || (x) == attr_navit || (x) == attr_osd || (x) == attr_trackingo || (x) == attr_vehicle || (x) == attr_maps || (x) == attr_layout || (x) == attr_roadprofile || (x) == attr_vehicleprofile || (x) == attr_layer || (x) == attr_config || (x) == attr_profile_option || (x) == attr_script || (x) == attr_log || (x) == attr_speech || (x) == attr_navigation || (x) == attr_route) @@ -108,7 +139,11 @@ typedef GError xmlerror; /* prototypes */ enum attr_type; struct object_func *object_func_lookup(enum attr_type type); -void xml_parse_text(const char *document, void *data, void (*start)(xml_context *, const char *, const char **, const char **, void *, GError **), void (*end)(xml_context *, const char *, void *, GError **), void (*text)(xml_context*, const char *, gsize, void *, GError **)); +int xml_parse_file(char *filename, void *data, + void (*start)(xml_context *, const char *, const char **, const char **, void *, GError **), + void (*end)(xml_context *, const char *, void *, GError **), + void (*text)(xml_context *, const char *, gsize, void *, GError **)); +int xml_parse_text(const char *document, void *data, void (*start)(xml_context *, const char *, const char **, const char **, void *, GError **), void (*end)(xml_context *, const char *, void *, GError **), void (*text)(xml_context*, const char *, gsize, void *, GError **)); gboolean config_load(const char *filename, xmlerror **error); //static void xinclude(GMarkupParseContext *context, const gchar **attribute_names, const gchar **attribute_values, struct xmldocument *doc_old, xmlerror **error); |