Browse Source

client: FrameDecider: port groups tree to SAvl

ambrop7 13 năm trước cách đây
mục cha
commit
fec901e526
3 tập tin đã thay đổi với 20 bổ sung36 xóa
  1. 6 11
      client/FrameDecider.c
  2. 5 10
      client/FrameDecider.h
  3. 9 15
      client/FrameDecider_groups_tree.h

+ 6 - 11
client/FrameDecider.c

@@ -61,7 +61,7 @@ static int compare_macs (const uint8_t *mac1, const uint8_t *mac2)
 #include <structure/SAvl_impl.h>
 
 #include "FrameDecider_groups_tree.h"
-#include <structure/CAvl_impl.h>
+#include <structure/SAvl_impl.h>
 
 #include "FrameDecider_multicast_tree.h"
 #include <structure/CAvl_impl.h>
@@ -201,13 +201,8 @@ static void add_group_to_peer (FrameDeciderPeer *o, uint32_t group)
 {
     FrameDecider *d = o->d;
     
-    struct _FrameDecider_group_entry *group_entry;
-    
-    // lookup if the peer already has that group
-    FDGroupsTreeRef ref = FDGroupsTree_LookupExact(&o->groups_tree, 0, group);
-    if (FDGroupsTreeIsValidRef(ref)) {
-        group_entry = ref.ptr;
-        
+    struct _FrameDecider_group_entry *group_entry = FDGroupsTree_LookupExact(&o->groups_tree, 0, group);
+    if (group_entry) {
         // move to end of used list
         LinkedList2_Remove(&o->group_entries_used, &group_entry->list_node);
         LinkedList2_Append(&o->group_entries_used, &group_entry->list_node);
@@ -232,7 +227,7 @@ static void add_group_to_peer (FrameDeciderPeer *o, uint32_t group)
             remove_from_multicast(d, group_entry);
             
             // remove from peer's groups tree
-            FDGroupsTree_Remove(&o->groups_tree, 0, FDGroupsTreeDeref(0, group_entry));
+            FDGroupsTree_Remove(&o->groups_tree, 0, group_entry);
             
             // remove from used list
             LinkedList2_Remove(&o->group_entries_used, &group_entry->list_node);
@@ -245,7 +240,7 @@ static void add_group_to_peer (FrameDeciderPeer *o, uint32_t group)
         group_entry->group = group;
         
         // insert to peer's groups tree
-        int res = FDGroupsTree_Insert(&o->groups_tree, 0, FDGroupsTreeDeref(0, group_entry), NULL);
+        int res = FDGroupsTree_Insert(&o->groups_tree, 0, group_entry, NULL);
         ASSERT(res)
         
         // add to multicast
@@ -272,7 +267,7 @@ static void remove_group_entry (struct _FrameDecider_group_entry *group_entry)
     remove_from_multicast(d, group_entry);
     
     // remove from peer's groups tree
-    FDGroupsTree_Remove(&peer->groups_tree, 0, FDGroupsTreeDeref(0, group_entry));
+    FDGroupsTree_Remove(&peer->groups_tree, 0, group_entry);
     
     // remove from used list
     LinkedList2_Remove(&peer->group_entries_used, &group_entry->list_node);

+ 5 - 10
client/FrameDecider.h

@@ -47,12 +47,16 @@
 
 struct _FrameDeciderPeer;
 struct _FrameDecider_mac_entry;
+struct _FrameDecider_group_entry;
 
 typedef const uint8_t *FDMacsTree_key;
 
 #include "FrameDecider_macs_tree.h"
 #include <structure/SAvl_decl.h>
 
+#include "FrameDecider_groups_tree.h"
+#include <structure/SAvl_decl.h>
+
 struct _FrameDecider_mac_entry {
     struct _FrameDeciderPeer *peer;
     LinkedList2Node list_node; // node in FrameDeciderPeer.mac_entries_free or FrameDeciderPeer.mac_entries_used
@@ -68,10 +72,7 @@ struct _FrameDecider_group_entry {
     // defined when used:
     // basic group data
     uint32_t group; // group address
-    // node in FrameDeciderPeer.groups_tree, indexed by group
-    struct _FrameDecider_group_entry *tree_child[2];
-    struct _FrameDecider_group_entry *tree_parent;
-    int8_t tree_balance;
+    FDGroupsTreeNode tree_node; // node in FrameDeciderPeer.groups_tree, indexed by group
     // all that folows is managed by add_to_multicast() and remove_from_multicast()
     LinkedList3Node sig_list_node; // node in list of group entries with the same sig
     btime_t timer_endtime;
@@ -86,12 +87,6 @@ struct _FrameDecider_group_entry {
     } master;
 };
 
-typedef struct _FrameDecider_group_entry FDGroupsTree_entry;
-typedef struct _FrameDecider_group_entry *FDGroupsTree_link;
-
-#include "FrameDecider_groups_tree.h"
-#include <structure/CAvl_decl.h>
-
 typedef struct _FrameDecider_group_entry FDMulticastTree_entry;
 typedef struct _FrameDecider_group_entry *FDMulticastTree_link;
 

+ 9 - 15
client/FrameDecider_groups_tree.h

@@ -1,15 +1,9 @@
-#define CAVL_PARAM_NAME FDGroupsTree
-#define CAVL_PARAM_FEATURE_COUNTS 0
-#define CAVL_PARAM_FEATURE_KEYS_ARE_INDICES 0
-#define CAVL_PARAM_FEATURE_NOKEYS 0
-#define CAVL_PARAM_TYPE_ENTRY FDGroupsTree_entry
-#define CAVL_PARAM_TYPE_LINK FDGroupsTree_link
-#define CAVL_PARAM_TYPE_KEY uint32_t
-#define CAVL_PARAM_TYPE_ARG int
-#define CAVL_PARAM_VALUE_NULL ((FDGroupsTree_link)NULL)
-#define CAVL_PARAM_FUN_DEREF(arg, link) (link)
-#define CAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) B_COMPARE((entry1).ptr->group, (entry2).ptr->group)
-#define CAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) B_COMPARE((key1), (entry2).ptr->group)
-#define CAVL_PARAM_MEMBER_CHILD tree_child
-#define CAVL_PARAM_MEMBER_BALANCE tree_balance
-#define CAVL_PARAM_MEMBER_PARENT tree_parent
+#define SAVL_PARAM_NAME FDGroupsTree
+#define SAVL_PARAM_FEATURE_COUNTS 0
+#define SAVL_PARAM_FEATURE_NOKEYS 0
+#define SAVL_PARAM_TYPE_ENTRY struct _FrameDecider_group_entry
+#define SAVL_PARAM_TYPE_KEY uint32_t
+#define SAVL_PARAM_TYPE_ARG int
+#define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) B_COMPARE((entry1)->group, (entry2)->group)
+#define SAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) B_COMPARE((key1), (entry2)->group)
+#define SAVL_PARAM_MEMBER_NODE tree_node