-/*****************************************************************************
- *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);
-
- if(f->field_size == 1){
- gint8 x = *(gint8 *)(e->data + f->offset_root);
- return (long) 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 (long) (revFlag ? GINT16_FROM_BE(x): x);
- else
- return (long) (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 (long) (revFlag ? GINT32_FROM_BE(x): x);
- else
- return (long) (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 (long) (revFlag ? GINT64_FROM_BE(x): x);
- else
- return (long) (revFlag ? GINT64_FROM_LE(x): x);
- }
- g_critical("ltt_event_get_long_int : field size %i unknown", f->field_size);
- return 0;
-}
-
-float ltt_event_get_float(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_FLOAT && f->field_size == 4);
-
- if(revFlag == 0) return *(float *)(e->data + f->offset_root);
- else{
- guint32 aInt;
- memcpy((void*)&aInt, e->data + f->offset_root, 4);
- aInt = ___swab32(aInt);
- return ((float)aInt);
- }
-}
-
-double ltt_event_get_double(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_FLOAT && f->field_size == 8);
-
- if(revFlag == 0) return *(double *)(e->data + f->offset_root);
- else{
- guint64 aInt;
- memcpy((void*)&aInt, e->data + f->offset_root, 8);
- aInt = ___swab64(aInt);
- return ((double)aInt);
- }
-}
-
-/*****************************************************************************
- * The string obtained is only valid until the next read from
- * the same tracefile.
- ****************************************************************************/
-
-char *ltt_event_get_string(LttEvent *e, LttField *f)
-{
- g_assert(f->field_type->type_class == LTT_STRING);
-
- return (char*)g_strdup((char*)(e->data + f->offset_root));
-}