replacement of the vector by a map in rtable
authorBorovkova Elena <borovkovaes@iitp.ru>
Tue, 07 Jul 2009 18:27:53 +0400
changeset 5564 95a3e7beb97b
parent 5563 7acda714e66f
child 5565 23159ea8f1f7
replacement of the vector by a map in rtable
src/routing/aodv/aodv-packet.cc
src/routing/aodv/aodv-rtable.cc
src/routing/aodv/aodv-rtable.h
--- a/src/routing/aodv/aodv-packet.cc	Tue Jul 07 17:45:08 2009 +0400
+++ b/src/routing/aodv/aodv-packet.cc	Tue Jul 07 18:27:53 2009 +0400
@@ -501,6 +501,7 @@
   {
     os << (*j).first << ", " << (*j).second << "\n";
   }
+  os << "No delete flag " << (*this).GetNoDelete() << "\n";
 }
 
 void
--- a/src/routing/aodv/aodv-rtable.cc	Tue Jul 07 17:45:08 2009 +0400
+++ b/src/routing/aodv/aodv-rtable.cc	Tue Jul 07 18:27:53 2009 +0400
@@ -136,19 +136,17 @@
 bool
 aodv_rtable::rt_lookup(Ipv4Address id, aodv_rt_entry & rt) const
 {
-  std::vector<aodv_rt_entry>::const_iterator i = std::find (rthead.begin(), rthead.end(), id);
+  std::map<Ipv4Address, aodv_rt_entry>::const_iterator i = rthead.find(id);
   if (i == rthead.end()) return false;
-  rt = *i;
+  rt = (*i).second;
   return true;
 }
 
 bool
 aodv_rtable::rt_delete(Ipv4Address dst)
 {
-  std::vector<aodv_rt_entry>::iterator i = std::remove(rthead.begin(), rthead.end(), dst);
-  if (i == rthead.end()) return false;
-  rthead.erase (i, rthead.end());
-  return true;
+  if(rthead.erase (dst) != 0) return true;
+  return false;
 }
 
 bool
@@ -157,15 +155,15 @@
   aodv_rt_entry dummy;
   if(rt_lookup(rt.rt_dst, dummy))
   	return false;
-  rthead.push_back(rt);
+  rthead.insert(std::make_pair(rt.rt_dst, rt));
   return true;
 }
 
 void
 aodv_rtable::SetEntryState (Ipv4Address id, uint8_t state)
 {
-  std::vector<aodv_rt_entry>::iterator i = std::find (rthead.begin(), rthead.end(), id);
-  if (i != rthead.end()) i->rt_flags = state;
+  std::map<Ipv4Address, aodv_rt_entry>::iterator i = rthead.find(id);
+  if (i != rthead.end()) (*i).second.rt_flags = state;
 }
 
 #ifdef RUN_SELF_TESTS
@@ -213,6 +211,7 @@
   NS_TEST_ASSERT(entry1 == dst2);
   NS_TEST_ASSERT(!rtable.rt_lookup(dst1, entry1));
   NS_TEST_ASSERT(rtable.rt_delete(dst2));
+  NS_TEST_ASSERT(!rtable.rt_delete(dst2));
   NS_TEST_ASSERT(!rtable.rt_lookup(dst2, entry1));
   
   return result;
--- a/src/routing/aodv/aodv-rtable.h	Tue Jul 07 17:45:08 2009 +0400
+++ b/src/routing/aodv/aodv-rtable.h	Tue Jul 07 18:27:53 2009 +0400
@@ -25,7 +25,7 @@
 #define __aodv_rtable_h__
 
 #include <cassert>
-#include <vector>
+#include <map>
 #include <sys/types.h>
 #include "ns3/ipv4.h"
 #include "ns3/nstime.h"
@@ -190,7 +190,7 @@
   void SetEntryState (Ipv4Address dst, uint8_t state /*TODO use enum*/);
 
 private:
-  std::vector<aodv_rt_entry> rthead;
+  std::map<Ipv4Address, aodv_rt_entry> rthead;
 };
 
 }}