[svn] commit: r845 - in /branches/each-ds/src: bin/auth/Makefile.am lib/auth/cpp/data_source.cc lib/dns/cpp/rrsetlist.cc lib/dns/cpp/rrsetlist.h

BIND 10 source code commits bind10-changes at lists.isc.org
Tue Feb 16 22:49:50 UTC 2010


Author: each
Date: Tue Feb 16 22:49:50 2010
New Revision: 845

Log:
checkpoint:
 - reconcile upper-level data source with new RRsetList
 - changed RRsetList to implement std::vector<RRsetPtr> so that
   iterators would Just Work.  we can now iterate over the
   list as before, and can also access RRsetList members
   via either an integer index or an RRType index, e.g.:
           RRsetPtr rrset = data[RRType::NS()];

Modified:
    branches/each-ds/src/bin/auth/Makefile.am
    branches/each-ds/src/lib/auth/cpp/data_source.cc
    branches/each-ds/src/lib/dns/cpp/rrsetlist.cc
    branches/each-ds/src/lib/dns/cpp/rrsetlist.h

Modified: branches/each-ds/src/bin/auth/Makefile.am
==============================================================================
--- branches/each-ds/src/bin/auth/Makefile.am (original)
+++ branches/each-ds/src/bin/auth/Makefile.am Tue Feb 16 22:49:50 2010
@@ -6,8 +6,8 @@
 b10_auth_SOURCES = auth_srv.cc auth_srv.h
 b10_auth_SOURCES += common.cc common.h
 b10_auth_SOURCES += main.cc
-b10_auth_LDADD =  $(top_builddir)/src/lib/dns/cpp/.libs/libdns.a
-b10_auth_LDADD +=  $(top_builddir)/src/lib/auth/cpp/.libs/libauth.a
+b10_auth_LDADD =  $(top_builddir)/src/lib/auth/cpp/.libs/libauth.a
+b10_auth_LDADD +=  $(top_builddir)/src/lib/dns/cpp/.libs/libdns.a
 b10_auth_LDADD += $(top_builddir)/src/lib/config/cpp/libcfgclient.a
 b10_auth_LDADD += $(top_builddir)/src/lib/cc/cpp/libcc.a
 b10_auth_LDADD += $(top_builddir)/src/lib/exceptions/cpp/.libs/libexceptions.a

Modified: branches/each-ds/src/lib/auth/cpp/data_source.cc
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/data_source.cc (original)
+++ branches/each-ds/src/lib/auth/cpp/data_source.cc Tue Feb 16 22:49:50 2010
@@ -170,7 +170,7 @@
                         }
 
                         if (found) {
-                            BOOST_FOREACH (RRsetPtr r, ref.get()) {
+                            BOOST_FOREACH (RRsetPtr r, ref) {
                                 if (r->getType() == RRType::NS()) {
                                     // XXX: eventually also handle DS
                                     m.addRRset(Section::AUTHORITY(), r);
@@ -179,10 +179,9 @@
                                     m.addRRset(Section::ANSWER(), r);
                                     RRsetList syn;
                                     synthesizeCname(q, task, r, syn);
-                                    if (syn.get().size() == 1) {
-                                        m.addRRset(Section::ANSWER(),
-                                                   syn.get()[0]);
-                                        chaseCname(q, task, syn.get()[0]);
+                                    if (syn.size() == 1) {
+                                        m.addRRset(Section::ANSWER(), syn[0]);
+                                        chaseCname(q, task, syn[0]);
                                     }
                                 }
                             }
@@ -220,7 +219,7 @@
             switch (task.state) {
             case QueryTask::GETANSWER:
             case QueryTask::FOLLOWCNAME:
-                BOOST_FOREACH(RRsetPtr rrset, data.get()) {
+                BOOST_FOREACH(RRsetPtr rrset, data) {
                     m.addRRset(task.section, rrset);
                     getAdditional(q, rrset);
                     if (rrset->getType() == RRType::NS()) {
@@ -242,7 +241,7 @@
                             return;
                         }
 
-                        BOOST_FOREACH(RRsetPtr rrset, auth.get()) {
+                        BOOST_FOREACH(RRsetPtr rrset, auth) {
                             if (rrset->getType() == RRType::DNAME()) {
                                 continue;
                             }
@@ -254,7 +253,7 @@
                 continue;
 
             case QueryTask::GETAUTHORITY:
-                BOOST_FOREACH(RRsetPtr rrset, data.get()) {
+                BOOST_FOREACH(RRsetPtr rrset, data) {
                     m.addRRset(task.section, rrset);
                     getAdditional(q, rrset);
                 }
@@ -265,7 +264,7 @@
                 continue;
 
             case QueryTask::GETADDITIONAL:
-                BOOST_FOREACH(RRsetPtr rrset, data.get()) {
+                BOOST_FOREACH(RRsetPtr rrset, data) {
                     if (q.status() == Query::ANSWERED &&
                         rrset->getName() == q.qname() &&
                         rrset->getType() == q.qtype()) {
@@ -286,13 +285,13 @@
         case CNAME_FOUND:
             // The qname node contains a CNAME.  Add a new task to the
             // queue to look up its target.
-            if (data.get().size() != 1 ||
-                data.get()[0]->getType() != RRType::CNAME()) {
+            if (data.size() != 1 ||
+                data[0]->getType() != RRType::CNAME()) {
                 dns_throw (Unexpected, "invalid data");
             }
 
-            m.addRRset(task.section, data.get()[0]);
-            chaseCname(q, task, data.get()[0]);
+            m.addRRset(task.section, data[0]);
+            chaseCname(q, task, data[0]);
             continue;
 
         case REFERRAL_FOUND:
@@ -306,7 +305,7 @@
                     m.setRcode(Rcode::SERVFAIL());
                     return;
                 }
-                BOOST_FOREACH (RRsetPtr rrset, auth.get()) {
+                BOOST_FOREACH (RRsetPtr rrset, auth) {
                     if (rrset->getType() == RRType::DNAME()) {
                         continue;
                     }
@@ -353,7 +352,7 @@
                         // only be one rrset returned in wild.  But
                         // eventually this will need to handle ANY queries,
                         // so wrap it in a BOOST_FOREACH statement anyway.
-                        BOOST_FOREACH (RRsetPtr rrset, wild.get()) {
+                        BOOST_FOREACH (RRsetPtr rrset, wild) {
                             rrset->setName(task.qname);
                             m.addRRset(Section::ANSWER(), rrset);
 
@@ -370,7 +369,7 @@
                                     return;
                                 }
 
-                                BOOST_FOREACH (RRsetPtr rrset, auth.get()) {
+                                BOOST_FOREACH (RRsetPtr rrset, auth) {
                                     if (rrset->getType() == RRType::DNAME()) {
                                         continue;
                                     }
@@ -402,7 +401,7 @@
                     return;
                 }
 
-                m.addRRset(Section::AUTHORITY(), soa.get()[0]);
+                m.addRRset(Section::AUTHORITY(), soa[0]);
                 q.setStatus(Query::FAILURE);
                 return;
             }

Modified: branches/each-ds/src/lib/dns/cpp/rrsetlist.cc
==============================================================================
--- branches/each-ds/src/lib/dns/cpp/rrsetlist.cc (original)
+++ branches/each-ds/src/lib/dns/cpp/rrsetlist.cc Tue Feb 16 22:49:50 2010
@@ -36,13 +36,13 @@
     if (found_rrset) {
         dns_throw(DuplicateRRset, "");
     }
-    rrsets_.push_back(new_rrsetptr);
+    this->push_back(new_rrsetptr);
 }
 
 const RRsetPtr
 RRsetList::findRRset(const RRsetPtr rrsetptr)
 {
-    BOOST_FOREACH(const RRsetPtr t, rrsets_) {
+    BOOST_FOREACH(const RRsetPtr t, *this) {
         if (rrsetptr == t) {
             return rrsetptr;
         }
@@ -53,7 +53,7 @@
 const RRsetPtr
 RRsetList::findRRset(const RRType& rrtype, const RRClass& rrclass)
 {
-    BOOST_FOREACH(const RRsetPtr rrsetptr, rrsets_) {
+    BOOST_FOREACH(const RRsetPtr rrsetptr, *this) {
         const AbstractRRset* rrset = rrsetptr.get();
         if ((rrset->getClass() == rrclass) && (rrset->getType() == rrtype)) {
             return rrsetptr;

Modified: branches/each-ds/src/lib/dns/cpp/rrsetlist.h
==============================================================================
--- branches/each-ds/src/lib/dns/cpp/rrsetlist.h (original)
+++ branches/each-ds/src/lib/dns/cpp/rrsetlist.h Tue Feb 16 22:49:50 2010
@@ -19,6 +19,7 @@
 
 #include <iostream>
 #include <vector>
+#include <map>
 
 #include <boost/shared_ptr.hpp>
 
@@ -35,15 +36,21 @@
         isc::Exception(file, line, what) {}
 };
 
-class RRsetList {
+class RRsetList : public std::vector<RRsetPtr> {
 public:
     void addRRset(const RRsetPtr new_rrsetptr);
     const RRsetPtr findRRset(const RRType& rrtype,
                              const RRClass& rrclass = RRClass::IN());
     const RRsetPtr findRRset(const RRsetPtr);
-    std::vector<RRsetPtr> get() { return rrsets_; }
+
+    const RRsetPtr operator[](size_t i) { return this->std::vector<RRsetPtr>::operator[](i); }
+    const RRsetPtr operator[](RRType& t) { return this->findRRset(t); }
+    const RRsetPtr operator[](RRType t) { return this->findRRset(t); }
+
 private:
-    std::vector<RRsetPtr> rrsets_;
+    // TODO: this is intended to be used by addRRset() and
+    // findRRset() to enable faster lookup by RRType.
+    std::map<RRType,int> index_;
 };
 
 } // end of namespace dns




More information about the bind10-changes mailing list