git-svn-id: http://ltt.polymtl.ca/svn@181 04897980-b3bd-0310-b5e0-8ef037075253
[lttv.git] / ltt / branches / poly / ltt / type.c
CommitLineData
6cd62ccf 1#include <stdio.h>
2
fcdf0ec2 3#include <ltt/LTTTypes.h>
6cd62ccf 4#include "parser.h"
5#include <ltt/type.h>
6
7static unsigned intSizes[] = {
8 sizeof(int8_t), sizeof(int16_t), sizeof(int32_t), sizeof(int64_t),
9 sizeof(short) };
10
11static unsigned floatSizes[] = {
12 0, 0, sizeof(float), sizeof(double), 0, sizeof(float), sizeof(double) };
13
14
15/*****************************************************************************
16 *Function name
17 * ltt_eventtype_name : get the name of the event type
18 *Input params
19 * et : an event type
20 *Return value
21 * char * : the name of the event type
22 ****************************************************************************/
23
963b5f2d 24char *ltt_eventtype_name(LttEventType *et)
6cd62ccf 25{
26 return et->name;
27}
28
29/*****************************************************************************
30 *Function name
31 * ltt_eventtype_description : get the description of the event type
32 *Input params
33 * et : an event type
34 *Return value
35 * char * : the description of the event type
36 ****************************************************************************/
37
963b5f2d 38char *ltt_eventtype_description(LttEventType *et)
6cd62ccf 39{
40 return et->description;
41}
42
963b5f2d 43/*****************************************************************************
44 *Function name
45 * ltt_eventtype_facility : get the facility which contains the event type
46 *Input params
47 * et : an event type
48 *Return value
49 * LttFacility * : the facility
50 ****************************************************************************/
51
52LttFacility *ltt_eventtype_facility(LttEventType *et)
53{
54 return et->facility;
55}
56
57/*****************************************************************************
58 *Function name
59 * ltt_eventtype_relative_id : get the relative id of the event type
60 *Input params
61 * et : an event type
62 *Return value
33690006 63 * unsigned : the relative id
963b5f2d 64 ****************************************************************************/
65
33690006 66unsigned ltt_eventtype_relative_id(LttEventType *et)
963b5f2d 67{
33690006 68 return et->index;
963b5f2d 69}
70
71/*****************************************************************************
72 *Function name
73 * ltt_eventtype_id : get the id of the event type
74 *Input params
75 * et : an event type
76 *Return value
33690006 77 * unsigned : the id
963b5f2d 78 ****************************************************************************/
79
33690006 80unsigned ltt_eventtype_id(LttEventType *et)
963b5f2d 81{
33690006 82 return et->facility->base_id + et->index;
963b5f2d 83}
84
6cd62ccf 85/*****************************************************************************
86 *Function name
87 * ltt_eventtype_type : get the type of the event type
88 *Input params
89 * et : an event type
90 *Return value
963b5f2d 91 * LttType * : the type of the event type
6cd62ccf 92 ****************************************************************************/
93
963b5f2d 94LttType *ltt_eventtype_type(LttEventType *et)
6cd62ccf 95{
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{
314 return f->field_type;
315}
316
This page took 0.035624 seconds and 4 git commands to generate.