[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