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