float handling
authorcompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Tue, 23 Aug 2005 20:41:21 +0000 (20:41 +0000)
committercompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Tue, 23 Aug 2005 20:41:21 +0000 (20:41 +0000)
git-svn-id: http://ltt.polymtl.ca/svn@1064 04897980-b3bd-0310-b5e0-8ef037075253

ltt/branches/poly/ltt/event.c
ltt/branches/poly/ltt/ltt-private.h

index 2827cff9aaf7fd1b038f643b0d96088eff671d09..3f8dab9c378224c6d7328daa042f6c1f6b88d7c1 100644 (file)
@@ -614,35 +614,29 @@ gint64 ltt_event_get_long_int(LttEvent *e, LttField *f)
 
 float ltt_event_get_float(LttEvent *e, LttField *f)
 {
-  gboolean reverse_byte_order = LTT_GET_BO(e->tracefile);
+  g_assert(LTT_HAS_FLOAT(e->tracefile));
+  gboolean reverse_byte_order = LTT_GET_FLOAT_BO(e->tracefile);
 
   g_assert(f->field_type->type_class == LTT_FLOAT && f->field_size == 4);
 
   if(reverse_byte_order == 0) return *(float *)(e->data + f->offset_root);
   else{
-//    guint32 aInt;
     void *ptr = e->data + f->offset_root;
-//    memcpy((void*)&aInt, e->data + f->offset_root, 4);
-//    aInt = bswap_32();
-//    return ((float)aInt);
     return *(float*)bswap_32(*(guint32*)ptr);
   }
 }
 
 double ltt_event_get_double(LttEvent *e, LttField *f)
 {
-  gboolean reverse_byte_order = LTT_GET_BO(e->tracefile);
+  g_assert(LTT_HAS_FLOAT(e->tracefile));
+  gboolean reverse_byte_order = LTT_GET_FLOAT_BO(e->tracefile);
 
   g_assert(f->field_type->type_class == LTT_FLOAT && f->field_size == 8);
 
   if(reverse_byte_order == 0) return *(double *)(e->data + f->offset_root);
-  else{
+  else {
     void *ptr = e->data + f->offset_root;
     return *(double*)bswap_64(*(guint64*)ptr);
-    //guint64 aInt;
-    //memcpy((void*)&aInt, e->data + f->offset_root, 8);
-    //aInt = ___swab64(aInt);
-    //return ((double)aInt);
   }
 }
 
index 929e54aeb898a32c62a352d2fb8e08971cf74485..25f2d82443f3b5c94e1977b2ceee9df7fd8bafa2 100644 (file)
@@ -22,6 +22,7 @@
 #include <glib.h>
 #include <sys/types.h>
 #include <ltt/ltt.h>
+#include <endian.h>
 
 
 #ifndef max
 
 /* Hardcoded facilities */
 #define LTT_FACILITY_CORE 0
+/* Byte ordering */
+#define LTT_GET_BO(t) ((t)->reverse_bo)
+
+#define LTT_HAS_FLOAT(t) ((t)->float_word_order!=0)
+#define LTT_GET_FLOAT_BO(t) \
+  (((t)->float_word_order==__BYTE_ORDER)?0:1)
+
 
 /* Hardcoded core events */
 enum ltt_core_events {
@@ -317,6 +326,7 @@ struct _LttTracefile{
   //unsigned block_size;               //block_size
   unsigned int num_blocks;           //number of blocks in the file
   gboolean  reverse_bo;              //must we reverse byte order ?
+  gboolean  float_word_order;        //what is the byte order of floats ?
 
        /* Current event */
   LttEvent event;                    //Event currently accessible in the trace
@@ -391,7 +401,5 @@ struct _LttSystemDescription {
 //#define EVENT_ID_SIZE     sizeof(guint16)
 //#define EVENT_HEADER_SIZE (TIMESTAMP_SIZE + EVENT_ID_SIZE)
 
-#define LTT_GET_BO(t) ((t)->reverse_bo)
-
 
 #endif /* LTT_PRIVATE_H */
This page took 0.024857 seconds and 4 git commands to generate.