Updated mantissa functions, no longer linking to math
authorAndreas Tonnesen <andreto@olsr.org>
Wed, 25 May 2005 13:37:33 +0000 (13:37 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Wed, 25 May 2005 13:37:33 +0000 (13:37 +0000)
src/lq_packet.c
src/mantissa.c
src/mantissa.h
src/olsr_plugin_io.h
src/plugin.c
src/rebuild_packet.c

index 9a10011..6fbaf22 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_packet.c,v 1.15 2005/03/09 23:06:30 tlopatic Exp $
+ * $Id: lq_packet.c,v 1.16 2005/05/25 13:36:41 kattemat Exp $
  */
 
 #include "olsr_protocol.h"
@@ -65,7 +65,7 @@ create_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
   // initialize the static fields
 
   lq_hello->comm.type = LQ_HELLO_MESSAGE;
-  lq_hello->comm.vtime = me_to_double(outif->valtimes.hello);
+  lq_hello->comm.vtime = ME_TO_DOUBLE(outif->valtimes.hello);
   lq_hello->comm.size = 0;
 
   COPY_IP(&lq_hello->comm.orig, &main_addr);
@@ -74,7 +74,7 @@ create_lq_hello(struct lq_hello_message *lq_hello, struct interface *outif)
   lq_hello->comm.hops = 0;
   lq_hello->comm.seqno = get_msg_seqno();
 
-  lq_hello->htime = me_to_double(outif->hello_etime);
+  lq_hello->htime = outif->hello_etime;
   lq_hello->will = olsr_cnf->willingness;
 
   lq_hello->neigh = NULL;
@@ -151,7 +151,7 @@ create_lq_tc(struct lq_tc_message *lq_tc, struct interface *outif)
   // initialize the static fields
 
   lq_tc->comm.type = LQ_TC_MESSAGE;
-  lq_tc->comm.vtime = me_to_double(outif->valtimes.tc);
+  lq_tc->comm.vtime = ME_TO_DOUBLE(outif->valtimes.tc);
   lq_tc->comm.size = 0;
 
   COPY_IP(&lq_tc->comm.orig, &main_addr);
@@ -552,7 +552,7 @@ static void *deserialize_common(struct olsr_common *comm, void *ser)
       olsr_head_v4 = (struct olsr_header_v4 *)ser;
 
       comm->type = olsr_head_v4->type;
-      comm->vtime = me_to_double(olsr_head_v4->vtime);
+      comm->vtime = ME_TO_DOUBLE(olsr_head_v4->vtime);
       comm->size = ntohs(olsr_head_v4->size);
 
       COPY_IP(&comm->orig, &olsr_head_v4->orig);
@@ -569,7 +569,7 @@ static void *deserialize_common(struct olsr_common *comm, void *ser)
   olsr_head_v6 = (struct olsr_header_v6 *)ser;
 
   comm->type = olsr_head_v6->type;
-  comm->vtime = me_to_double(olsr_head_v6->vtime);
+  comm->vtime = ME_TO_DOUBLE(olsr_head_v6->vtime);
   comm->size = ntohs(olsr_head_v6->size);
 
   COPY_IP(&comm->orig, &olsr_head_v6->orig);
@@ -602,7 +602,7 @@ deserialize_lq_hello(struct lq_hello_message *lq_hello, void *ser)
 
   limit = ((unsigned char *)ser) + lq_hello->comm.size;
 
-  lq_hello->htime = me_to_double(head->htime);
+  lq_hello->htime = ME_TO_DOUBLE(head->htime);
   lq_hello->will = head->will;
 
   lq_hello->neigh = NULL;
index 3e38ed7..6631282 100644 (file)
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: mantissa.c,v 1.7 2005/02/20 18:52:18 kattemat Exp $
+ * $Id: mantissa.c,v 1.8 2005/05/25 13:36:26 kattemat Exp $
  */
 
 
 #include "mantissa.h"
-#include "math.h"
-#include "olsr_protocol.h"
 
 /**
  *Function that converts a double to a mantissa/exponent
 olsr_u8_t
 double_to_me(double interval)
 {
-  int a, b;
+  olsr_u8_t a, b;
 
   b = 0;
 
-  while(interval / VTIME_SCALE_FACTOR >= pow((double)2, (double)b))
+  while(interval / VTIME_SCALE_FACTOR >= (1<<b))
     b++;
 
-  b--;
-  if(b < 0)
+  if(b == 0)
     {
       a = 1;
       b = 0;
     } 
   else 
-    if (b > 15)
-      {
-       a = 15;
-       b = 15;
-      } 
-    else 
-      { 
-       a = (int)(16*((double)interval/(VTIME_SCALE_FACTOR*(double)pow(2,b))-1));
-       while(a >= 16)
-         {
-           a -= 16;
-           b++;
-         }
-      }
-
-  //printf("Generated mantissa/exponent(%d/%d): %d from %f\n", a, b, (olsr_u8_t) (a*16+b), interval);
-  //printf("Resolves back to: %f\n", me_to_double((olsr_u8_t) (a*16+b)));
-  return (olsr_u8_t) (a*16+b);
-}
-
-
-
-
-/**
- *Function that converts a mantissa/exponent 8bit value back
- *to double as described in RFC3626:
- *
- * value = C*(1+a/16)*2^b [in seconds]
- *
- *  where a is the integer represented by the four highest bits of the
- *  field and b the integer represented by the four lowest bits of the
- *  field.
- *
- *@param me the 8 bit mantissa/exponen value
- *
- *@return a double value
- */
-double
-me_to_double(olsr_u8_t me)
-{
-  int a, b;
-
-  a = me>>4;
-  b = me - a*16;
-
-  return (double)(VTIME_SCALE_FACTOR*(1+(double)a/16)*(double)pow(2,b));
+    {
+      b--;
+      if (b > 15)
+       {
+         a = 15;
+         b = 15;
+       } 
+      else 
+       { 
+         a = (int)(16*((double)interval/(VTIME_SCALE_FACTOR*(double)(1<<b))-1));
+         while(a >= 16)
+           {
+             a -= 16;
+             b++;
+           }
+       }
+    }
+  //printf("Generated mantissa/exponent(%d/%d): %d from %f\n", a, b, (olsr_u8_t) (a*16+b), interval);  //printf("Resolves back to: %f\n", ME_TO_DOUBLE(((a<<4)|(b&0x0F))));
+  return (olsr_u8_t) ((a<<4)|(b&0x0F));
 }
index 5ca0b8d..0f0b3c9 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: mantissa.h,v 1.7 2005/02/20 18:52:18 kattemat Exp $
+ * $Id: mantissa.h,v 1.8 2005/05/25 13:36:26 kattemat Exp $
  */
 
 
 #define _OLSR_MANTISSA
 
 #include "olsr_types.h"
+#include "olsr_protocol.h"
 
 
-olsr_u8_t
-double_to_me(double);
+/**
+ * Macro for converting a mantissa/exponent 8bit value back
+ * to double as described in RFC3626:
+ *
+ * value = C*(1+a/16)*2^b [in seconds]
+ *
+ *  where a is the integer represented by the four highest bits of the
+ *  field and b the integer represented by the four lowest bits of the
+ *  field.
+ *
+ * me is the 8 bit mantissa/exponent value
+ *
+ */
+#define ME_TO_DOUBLE(me) \
+  (double)(VTIME_SCALE_FACTOR*(1+(double)(me>>4)/16)*(double)(1<<(me&0x0F)))
 
-double
-me_to_double(olsr_u8_t);
+#ifndef OLSR_PLUGIN
 
+olsr_u8_t
+double_to_me(double);
 
 #endif
+#endif
index fef46e2..119ca15 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsr_plugin_io.h,v 1.15 2004/12/19 17:14:02 kattemat Exp $
+ * $Id: olsr_plugin_io.h,v 1.16 2005/05/25 13:37:33 kattemat Exp $
  */
 
 
@@ -61,6 +61,8 @@
  *         0.4.9 : GETD__LINK_SET added
  *                 GETF__OLSR_LOOKUP_MPRS_SET added
  *                 - Andreas
+ *         0.4.10: GETF__ME_TO_DOUBLE removed
+ *                 - Andreas
  */
 
 /*
 #define GETF__OLSR_PRINTF                          513
 #define GETF__OLSR_MALLOC                          514
 #define GETF__DOUBLE_TO_ME                         515
-#define GETF__ME_TO_DOUBLE                         516
 #define GETF__ADD_LOCAL_HNA4_ENTRY                 517
 #define GETF__REMOVE_LOCAL_HNA4_ENTRY              518
 #define GETF__ADD_LOCAL_HNA6_ENTRY                 519
index ec5f907..815863e 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: plugin.c,v 1.19 2005/03/06 19:33:35 kattemat Exp $
+ * $Id: plugin.c,v 1.20 2005/05/25 13:36:59 kattemat Exp $
  */
 
 
@@ -138,10 +138,6 @@ olsr_plugin_io(int cmd, void *data, size_t size)
       ptr = &double_to_me;
       memcpy(data, &ptr, size);
       break;
-    case(GETF__ME_TO_DOUBLE):
-      ptr = &me_to_double;
-      memcpy(data, &ptr, size);
-      break;
     case(GETF__OLSR_REGISTER_SCHEDULER_EVENT):
       ptr = &olsr_register_scheduler_event;
       memcpy(data, &ptr, size);
index 258b853..c71edee 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: rebuild_packet.c,v 1.15 2005/02/27 18:39:43 kattemat Exp $
+ * $Id: rebuild_packet.c,v 1.16 2005/05/25 13:36:41 kattemat Exp $
  */
 
 
@@ -89,7 +89,7 @@ hna_chgestruct(struct hna_message *hmsg, union olsr_message *m)
       //printf("HNA from %s\n\n", olsr_ip_to_string((union olsr_ip_addr *)&hmsg->originator));
 
       /* Get vtime */
-      hmsg->vtime = me_to_double(m->v4.olsr_vtime);
+      hmsg->vtime = ME_TO_DOUBLE(m->v4.olsr_vtime);
 
       tmp_pairs = NULL;
       hna_pairs = NULL;
@@ -128,7 +128,7 @@ hna_chgestruct(struct hna_message *hmsg, union olsr_message *m)
       hmsg->hop_count =  m->v6.hopcnt;
       
       /* Get vtime */
-      hmsg->vtime = me_to_double(m->v6.olsr_vtime);
+      hmsg->vtime = ME_TO_DOUBLE(m->v6.olsr_vtime);
       
       tmp_pairs = NULL;
       hna_pairs = NULL;
@@ -217,7 +217,7 @@ mid_chgestruct(struct mid_message *mmsg, union olsr_message *m)
       mmsg->mid_addr = NULL;
 
       /* Get vtime */
-      mmsg->vtime = me_to_double(m->v4.olsr_vtime);
+      mmsg->vtime = ME_TO_DOUBLE(m->v4.olsr_vtime);
 
       //printf("Sequencenuber of MID from %s is %d\n", ip_to_string(&mmsg->addr), mmsg->mid_seqno);
 
@@ -267,7 +267,7 @@ mid_chgestruct(struct mid_message *mmsg, union olsr_message *m)
       mmsg->mid_addr = NULL;
 
       /* Get vtime */
-      mmsg->vtime = me_to_double(m->v6.olsr_vtime);
+      mmsg->vtime = ME_TO_DOUBLE(m->v6.olsr_vtime);
 
       //printf("Sequencenuber of MID from %s is %d\n", ip_to_string(&mmsg->addr), mmsg->mid_seqno);
 
@@ -382,10 +382,10 @@ hello_chgestruct(struct hello_message *hmsg, union olsr_message *m)
 
 
       /* Get vtime */
-      hmsg->vtime = me_to_double(m->v4.olsr_vtime);
+      hmsg->vtime = ME_TO_DOUBLE(m->v4.olsr_vtime);
 
       /* Get htime */
-      hmsg->htime = me_to_double(m->v4.message.hello.htime);
+      hmsg->htime = ME_TO_DOUBLE(m->v4.message.hello.htime);
 
       /* Willingness */
       hmsg->willingness = m->v4.message.hello.willingness;
@@ -433,10 +433,10 @@ hello_chgestruct(struct hello_message *hmsg, union olsr_message *m)
       hmsg->packet_seq_number = ntohs(m->v6.seqno);
 
       /* Get vtime */
-      hmsg->vtime = me_to_double(m->v6.olsr_vtime);
+      hmsg->vtime = ME_TO_DOUBLE(m->v6.olsr_vtime);
 
       /* Get htime */
-      hmsg->htime = me_to_double(m->v6.message.hello.htime);
+      hmsg->htime = ME_TO_DOUBLE(m->v6.message.hello.htime);
 
       /* Willingness */
       hmsg->willingness = m->v6.message.hello.willingness;
@@ -518,7 +518,7 @@ tc_chgestruct(struct tc_message *tmsg, union olsr_message *m, union olsr_ip_addr
 
 
       /* Get vtime */
-      tmsg->vtime = me_to_double(m->v4.olsr_vtime);
+      tmsg->vtime = ME_TO_DOUBLE(m->v4.olsr_vtime);
 
       OLSR_PRINTF(3, "Got TC vtime: %f\n", tmsg->vtime)
 
@@ -557,7 +557,7 @@ tc_chgestruct(struct tc_message *tmsg, union olsr_message *m, union olsr_ip_addr
       /* Check if sender is symmetric neighbor here !! */
       
       /* Get vtime */
-      tmsg->vtime = me_to_double(m->v6.olsr_vtime);
+      tmsg->vtime = ME_TO_DOUBLE(m->v6.olsr_vtime);
 
       OLSR_PRINTF(3, "Got TC vtime: %f\n", tmsg->vtime)