13ab9fcb |
1 | /* This file is part of the Linux Trace Toolkit viewer |
2 | * Copyright (C) 2003-2004 Michel Dagenais |
3 | * |
4 | * This program is free software; you can redistribute it and/or modify |
5 | * it under the terms of the GNU General Public License Version 2 as |
6 | * published by the Free Software Foundation; |
7 | * |
8 | * This program is distributed in the hope that it will be useful, |
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 | * GNU General Public License for more details. |
12 | * |
13 | * You should have received a copy of the GNU General Public License |
14 | * along with this program; if not, write to the Free Software |
15 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
16 | * MA 02111-1307, USA. |
17 | */ |
18 | |
19 | #ifndef ATTRIBUTE_H |
20 | #define ATTRIBUTE_H |
21 | |
22 | /* FIXME : unnamed attributes not implemented */ |
23 | |
24 | #include <glib-object.h> |
25 | #include <lttv/iattribute.h> |
26 | #include <stdio.h> |
27 | |
28 | #define LTTV_ATTRIBUTE_TYPE (lttv_attribute_get_type ()) |
29 | #define LTTV_ATTRIBUTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_ATTRIBUTE_TYPE, LttvAttribute)) |
30 | #define LTTV_ATTRIBUTE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_ATTRIBUTE_TYPE, LttvAttributeClass)) |
31 | #define LTTV_IS_ATTRIBUTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LTTV_ATTRIBUTE_TYPE)) |
32 | #define LTTV_IS_ATTRIBUTE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_ATTRIBUTE_TYPE)) |
33 | #define LTTV_ATTRIBUTE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_ATTRIBUTE_TYPE, LttvAttributeClass)) |
34 | |
35 | |
36 | typedef struct _LttvAttribute LttvAttribute; |
37 | typedef struct _LttvAttributeClass LttvAttributeClass; |
38 | |
39 | struct _LttvAttribute { |
40 | GObject parent; |
41 | |
42 | /* private members */ |
43 | GHashTable *names; |
44 | GArray *attributes; |
45 | }; |
46 | |
47 | struct _LttvAttributeClass { |
48 | GObjectClass parent; |
49 | |
50 | }; |
51 | |
52 | GType lttv_attribute_get_type (void); |
53 | |
54 | |
55 | /* The functions exported in the IAttribute interface are also available |
56 | directly. */ |
57 | |
58 | |
59 | /* Total number of attributes */ |
60 | |
61 | unsigned int lttv_attribute_get_number(LttvAttribute *self); |
62 | |
63 | |
64 | /* Container type. Named (fields in struct or elements in a hash table) |
65 | or unnamed (elements in an array) attributes, homogeneous type or not. */ |
66 | |
67 | gboolean lttv_attribute_named(LttvAttribute *self, gboolean *homogeneous); |
68 | |
69 | |
70 | /* Get the i th attribute along with its type and a pointer to its value. */ |
71 | |
72 | LttvAttributeType lttv_attribute_get(LttvAttribute *self, unsigned i, |
73 | LttvAttributeName *name, LttvAttributeValue *v, gboolean *is_named); |
74 | |
75 | |
76 | /* Get the named attribute in the table along with its type and a pointer to |
77 | its value. If the named attribute does not exist, the type is LTTV_NONE. */ |
78 | |
79 | LttvAttributeType lttv_attribute_get_by_name(LttvAttribute *self, |
80 | LttvAttributeName name, LttvAttributeValue *v); |
81 | |
82 | |
83 | /* Add an attribute, which must not exist. The name is an empty string for |
84 | containers with unnamed attributes. */ |
85 | |
86 | LttvAttributeValue lttv_attribute_add(LttvAttribute *self, |
87 | LttvAttributeName name, LttvAttributeType t); |
88 | |
89 | LttvAttributeValue lttv_attribute_add_unnamed(LttvAttribute *self, |
90 | LttvAttributeName name, LttvAttributeType t); |
91 | |
92 | /* Remove an attribute */ |
93 | |
94 | void lttv_attribute_remove(LttvAttribute *self, unsigned i); |
95 | |
96 | void lttv_attribute_remove_by_name(LttvAttribute *self, |
97 | LttvAttributeName name); |
98 | |
99 | |
100 | /* Create an empty iattribute object and add it as an attribute under the |
101 | specified name, or return an existing iattribute attribute. If an |
102 | attribute of that name already exists but is not a GObject supporting the |
103 | iattribute interface, return NULL. */ |
104 | |
105 | LttvAttribute* lttv_attribute_find_subdir(LttvAttribute *self, |
106 | LttvAttributeName name); |
107 | |
108 | LttvAttribute* lttv_attribute_find_subdir_unnamed(LttvAttribute *self, |
109 | LttvAttributeName name); |
110 | |
111 | |
112 | gboolean lttv_attribute_find(LttvAttribute *self, LttvAttributeName name, |
113 | LttvAttributeType t, LttvAttributeValue *v); |
114 | |
115 | |
116 | /* Free recursively a tree of attributes. All contained gobject of type |
117 | LttvAttribute are freed (unreferenced) recursively. */ |
118 | |
119 | // Now done by default. |
120 | // void lttv_attribute_recursive_free(LttvAttribute *self); |
121 | |
122 | /* Add items from a tree of attributes to another tree. */ |
123 | |
124 | void lttv_attribute_recursive_add(LttvAttribute *dest, LttvAttribute *src); |
125 | |
126 | void |
127 | lttv_attribute_write_xml(LttvAttribute *self, FILE *fp, int pos, int indent); |
128 | |
129 | void lttv_attribute_read_xml(LttvAttribute *self, FILE *fp); |
130 | |
131 | #endif // ATTRIBUTE_H |