[svn] commit: r846 - in /branches/each-ds/src/lib: auth/cpp/TODO dns/cpp/rrset.h dns/cpp/rrsetlist.cc dns/cpp/rrsetlist.h
BIND 10 source code commits
bind10-changes at lists.isc.org
Wed Feb 17 01:00:49 UTC 2010
Author: each
Date: Wed Feb 17 01:00:49 2010
New Revision: 846
Log:
checkpoint:
- modified RRsetList so it doesn't inherit std::vector but just
exposes the vector iterators.
- added a new class, RRset, inheriting from BasicRRset and containing a
pointer to an additional BasicRRset which will hold signatures.
Modified:
branches/each-ds/src/lib/auth/cpp/TODO
branches/each-ds/src/lib/dns/cpp/rrset.h
branches/each-ds/src/lib/dns/cpp/rrsetlist.cc
branches/each-ds/src/lib/dns/cpp/rrsetlist.h
Modified: branches/each-ds/src/lib/auth/cpp/TODO
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/TODO (original)
+++ branches/each-ds/src/lib/auth/cpp/TODO Wed Feb 17 01:00:49 2010
@@ -1,5 +1,4 @@
Data source:
-- change RRsetList to something that can be indexed by the RRType
- add support for type-ANY queries
- consider altering the "task queue" design (at this point it's relatively
rare for it to have more than one item).
Modified: branches/each-ds/src/lib/dns/cpp/rrset.h
==============================================================================
--- branches/each-ds/src/lib/dns/cpp/rrset.h (original)
+++ branches/each-ds/src/lib/dns/cpp/rrset.h Wed Feb 17 01:00:49 2010
@@ -38,7 +38,6 @@
class AbstractRRset;
typedef boost::shared_ptr<AbstractRRset> RRsetPtr;
class BasicRRset;
-typedef BasicRRset RRset;
class BasicRRsetImpl;
class RdataIterator;
@@ -169,6 +168,45 @@
BasicRRsetImpl* impl_;
};
+class RRset : public BasicRRset {
+private:
+ typedef boost::shared_ptr<BasicRRset> BasicRRsetPtr;
+public:
+ RRset(const Name& name, const RRClass& rrclass,
+ const RRType& rrtype, const RRTTL& ttl) :
+ BasicRRset(name, rrclass, rrtype, ttl) {
+ rrsig_ = BasicRRsetPtr();
+ }
+
+ virtual ~RRset() {
+ delete rrsig_.get();
+ }
+
+ virtual void addRRsig(AbstractRRset& sigs) {
+ RdataIteratorPtr it = sigs.getRdataIterator();
+
+ rrsig_ = BasicRRsetPtr(new BasicRRset(this->getName(), this->getClass(),
+ this->getType(), this->getTTL()));
+ for (it->first(); !it->isLast(); it->next()) {
+ rrsig_->addRdata(it->getCurrent());
+ }
+ }
+
+ virtual void addRRsig(RRsetPtr sigs) {
+ addRRsig(*sigs);
+ }
+
+ virtual void removeRRsig() {
+ rrsig_ = BasicRRsetPtr();
+ }
+
+ virtual RRsetPtr getRRsig() {
+ return (rrsig_);
+ }
+private:
+ BasicRRsetPtr rrsig_;
+};
+
std::ostream& operator<<(std::ostream& os, const AbstractRRset& rrset);
} // end of namespace dns
} // end of namespace isc
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 Wed Feb 17 01:00:49 2010
@@ -36,13 +36,13 @@
if (found_rrset) {
dns_throw(DuplicateRRset, "");
}
- this->push_back(new_rrsetptr);
+ rrsets_.push_back(new_rrsetptr);
}
const RRsetPtr
RRsetList::findRRset(const RRsetPtr rrsetptr)
{
- BOOST_FOREACH(const RRsetPtr t, *this) {
+ BOOST_FOREACH(const RRsetPtr t, rrsets_) {
if (rrsetptr == t) {
return rrsetptr;
}
@@ -53,7 +53,7 @@
const RRsetPtr
RRsetList::findRRset(const RRType& rrtype, const RRClass& rrclass)
{
- BOOST_FOREACH(const RRsetPtr rrsetptr, *this) {
+ BOOST_FOREACH(const RRsetPtr rrsetptr, rrsets_) {
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 Wed Feb 17 01:00:49 2010
@@ -36,20 +36,32 @@
isc::Exception(file, line, what) {}
};
-class RRsetList : public std::vector<RRsetPtr> {
+class RRsetList {
public:
void addRRset(const RRsetPtr new_rrsetptr);
const RRsetPtr findRRset(const RRType& rrtype,
const RRClass& rrclass = RRClass::IN());
const RRsetPtr findRRset(const RRsetPtr);
- const RRsetPtr operator[](size_t i) { return this->std::vector<RRsetPtr>::operator[](i); }
+ std::vector<RRsetPtr> get() { return (rrsets_); }
+
+ const RRsetPtr operator[](size_t i) { return (rrsets_[i]); }
const RRsetPtr operator[](RRType& t) { return this->findRRset(t); }
const RRsetPtr operator[](RRType t) { return this->findRRset(t); }
+ typedef std::vector<RRsetPtr>::const_iterator const_iterator;
+ const_iterator begin() const { return (rrsets_.begin()); }
+ const_iterator end() const { return (rrsets_.end)(); }
+
+ typedef std::vector<RRsetPtr>::iterator iterator;
+ iterator begin() { return (rrsets_.begin()); }
+ iterator end() { return (rrsets_.end)(); }
+
+ size_t size() const { return (rrsets_.size()); }
+
private:
- // TODO: this is intended to be used by addRRset() and
- // findRRset() to enable faster lookup by RRType.
+ std::vector<RRsetPtr> rrsets_;
+ // XXX: this is intended to be used to speed up findRRset later
std::map<RRType,int> index_;
};
More information about the bind10-changes
mailing list