]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Tidy sortlist.??
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 16 Jan 2024 11:34:06 +0000 (12:34 +0100)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Thu, 25 Apr 2024 09:31:40 +0000 (11:31 +0200)
pdns/sortlist.cc
pdns/sortlist.hh

index 11d309bc0bbe370a9971b9ea4a5e0dbf8de07c69..2b9ab56114cd2987d22d55722c19f7dda9daa595 100644 (file)
@@ -8,67 +8,66 @@ void SortList::clear()
 
 int SortList::getMaxOrder(const Netmask& formask) const
 {
-  int order=0;
-  
-  auto place = d_sortlist.lookup(formask);
-  if(place && place->first == formask) {
-    for(const auto& o : place->second.d_orders) 
-      order = std::max(order, o.second);
+  int order = 0;
+
+  const auto* place = d_sortlist.lookup(formask);
+  if (place != nullptr && place->first == formask) {
+    for (const auto& node_order : place->second.d_orders) {
+      order = std::max(order, node_order.second);
+    }
   }
-  
+
   return order;
 }
 
-void SortList::addEntry(const Netmask& formask, const Netmask& valmask, int order)
+void SortList::addEntry(const Netmask& covers, const Netmask& answermask, int order)
 {
-  if(order < 0) {
-    order=getMaxOrder(formask);
+  if (order < 0) {
+    order = getMaxOrder(covers);
     ++order;
   }
   //  cout<<"Adding for netmask "<<formask.toString()<<" the order instruction that "<<valmask.toString()<<" is order "<<order<<endl;
-  d_sortlist.insert(formask).second.d_orders.insert(valmask).second=order;
+  d_sortlist.insert(covers).second.d_orders.insert(answermask).second = order;
 }
 
 std::unique_ptr<SortListOrderCmp> SortList::getOrderCmp(const ComboAddress& who) const
 {
-  if(!d_sortlist.match(who)) {
-    return std::unique_ptr<SortListOrderCmp>();
+  if (!d_sortlist.match(who)) {
+    return {};
   }
-  auto fnd = d_sortlist.lookup(who);
+  const auto* fnd = d_sortlist.lookup(who);
   //  cerr<<"Returning sort order for "<<who.toString()<<", have "<<fnd->second.d_orders.size()<<" entries"<<endl;
   return make_unique<SortListOrderCmp>(fnd->second);
 }
 
 // call this with **stable_sort**
-bool SortListOrderCmp::operator()(const DNSRecord& ar, const DNSRecord& br) const
+bool SortListOrderCmp::operator()(const DNSRecord& lhs, const DNSRecord& rhs) const
 {
-  bool aAddr = (ar.d_type == QType::A || ar.d_type == QType::AAAA);
-  bool bAddr = (br.d_type == QType::A || br.d_type == QType::AAAA);
+  bool aAddr = (lhs.d_type == QType::A || lhs.d_type == QType::AAAA);
+  bool bAddr = (rhs.d_type == QType::A || rhs.d_type == QType::AAAA);
 
   // anything address related is always 'larger', rest is equal
-  
-  if(aAddr && !bAddr)
+  if (aAddr && !bAddr) {
     return false;
-  else if(!aAddr && bAddr)
+  }
+  if (!aAddr && bAddr) {
     return true;
-  else if(!aAddr && !bAddr)
+  }
+  if (!aAddr && !bAddr) {
     return false;
-  
+  }
+
+  int aOrder = std::numeric_limits<int>::max();
+  int bOrder = aOrder;
 
-  int aOrder=std::numeric_limits<int>::max();
-  int bOrder=aOrder;
+  ComboAddress laddr = getAddr(lhs);
+  ComboAddress raddr = getAddr(rhs);
 
-  ComboAddress a=getAddr(ar), b=getAddr(br);
-  
-  if(d_slo.d_orders.match(a))
-    aOrder = d_slo.d_orders.lookup(a)->second;
-  else {
-    //    cout<<"Could not find anything for "<<a.toString()<<" in our orders!"<<endl;
+  if (d_slo.d_orders.match(laddr)) {
+    aOrder = d_slo.d_orders.lookup(laddr)->second;
   }
-  if(d_slo.d_orders.match(b))
-    bOrder = d_slo.d_orders.lookup(b)->second;
-  else {
-    //    cout<<"Could not find anything for "<<b.toString()<<" in our orders!"<<endl;
+  if (d_slo.d_orders.match(raddr)) {
+    bOrder = d_slo.d_orders.lookup(raddr)->second;
   }
   return aOrder < bOrder;
 }
index cd043295acd4c1e42cfc8522cc22846820eb3fd4..f260db0a6acbb451ff80cfd2f3e237fdf18f3169 100644 (file)
@@ -20,6 +20,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 #pragma once
+
 #include "iputils.hh"
 #include "dnsrecords.hh"
 
@@ -28,21 +29,26 @@ struct SortListOrder
   NetmaskTree<int> d_orders;
 };
 
-
 struct SortListOrderCmp
 {
-  SortListOrderCmp(const SortListOrder& slo) : d_slo(slo) {}
-  bool operator()(const DNSRecord& a, const DNSRecord& b) const;
-  const SortListOrder d_slo;
+  SortListOrderCmp(SortListOrder slo) :
+    d_slo(std::move(slo)) {}
+  bool operator()(const DNSRecord& lhs, const DNSRecord& rhs) const;
+  SortListOrder d_slo;
 };
 
-class SortList {
+class SortList
+{
 public:
   void clear();
-  void addEntry(const Netmask& covers, const Netmask& answermask, int order=-1);
-  int getMaxOrder(const Netmask& formask) const;
-  std::unique_ptr<SortListOrderCmp> getOrderCmp(const ComboAddress& who) const;
+  void addEntry(const Netmask& covers, const Netmask& answermask, int order = -1);
+  [[nodiscard]] int getMaxOrder(const Netmask& formask) const;
+  [[nodiscard]] std::unique_ptr<SortListOrderCmp> getOrderCmp(const ComboAddress& who) const;
+  [[nodiscard]] const NetmaskTree<SortListOrder>& getTree() const
+  {
+    return d_sortlist;
+  }
+
 private:
-  
   NetmaskTree<SortListOrder> d_sortlist;
 };