-/*****************************************************************************
- *Function name
- * ltt_event_cpu_i: get the cpu id where the event happens
- *Input params
- * e : an instance of an event type
- *Return value
- * unsigned : the cpu id
- ****************************************************************************/
-
-unsigned ltt_event_cpu_id(LttEvent *e)
-{
- char * c1, * c2, * c3;
- c1 = strrchr(e->tracefile->name,'\\');
- c2 = strrchr(e->tracefile->name,'/');
- if(c1 == NULL && c2 == NULL){
- return (unsigned)atoi(e->tracefile->name);
- }else if(c1 == NULL){
- c2++;
- return (unsigned)atoi(c2);
- }else if(c2 == NULL){
- c1++;
- return (unsigned)atoi(c1);
- }else{
- c3 = (c1 > c2) ? c1 : c2;
- c3++;
- return (unsigned)atoi(c3);
- }
-}
-
-/*****************************************************************************
- *Function name
- * ltt_event_data : get the raw data for the event
- *Input params
- * e : an instance of an event type
- *Return value
- * void * : pointer to the raw data for the event
- ****************************************************************************/
-
-void *ltt_event_data(LttEvent *e)
-{
- return e->data;
-}
-
-/*****************************************************************************
- *Function name
- * ltt_event_field_element_number
- * : The number of elements in a sequence field is specific
- * to each event. This function returns the number of
- * elements for an array or sequence field in an event.
- *Input params
- * e : an instance of an event type
- * f : a field of the instance
- *Return value
- * unsigned : the number of elements for an array/sequence field
- ****************************************************************************/
-
-unsigned ltt_event_field_element_number(LttEvent *e, LttField *f)
-{
- if(f->field_type->type_class != LTT_ARRAY &&
- f->field_type->type_class != LTT_SEQUENCE)
- return 0;
-
- if(f->field_type->type_class == LTT_ARRAY)
- return f->field_type->element_number;
- return (unsigned) getIntNumber(f->sequ_number_size, e + f->offset_root);
-}
-
-/*****************************************************************************
- *Function name
- * ltt_event_field_element_select
- * : Set the currently selected element for a sequence or
- * array field
- *Input params
- * e : an instance of an event type
- * f : a field of the instance
- * i : the ith element
- ****************************************************************************/
-
-void ltt_event_field_element_select(LttEvent *e, LttField *f, unsigned i)
-{
- unsigned element_number;
- LttField *fld;
- unsigned int k;
- int size;
- void *evD;
-
- if(f->field_type->type_class != LTT_ARRAY &&
- f->field_type->type_class != LTT_SEQUENCE)
- return ;
-
- element_number = ltt_event_field_element_number(e,f);
- /* Sanity check for i : 1..n only, and must be lower or equal element_number
- */
- if(element_number < i || i == 0) return;
-
- fld = f->child[0];
-
- evD = e->data + f->offset_root;
- size = 0;
- for(k=0;k<i;k++){
- size += ltt_event_refresh_fields(f->offset_root+size,size, fld, evD+size);
- }
- f->current_element = i - 1;
-}
-
-/*****************************************************************************
- * These functions extract data from an event after architecture specific
- * conversions
- ****************************************************************************/
-
-unsigned ltt_event_get_unsigned(LttEvent *e, LttField *f)
-{
- int revFlag = e->tracefile->trace->my_arch_endian ==
- e->tracefile->trace->system_description->endian ? 0:1;
- LttTypeEnum t = f->field_type->type_class;
-
- g_assert(t == LTT_UINT || t == LTT_ENUM);
-
- if(f->field_size == 1){
- guint8 x = *(guint8 *)(e->data + f->offset_root);
- return (unsigned int) x;
- }else if(f->field_size == 2){
- guint16 x = *(guint16 *)(e->data + f->offset_root);
- if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN)
- return (unsigned int) (revFlag ? GUINT16_FROM_BE(x): x);
- else
- return (unsigned int) (revFlag ? GUINT16_FROM_LE(x): x);
- }else if(f->field_size == 4){
- guint32 x = *(guint32 *)(e->data + f->offset_root);
- if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN)
- return (unsigned int) (revFlag ? GUINT32_FROM_BE(x): x);
- else
- return (unsigned int) (revFlag ? GUINT32_FROM_LE(x): x);
- }else if(f->field_size == 8){
- guint64 x = *(guint64 *)(e->data + f->offset_root);
- if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN)
- return (unsigned int) (revFlag ? GUINT64_FROM_BE(x): x);
- else
- return (unsigned int) (revFlag ? GUINT64_FROM_LE(x): x);
- }
- g_critical("ltt_event_get_unsigned : field size %i unknown", f->field_size);
- return 0;
-}
-
-int ltt_event_get_int(LttEvent *e, LttField *f)
-{
- int revFlag = e->tracefile->trace->my_arch_endian ==
- e->tracefile->trace->system_description->endian ? 0:1;
-
- g_assert(f->field_type->type_class == LTT_INT);
-
- if(f->field_size == 1){
- gint8 x = *(gint8 *)(e->data + f->offset_root);
- return (int) x;
- }else if(f->field_size == 2){
- gint16 x = *(gint16 *)(e->data + f->offset_root);
- if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN)
- return (int) (revFlag ? GINT16_FROM_BE(x): x);
- else
- return (int) (revFlag ? GINT16_FROM_LE(x): x);
- }else if(f->field_size == 4){
- gint32 x = *(gint32 *)(e->data + f->offset_root);
- if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN)
- return (int) (revFlag ? GINT32_FROM_BE(x): x);
- else
- return (int) (revFlag ? GINT32_FROM_LE(x): x);
- }else if(f->field_size == 8){
- gint64 x = *(gint64 *)(e->data + f->offset_root);
- if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN)
- return (int) (revFlag ? GINT64_FROM_BE(x): x);
- else
- return (int) (revFlag ? GINT64_FROM_LE(x): x);
- }
- g_critical("ltt_event_get_int : field size %i unknown", f->field_size);
- return 0;
-}
-
-unsigned long ltt_event_get_long_unsigned(LttEvent *e, LttField *f)
-{
- int revFlag = e->tracefile->trace->my_arch_endian ==
- e->tracefile->trace->system_description->endian ? 0:1;
- LttTypeEnum t = f->field_type->type_class;
-
- g_assert(t == LTT_UINT || t == LTT_ENUM);
-
- if(f->field_size == 1){
- guint8 x = *(guint8 *)(e->data + f->offset_root);
- return (unsigned long) x;
- }else if(f->field_size == 2){
- guint16 x = *(guint16 *)(e->data + f->offset_root);
- if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN)
- return (unsigned long) (revFlag ? GUINT16_FROM_BE(x): x);
- else
- return (unsigned long) (revFlag ? GUINT16_FROM_LE(x): x);
- }else if(f->field_size == 4){
- guint32 x = *(guint32 *)(e->data + f->offset_root);
- if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN)
- return (unsigned long) (revFlag ? GUINT32_FROM_BE(x): x);
- else
- return (unsigned long) (revFlag ? GUINT32_FROM_LE(x): x);
- }else if(f->field_size == 8){
- guint64 x = *(guint64 *)(e->data + f->offset_root);
- if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN)
- return (unsigned long) (revFlag ? GUINT64_FROM_BE(x): x);
- else
- return (unsigned long) (revFlag ? GUINT64_FROM_LE(x): x);
- }
- g_critical("ltt_event_get_long_unsigned : field size %i unknown", f->field_size);
- return 0;
-}
-
-long int ltt_event_get_long_int(LttEvent *e, LttField *f)
-{
- int revFlag = e->tracefile->trace->my_arch_endian ==
- e->tracefile->trace->system_description->endian ? 0:1;
-
- g_assert( f->field_type->type_class == LTT_INT);