1 /* This file is part of the Linux Trace Toolkit viewer
2 * Copyright (C) 2003-2004 Xiangxiu Yang
3 * 2005 Mathieu Desnoyers
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License Version 2.1 as published by the Free Software Foundation.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
29 #include "ltt-private.h"
32 static unsigned intSizes
[] = {
33 sizeof(int8_t), sizeof(int16_t), sizeof(int32_t), sizeof(int64_t),
36 static unsigned floatSizes
[] = {
37 0, 0, sizeof(float), sizeof(double), 0, sizeof(float), sizeof(double) };
40 typedef enum _intSizesNames
{ SIZE_INT8
, SIZE_INT16
, SIZE_INT32
,
41 SIZE_INT64
, SIZE_SHORT
, INT_SIZES_NUMBER
}
44 static char * typeNames
[] = {
45 "int_fixed", "uint_fixed", "pointer", "char", "uchar", "short", "ushort",
46 "int", "uint", "long", "ulong", "size_t", "ssize_t", "off_t", "float",
47 "string", "enum", "array", "sequence", "struct", "union", "none" };
50 #define FLOAT_SIZES_NUMBER 7
53 /*****************************************************************************
55 * ltt_eventtype_name : get the name of the event type
59 * GQuark : the name of the event type
60 ****************************************************************************/
62 GQuark
ltt_eventtype_name(LttEventType
*et
)
67 /*****************************************************************************
69 * ltt_eventtype_description : get the description of the event type
73 * char * : the description of the event type
74 ****************************************************************************/
76 gchar
*ltt_eventtype_description(LttEventType
*et
)
78 return et
->description
;
81 /*****************************************************************************
83 * ltt_eventtype_facility : get the facility which contains the event type
87 * LttFacility * : the facility
88 ****************************************************************************/
90 LttFacility
*ltt_eventtype_facility(LttEventType
*et
)
95 /*****************************************************************************
97 * ltt_eventtype_id : get the id of the event type
102 ****************************************************************************/
104 guint8
ltt_eventtype_id(LttEventType
*et
)
109 /*****************************************************************************
111 * ltt_type_name : get the name of the type
115 * GQuark : the name of the type
116 ****************************************************************************/
118 GQuark
ltt_type_name(LttType
*t
)
120 return g_quark_from_static_string(typeNames
[t
->type_class
]);
123 /*****************************************************************************
125 * ltt_field_name : get the name of the field
129 * char * : the name of the type
130 ****************************************************************************/
132 GQuark
ltt_field_name(LttField
*f
)
136 /*****************************************************************************
138 * ltt_type_class : get the type class of the type
142 * LttTypeEnum : the type class of the type
143 ****************************************************************************/
145 LttTypeEnum
ltt_type_class(LttType
*t
)
147 return t
->type_class
;
150 /*****************************************************************************
152 * ltt_type_size : obtain the type size. The size is the number of bytes
153 * for primitive types (INT, UINT, FLOAT, ENUM)
154 * or the size for the unsigned integer length count for
161 * returns 0 if erroneous, and show a critical warning message.
162 ****************************************************************************/
164 guint
ltt_type_size(LttTrace
* trace
, LttType
*t
)
168 switch(t
->type_class
) {
178 if(likely(t
->size
< INT_SIZES_NUMBER
))
179 size
= intSizes
[t
->size
];
184 if(likely(t
->size
< FLOAT_SIZES_NUMBER
))
185 size
= floatSizes
[t
->size
];
209 g_warning("no size known for the type");
213 /*****************************************************************************
215 * ltt_type_element_type : obtain the type of nested elements for arrays
220 * LttType : the type of nested element of array or sequence
221 ****************************************************************************/
223 LttType
*ltt_type_element_type(LttType
*t
)
225 LttType
*element_type
;
228 if(unlikely(t
->type_class
!= LTT_ARRAY
&& t
->type_class
!= LTT_SEQUENCE
))
231 if(t
->type_class
== LTT_ARRAY
)
232 field
= &g_array_index(t
->fields
, LttField
, 0);
234 field
= &g_array_index(t
->fields
, LttField
, 1);
235 element_type
= ltt_field_type(field
);
241 /*****************************************************************************
243 * ltt_type_element_number : obtain the number of elements for enums
247 * unsigned : the number of elements for arrays
248 ****************************************************************************/
249 unsigned ltt_type_element_number(LttType
*t
)
253 if(likely(t
->type_class
== LTT_ENUM
))
254 // Permits non full enums ret = g_hash_table_size(t->enum_map);
255 ret
= (unsigned)(t
->highest_value
- t
->lowest_value
);
260 /*****************************************************************************
262 * ltt_type_member_number : obtain the number of data members for structure
266 * unsigned : the number of members for structure
267 ****************************************************************************/
269 unsigned ltt_type_member_number(LttType
*t
)
273 if(likely(t
->type_class
== LTT_STRUCT
|| t
->type_class
== LTT_UNION
))
274 ret
= t
->fields
->len
;
280 /*****************************************************************************
282 * ltt_enum_string_get : for enumerations, obtain the symbolic string
283 * associated with a value (0 to n - 1 for an
284 * enumeration of n elements)
287 * i : index of the member
289 * char * : symbolic string associated with a value
290 ****************************************************************************/
292 GQuark
ltt_enum_string_get(LttType
*t
, gulong i
)
294 if(likely(t
->type_class
== LTT_ENUM
))
295 return (GQuark
)g_hash_table_lookup(t
->enum_map
, (gpointer
)i
);
300 /*****************************************************************************
302 * ltt_field_element : obtain the field of nested elements for arrays and
307 * LttField * : the field of the nested element
308 ****************************************************************************/
310 LttField
*ltt_field_element(LttField
*f
)
312 LttField
*nest
= NULL
;
314 if(likely(f
->field_type
->type_class
== LTT_ARRAY
||
315 f
->field_type
->type_class
== LTT_SEQUENCE
))
322 /*****************************************************************************
324 * ltt_field_member_by_name : obtain the field of data members for structure
327 * name : name of the field
329 * LttField * : the field of the nested element
330 ****************************************************************************/
332 LttField
*ltt_field_member_by_name(LttField
*f
, GQuark name
)
334 LttField
*field_member
;
336 g_assert(f
->field_type
.type_class
== LTT_STRUCT
||
337 f
->field_type
.type_class
== LTT_UNION
);
339 field_member
= g_datalist_id_get_data(&f
->field_type
.fields_by_name
, name
);
345 /*****************************************************************************
347 * ltt_field_member : obtain the field of data members for structure
350 * i : index of member field
352 * LttField * : the field of the nested element
353 ****************************************************************************/
355 LttField
*ltt_field_member(LttField
*f
, guint i
)
357 LttField
*field_member
;
359 g_assert(f
->field_type
.type_class
== LTT_STRUCT
||
360 f
->field_type
.type_class
== LTT_UNION
);
361 g_assert(i
< f
->field_type
.fields
->len
);
363 field_member
= &g_array_index(f
->field_type
.fields
, LttField
, i
);
368 /*****************************************************************************
370 * ltt_field_type : obtain the type of the field
374 * ltt_tyoe * : the type of field
375 ****************************************************************************/
377 LttType
*ltt_field_type(LttField
*f
)
379 if(unlikely(!f
))return NULL
;
380 return &f
->field_type
;
383 int ltt_field_size(LttField
* f
)
385 if(unlikely(!f
))return 0;
386 return f
->field_size
;
390 /*****************************************************************************
392 * ltt_eventtype_num_fields : get the number of fields of the event
394 * e : an instance of an event type
396 * guint : number of fields
397 ****************************************************************************/
399 guint
ltt_eventtype_num_fields(LttEventType
*event_type
)
401 if(unlikely(!event_type
)) return 0;
403 return event_type
->fields
->len
;
406 /*****************************************************************************
408 * ltt_eventtype_field : get the i th field of the event
410 * e : an instance of an event type
413 * LttField * : The requested field, or NULL
414 ****************************************************************************/
416 LttField
*ltt_eventtype_field(LttEventType
*event_type
, guint i
)
418 if(unlikely(!event_type
)) return NULL
;
420 if(i
>= event_type
->fields
->len
) return NULL
;
422 return &g_array_index(event_type
->fields
, LttField
, i
);
426 /*****************************************************************************
428 * ltt_eventtype_field_by_name : get a field of the event
430 * e : an instance of an event type
433 * LttField * : The requested field, or NULL
434 ****************************************************************************/
436 LttField
*ltt_eventtype_field_by_name(LttEventType
*event_type
, GQuark name
)
438 if(unlikely(!event_type
)) return NULL
;
440 return (LttField
*)g_datalist_id_get_data(&event_type
->fields_by_name
, name
);
This page took 0.039399 seconds and 4 git commands to generate.