[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