gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r25754 - gnunet/src/ats


From: gnunet
Subject: [GNUnet-SVN] r25754 - gnunet/src/ats
Date: Fri, 11 Jan 2013 13:39:20 +0100

Author: wachs
Date: 2013-01-11 13:39:20 +0100 (Fri, 11 Jan 2013)
New Revision: 25754

Modified:
   gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c
Log:
global calculation


Modified: gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c    2013-01-11 
10:37:13 UTC (rev 25753)
+++ gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c    2013-01-11 
12:39:20 UTC (rev 25754)
@@ -1054,7 +1054,11 @@
   struct PreferenceClient *cur;
   struct PreferencePeer *p;
   int i;
+  int clients;
+  float p_rel_global;
+  float *dest;
 
+
   GNUNET_assert (NULL != solver);
   GNUNET_assert (NULL != client);
   GNUNET_assert (NULL != peer);
@@ -1153,7 +1157,7 @@
     cur->f_total[kind] += p->f[kind];
 
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Client %p has total preference for %s of 
%f\n",
-      cur,
+      cur->client,
       GNUNET_ATS_print_preference_type (kind),
       cur->f_total[kind]);
 
@@ -1163,7 +1167,7 @@
     /* Calculate relative preference for specific kind */
     p->f_rel[kind] = (cur->f_total[kind] + p->f[kind]) / cur->f_total[kind];
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Client %p: peer `%s' has relative 
preference for %s of %f\n",
-        cur,
+        cur->client,
         GNUNET_i2s (&p->id),
         GNUNET_ATS_print_preference_type (kind),
         p->f_rel[kind]);
@@ -1175,15 +1179,44 @@
     {
         p->f_rel_total += p->f_rel[i];
     }
-    p->f_rel_total /=  GNUNET_ATS_PreferenceCount - 1.0;
+    p->f_rel_total /=  (GNUNET_ATS_PreferenceCount - 1.0); /* -1 due to 
terminator */
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Client %p: peer `%s' has total relative 
preference of %f\n",
-        cur,
+        cur->client,
         GNUNET_i2s (&p->id),
         p->f_rel_total);
   }
 
+  /* Calculcate global total relative peer preference over all clients */
+  p_rel_global = 0.0;
+  clients = 0;
+  for (cur = s->pc_head; NULL != cur; cur = cur->next)
+  {
+      for (p = cur->p_head; NULL != p; p = p->next)
+          if (0 == memcmp (&p->id, peer, sizeof (p->id)))
+              break;
+      if (NULL != p)
+      {
+          clients++;
+          p_rel_global += p->f_rel_total;
+      }
+  }
+  p_rel_global /= clients;
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Global preference value for peer `%s': %f\n",
+      GNUNET_i2s (peer), p_rel_global);
+
   /* Update global map */
-  /* TODO */
+  if (NULL != (dest = GNUNET_CONTAINER_multihashmap_get(s->prefs, 
&peer->hashPubKey)))
+      (*dest) = p_rel_global;
+  else
+  {
+      dest = GNUNET_malloc (sizeof (float));
+      (*dest) = p_rel_global;
+      GNUNET_CONTAINER_multihashmap_put(s->prefs,
+          &peer->hashPubKey,
+          dest,
+          GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
+  }
+
 }
 
 /* end of gnunet-service-ats_addresses_simplistic.c */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]