9c312311 |
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 | |
c5d77517 |
19 | #ifndef ATTRIBUTE_H |
20 | #define ATTRIBUTE_H |
21 | |
c47a6dc6 |
22 | /* FIXME : unnamed attributes not implemented */ |
bcc71139 |
23 | |
dc877563 |
24 | #include <glib-object.h> |
25 | #include <lttv/iattribute.h> |
f95bc830 |
26 | #include <stdio.h> |
c5d77517 |
27 | |
dc877563 |
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)) |
c5d77517 |
34 | |
c5d77517 |
35 | |
dc877563 |
36 | typedef struct _LttvAttribute LttvAttribute; |
37 | typedef struct _LttvAttributeClass LttvAttributeClass; |
c5d77517 |
38 | |
dc877563 |
39 | struct _LttvAttribute { |
40 | GObject parent; |
c5d77517 |
41 | |
dc877563 |
42 | /* private members */ |
43 | GHashTable *names; |
44 | GArray *attributes; |
45 | }; |
c5d77517 |
46 | |
dc877563 |
47 | struct _LttvAttributeClass { |
48 | GObjectClass parent; |
3e67c985 |
49 | |
dc877563 |
50 | }; |
c5d77517 |
51 | |
dc877563 |
52 | GType lttv_attribute_get_type (void); |
c5d77517 |
53 | |
c5d77517 |
54 | |
dc877563 |
55 | /* The functions exported in the IAttribute interface are also available |
56 | directly. */ |
c5d77517 |
57 | |
c5d77517 |
58 | |
dc877563 |
59 | /* Total number of attributes */ |
c5d77517 |
60 | |
dc877563 |
61 | unsigned int lttv_attribute_get_number(LttvAttribute *self); |
c5d77517 |
62 | |
c5d77517 |
63 | |
dc877563 |
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. */ |
c5d77517 |
66 | |
dc877563 |
67 | gboolean lttv_attribute_named(LttvAttribute *self, gboolean *homogeneous); |
c5d77517 |
68 | |
69 | |
dc877563 |
70 | /* Get the i th attribute along with its type and a pointer to its value. */ |
c5d77517 |
71 | |
dc877563 |
72 | LttvAttributeType lttv_attribute_get(LttvAttribute *self, unsigned i, |
73 | LttvAttributeName *name, LttvAttributeValue *v); |
74 | |
c5d77517 |
75 | |
dc877563 |
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. */ |
c5d77517 |
78 | |
dc877563 |
79 | LttvAttributeType lttv_attribute_get_by_name(LttvAttribute *self, |
80 | LttvAttributeName name, LttvAttributeValue *v); |
c5d77517 |
81 | |
82 | |
dc877563 |
83 | /* Add an attribute, which must not exist. The name is an empty string for |
84 | containers with unnamed attributes. */ |
c5d77517 |
85 | |
dc877563 |
86 | LttvAttributeValue lttv_attribute_add(LttvAttribute *self, |
87 | LttvAttributeName name, LttvAttributeType t); |
c5d77517 |
88 | |
c5d77517 |
89 | |
dc877563 |
90 | /* Remove an attribute */ |
c5d77517 |
91 | |
dc877563 |
92 | void lttv_attribute_remove(LttvAttribute *self, unsigned i); |
c5d77517 |
93 | |
dc877563 |
94 | void lttv_attribute_remove_by_name(LttvAttribute *self, |
95 | LttvAttributeName name); |
c5d77517 |
96 | |
c5d77517 |
97 | |
dc877563 |
98 | /* Create an empty iattribute object and add it as an attribute under the |
99 | specified name, or return an existing iattribute attribute. If an |
100 | attribute of that name already exists but is not a GObject supporting the |
101 | iattribute interface, return NULL. */ |
1b82f325 |
102 | |
b445142a |
103 | LttvAttribute* lttv_attribute_find_subdir(LttvAttribute *self, |
dc877563 |
104 | LttvAttributeName name); |
1b82f325 |
105 | |
dc877563 |
106 | gboolean lttv_attribute_find(LttvAttribute *self, LttvAttributeName name, |
107 | LttvAttributeType t, LttvAttributeValue *v); |
1b82f325 |
108 | |
1b82f325 |
109 | |
b445142a |
110 | /* Free recursively a tree of attributes. All contained gobject of type |
111 | LttvAttribute are freed (unreferenced) recursively. */ |
112 | |
c47a6dc6 |
113 | // Now done by default. |
114 | // void lttv_attribute_recursive_free(LttvAttribute *self); |
b445142a |
115 | |
116 | /* Add items from a tree of attributes to another tree. */ |
117 | |
118 | void lttv_attribute_recursive_add(LttvAttribute *dest, LttvAttribute *src); |
119 | |
f95bc830 |
120 | void |
121 | lttv_attribute_write_xml(LttvAttribute *self, FILE *fp, int pos, int indent); |
122 | |
123 | void lttv_attribute_read_xml(LttvAttribute *self, FILE *fp); |
124 | |
c5d77517 |
125 | #endif // ATTRIBUTE_H |