Filter for selecting trace and tracefile
[lttv.git] / ltt / branches / poly / ltt / type.c
CommitLineData
6cd62ccf 1#include <stdio.h>
2
6cd62ccf 3#include "parser.h"
4#include <ltt/type.h>
5
6static unsigned intSizes[] = {
7 sizeof(int8_t), sizeof(int16_t), sizeof(int32_t), sizeof(int64_t),
8 sizeof(short) };
9
10static unsigned floatSizes[] = {
11 0, 0, sizeof(float), sizeof(double), 0, sizeof(float), sizeof(double) };
12
13
14/*****************************************************************************
15 *Function name
16 * ltt_eventtype_name : get the name of the event type
17 *Input params
18 * et : an event type
19 *Return value
20 * char * : the name of the event type
21 ****************************************************************************/
22
963b5f2d 23char *ltt_eventtype_name(LttEventType *et)
6cd62ccf 24{
25 return et->name;
26}
27
28/*****************************************************************************
29 *Function name
30 * ltt_eventtype_description : get the description of the event type
31 *Input params
32 * et : an event type
33 *Return value
34 * char * : the description of the event type
35 ****************************************************************************/
36
963b5f2d 37char *ltt_eventtype_description(LttEventType *et)
6cd62ccf 38{
39 return et->description;
40}
41
963b5f2d 42/*****************************************************************************
43 *Function name
44 * ltt_eventtype_facility : get the facility which contains the event type
45 *Input params
46 * et : an event type
47 *Return value
48 * LttFacility * : the facility
49 ****************************************************************************/
50
51LttFacility *ltt_eventtype_facility(LttEventType *et)
52{
53 return et->facility;
54}
55
56/*****************************************************************************
57 *Function name
58 * ltt_eventtype_relative_id : get the relative id of the event type
59 *Input params
60 * et : an event type
61 *Return value
33690006 62 * unsigned : the relative id
963b5f2d 63 ****************************************************************************/
64
33690006 65unsigned ltt_eventtype_relative_id(LttEventType *et)
963b5f2d 66{
33690006 67 return et->index;
963b5f2d 68}
69
70/*****************************************************************************
71 *Function name
72 * ltt_eventtype_id : get the id of the event type
73 *Input params
74 * et : an event type
75 *Return value
33690006 76 * unsigned : the id
963b5f2d 77 ****************************************************************************/
78
33690006 79unsigned ltt_eventtype_id(LttEventType *et)
963b5f2d 80{
33690006 81 return et->facility->base_id + et->index;
963b5f2d 82}
83
6cd62ccf 84/*****************************************************************************
85 *Function name
86 * ltt_eventtype_type : get the type of the event type
87 *Input params
88 * et : an event type
89 *Return value
963b5f2d 90 * LttType * : the type of the event type
6cd62ccf 91 ****************************************************************************/
92
963b5f2d 93LttType *ltt_eventtype_type(LttEventType *et)
6cd62ccf 94{
a2331fa0 95 if(!et->root_field) return NULL;
6cd62ccf 96 return et->root_field->field_type;
97}
98
963b5f2d 99/*****************************************************************************
100 *Function name
101 * ltt_eventtype_field : get the root filed of the event type
102 *Input params
103 * et : an event type
104 *Return value
105 * LttField * : the root filed of the event type
106 ****************************************************************************/
107
108LttField *ltt_eventtype_field(LttEventType *et)
109{
110 return et->root_field;
111}
112
6cd62ccf 113/*****************************************************************************
114 *Function name
115 * ltt_type_name : get the name of the type
116 *Input params
117 * t : a type
118 *Return value
119 * char * : the name of the type
120 ****************************************************************************/
121
963b5f2d 122char *ltt_type_name(LttType *t)
6cd62ccf 123{
124 return t->element_name;
125}
126
127/*****************************************************************************
128 *Function name
129 * ltt_type_class : get the type class of the type
130 *Input params
131 * t : a type
132 *Return value
963b5f2d 133 * LttTypeEnum : the type class of the type
6cd62ccf 134 ****************************************************************************/
135
963b5f2d 136LttTypeEnum ltt_type_class(LttType *t)
6cd62ccf 137{
138 return t->type_class;
139}
140
141/*****************************************************************************
142 *Function name
143 * ltt_type_size : obtain the type size. The size is the number of bytes
144 * for primitive types (INT, UINT, FLOAT, ENUM), or the
145 * size for the unsigned integer length count for sequences
146 *Input params
147 * tf : trace file
148 * t : a type
149 *Return value
150 * unsigned : the type size
151 ****************************************************************************/
152
963b5f2d 153unsigned ltt_type_size(LttTrace * trace, LttType *t)
6cd62ccf 154{
155 if(t->type_class==LTT_STRUCT || t->type_class==LTT_ARRAY ||
156 t->type_class==LTT_STRING) return 0;
157
158 if(t->type_class == LTT_FLOAT){
159 return floatSizes[t->size];
160 }else{
161 if(t->size < sizeof(intSizes)/sizeof(unsigned))
162 return intSizes[t->size];
163 else{
963b5f2d 164 LttArchSize size = trace->system_description->size;
62c72abf 165 if(size == LTT_LP32){
166 if(t->size == 5)return sizeof(int16_t);
167 else return sizeof(int32_t);
168 }
169 else if(size == LTT_ILP32 || size == LTT_LP64){
170 if(t->size == 5)return sizeof(int32_t);
171 else{
172 if(size == LTT_ILP32) return sizeof(int32_t);
173 else return sizeof(int64_t);
174 }
175 }
176 else if(size == LTT_ILP64)return sizeof(int64_t);
6cd62ccf 177 }
178 }
179}
180
181/*****************************************************************************
182 *Function name
183 * ltt_type_element_type : obtain the type of nested elements for arrays
184 * and sequences
185 *Input params
186 * t : a type
187 *Return value
963b5f2d 188 * LttType : the type of nested element of array or sequence
6cd62ccf 189 ****************************************************************************/
190
963b5f2d 191LttType *ltt_type_element_type(LttType *t)
6cd62ccf 192{
c687f6c8 193 if(t->type_class != LTT_ARRAY && t->type_class != LTT_SEQUENCE)
6cd62ccf 194 return NULL;
195 return t->element_type[0];
196}
197
198/*****************************************************************************
199 *Function name
200 * ltt_type_element_number : obtain the number of elements for arrays
201 *Input params
202 * t : a type
203 *Return value
204 * unsigned : the number of elements for arrays
205 ****************************************************************************/
206
963b5f2d 207unsigned ltt_type_element_number(LttType *t)
6cd62ccf 208{
209 if(t->type_class != LTT_ARRAY)
210 return 0;
211 return t->element_number;
212}
213
214/*****************************************************************************
215 *Function name
216 * ltt_type_member_number : obtain the number of data members for structure
217 *Input params
218 * t : a type
219 *Return value
220 * unsigned : the number of members for structure
221 ****************************************************************************/
222
963b5f2d 223unsigned ltt_type_member_number(LttType *t)
6cd62ccf 224{
c687f6c8 225 if(t->type_class != LTT_STRUCT && t->type_class != LTT_UNION)
6cd62ccf 226 return 0;
227 return t->element_number;
228}
229
230/*****************************************************************************
231 *Function name
232 * ltt_type_member_type : obtain the type of a data members in a structure
233 *Input params
234 * t : a type
235 * i : index of the member
236 *Return value
963b5f2d 237 * LttType * : the type of structure member
6cd62ccf 238 ****************************************************************************/
239
02007847 240LttType *ltt_type_member_type(LttType *t, unsigned i, char ** name)
6cd62ccf 241{
02007847 242 if(t->type_class != LTT_STRUCT){*name == NULL; return NULL;}
243 if(i >= t->element_number || i < 0 ){*name = NULL; return NULL;}
fe974fde 244 *name = t->element_type[i]->element_name;
89d4760c 245 return t->element_type[i];
6cd62ccf 246}
247
248/*****************************************************************************
249 *Function name
250 * ltt_enum_string_get : for enumerations, obtain the symbolic string
251 * associated with a value (0 to n - 1 for an
252 * enumeration of n elements)
253 *Input params
254 * t : a type
255 * i : index of the member
256 *Return value
257 * char * : symbolic string associated with a value
258 ****************************************************************************/
259
963b5f2d 260char *ltt_enum_string_get(LttType *t, unsigned i)
6cd62ccf 261{
262 if(t->type_class != LTT_ENUM) return NULL;
89d4760c 263 if(i >= t->element_number || i < 0 ) return NULL;
264 return t->enum_strings[i];
6cd62ccf 265}
266
267/*****************************************************************************
268 *Function name
269 * ltt_field_element : obtain the field of nested elements for arrays and
270 * sequence
271 *Input params
272 * f : a field
273 *Return value
963b5f2d 274 * LttField * : the field of the nested element
6cd62ccf 275 ****************************************************************************/
276
963b5f2d 277LttField *ltt_field_element(LttField *f)
6cd62ccf 278{
c687f6c8 279 if(f->field_type->type_class != LTT_ARRAY &&
6cd62ccf 280 f->field_type->type_class != LTT_SEQUENCE)
281 return NULL;
282
283 return f->child[0];
284}
285
286/*****************************************************************************
287 *Function name
288 * ltt_field_member : obtain the filed of data members for structure
289 *Input params
290 * f : a field
291 * i : index of member field
292 *Return value
963b5f2d 293 * LttField * : the field of the nested element
6cd62ccf 294 ****************************************************************************/
295
963b5f2d 296LttField *ltt_field_member(LttField *f, unsigned i)
6cd62ccf 297{
298 if(f->field_type->type_class != LTT_STRUCT) return NULL;
89d4760c 299 if(i < 0 || i >= f->field_type->element_number) return NULL;
300 return f->child[i];
6cd62ccf 301}
302
303/*****************************************************************************
304 *Function name
305 * ltt_field_type : obtain the type of the field
306 *Input params
307 * f : a field
308 *Return value
309 * ltt_tyoe * : the type of field
310 ****************************************************************************/
311
963b5f2d 312LttType *ltt_field_type(LttField *f)
6cd62ccf 313{
a2331fa0 314 if(!f)return NULL;
6cd62ccf 315 return f->field_type;
316}
317
This page took 0.037813 seconds and 4 git commands to generate.