[svn] commit: r506 - in /branches/jinmei-dnsrdata/src/lib/dns/cpp: rdata.cc rdata.h rdata_unittest.cc rrparamregistry.cc rrparamregistry.h

BIND 10 source code commits bind10-changes at lists.isc.org
Fri Jan 22 02:34:31 UTC 2010


Author: jinmei
Date: Fri Jan 22 02:34:31 2010
New Revision: 506

Log:
implemented polymorphic copy constructor for Rdata

Modified:
    branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata.cc
    branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata.h
    branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata_unittest.cc
    branches/jinmei-dnsrdata/src/lib/dns/cpp/rrparamregistry.cc
    branches/jinmei-dnsrdata/src/lib/dns/cpp/rrparamregistry.h

Modified: branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata.cc
==============================================================================
--- branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata.cc (original)
+++ branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata.cc Fri Jan 22 02:34:31 2010
@@ -41,27 +41,35 @@
 // XXX: we need to specify std:: for string to help doxygen match the
 // function signature with that given in the header file.
 RdataPtr
-createRdataFromText(const RRType& rrtype, const RRClass& rrclass,
-                    const std::string& rdata_string)
-{
-    return (RRParamRegistry::getRegistry().createRdataFromText(rrtype, rrclass,
-                                                               rdata_string));
+createRdata(const RRType& rrtype, const RRClass& rrclass,
+            const std::string& rdata_string)
+{
+    return (RRParamRegistry::getRegistry().createRdata(rrtype, rrclass,
+                                                       rdata_string));
 }
 
 RdataPtr
-createRdataFromWire(const RRType& rrtype, const RRClass& rrclass,
-                    InputBuffer& buffer, size_t len)
+createRdata(const RRType& rrtype, const RRClass& rrclass,
+            InputBuffer& buffer, size_t len)
 {
     size_t old_pos = buffer.getPosition();
 
     RdataPtr rdata =
-        RRParamRegistry::getRegistry().createRdataFromWire(rrtype, rrclass,
-                                                           buffer, len);
+        RRParamRegistry::getRegistry().createRdata(rrtype, rrclass, buffer,
+                                                   len);
+                                                   
     if (buffer.getPosition() - old_pos != len) {
         dns_throw(InvalidRdataLength, "RDLENGTH mismatch");
     }
 
     return (rdata);
+}
+
+RdataPtr
+createRdata(const RRType& rrtype, const RRClass& rrclass, const Rdata& source)
+{
+    return (RRParamRegistry::getRegistry().createRdata(rrtype, rrclass,
+                                                       source));
 }
 
 int
@@ -240,6 +248,11 @@
     // TBD
 }
 
+A::A(const A& source)
+{
+    // TBD
+}
+
 void
 A::toWire(OutputBuffer& buffer) const
 {

Modified: branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata.h
==============================================================================
--- branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata.h (original)
+++ branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata.h Fri Jan 22 02:34:31 2010
@@ -178,10 +178,10 @@
 /// Non class-member functions related to Rdata
 ///
 /// TBD: document them
-RdataPtr createRdataFromText(const RRType& rrtype, const RRClass& rrclass,
-                             const std::string& rdata_string);
-RdataPtr createRdataFromWire(const RRType& rrtype, const RRClass& rrclass,
-                             InputBuffer& buffer, size_t len);
+RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
+                     const std::string& rdata_string);
+RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
+                     InputBuffer& buffer, size_t len);
 
 ///
 /// \brief Gives relative ordering of two names in terms of DNSSEC RDATA

Modified: branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata_unittest.cc
==============================================================================
--- branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata_unittest.cc (original)
+++ branches/jinmei-dnsrdata/src/lib/dns/cpp/rdata_unittest.cc Fri Jan 22 02:34:31 2010
@@ -74,7 +74,7 @@
     buffer.setPosition(position);
 
     uint16_t rdlen = buffer.readUint16();
-    return (createRdataFromWire(rrtype, rrclass, buffer, rdlen));
+    return (createRdata(rrtype, rrclass, buffer, rdlen));
 }
 
 TEST_F(RdataTest, createFromText_IN_A)

Modified: branches/jinmei-dnsrdata/src/lib/dns/cpp/rrparamregistry.cc
==============================================================================
--- branches/jinmei-dnsrdata/src/lib/dns/cpp/rrparamregistry.cc (original)
+++ branches/jinmei-dnsrdata/src/lib/dns/cpp/rrparamregistry.cc Fri Jan 22 02:34:31 2010
@@ -128,14 +128,19 @@
 template <typename T>
 class RdataFactory : public AbstractRdataFactory {
 public:
-    virtual RdataPtr fromText(const string& rdata_str) const
+    virtual RdataPtr create(const string& rdata_str) const
     {
         return (shared_ptr<T>(new T(rdata_str)));
     }
 
-    virtual RdataPtr fromWire(InputBuffer& buffer, size_t rdata_len) const
+    virtual RdataPtr create(InputBuffer& buffer, size_t rdata_len) const
     {
         return (shared_ptr<T>(new T(buffer, rdata_len)));
+    }
+
+    virtual RdataPtr create(const Rdata& source) const
+    {
+        return (shared_ptr<T>(new T(dynamic_cast<const T&>(source))));
     }
 };
 
@@ -413,9 +418,8 @@
 }
 
 RdataPtr
-RRParamRegistry::createRdataFromText(const RRType& rrtype,
-                                     const RRClass& rrclass,
-                                     const string& rdata_string)
+RRParamRegistry::createRdata(const RRType& rrtype, const RRClass& rrclass,
+                             const string& rdata_string)
 {
     // If the text indicates that it's rdata of an "unknown" type (beginning
     // with '\# n'), parse it that way. (TBD)
@@ -423,25 +427,37 @@
     RdataFactoryMap::const_iterator found;
     found = impl_->rdata_factories.find(RRTypeClass(rrtype, rrclass));
     if (found != impl_->rdata_factories.end()) {
-        return (found->second->fromText(rdata_string));
+        return (found->second->create(rdata_string));
     }
 
     dns_throw(InvalidRdataText, "Unrecognized Rdata type to create from text");
 }
 
 RdataPtr
-RRParamRegistry::createRdataFromWire(const RRType& rrtype,
-                                     const RRClass& rrclass,
-                                     InputBuffer& buffer, size_t rdata_len)
+RRParamRegistry::createRdata(const RRType& rrtype, const RRClass& rrclass,
+                             InputBuffer& buffer, size_t rdata_len)
 {
     RdataFactoryMap::const_iterator found =
         impl_->rdata_factories.find(RRTypeClass(rrtype, rrclass));
     if (found != impl_->rdata_factories.end()) {
-        return (found->second->fromWire(buffer, rdata_len));
+        return (found->second->create(buffer, rdata_len));
     }
 
     // construct an "unknown" type of RDATA
     return (RdataPtr(new generic::Generic(buffer, rdata_len)));
 }
-}
-}
+
+RdataPtr
+RRParamRegistry::createRdata(const RRType& rrtype, const RRClass& rrclass,
+                             const Rdata& source)
+{
+    RdataFactoryMap::const_iterator found =
+        impl_->rdata_factories.find(RRTypeClass(rrtype, rrclass));
+    if (found != impl_->rdata_factories.end()) {
+        return (found->second->create(source));
+    }
+
+    dns_throw(InvalidRdataText, "TBD");
+}
+}
+}

Modified: branches/jinmei-dnsrdata/src/lib/dns/cpp/rrparamregistry.h
==============================================================================
--- branches/jinmei-dnsrdata/src/lib/dns/cpp/rrparamregistry.h (original)
+++ branches/jinmei-dnsrdata/src/lib/dns/cpp/rrparamregistry.h Fri Jan 22 02:34:31 2010
@@ -66,8 +66,9 @@
     virtual ~AbstractRdataFactory() {};
 
     // Factory methods for polymorphic creation:
-    virtual RdataPtr fromText(const std::string& rdata_str) const = 0;
-    virtual RdataPtr fromWire(InputBuffer& buffer, size_t rdata_len) const = 0;
+    virtual RdataPtr create(const std::string& rdata_str) const = 0;
+    virtual RdataPtr create(InputBuffer& buffer, size_t rdata_len) const = 0;
+    virtual RdataPtr create(const rdata::Rdata& source) const = 0;
 };
 ///
 /// TBD: describe it
@@ -335,13 +336,14 @@
     ///
     //@{
     /// \brief TBD
-    rdata::RdataPtr createRdataFromText(const RRType& rrtype,
-                                        const RRClass& rrclass,
-                                        const std::string& rdata_string);
+    rdata::RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
+                                const std::string& rdata_string);
     /// \brief TBD
-    rdata::RdataPtr createRdataFromWire(const RRType& rrtype,
-                                        const RRClass& rrclass,
-                                        InputBuffer& buffer, size_t len);
+    rdata::RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
+                                InputBuffer& buffer, size_t len);
+    /// \brief Polymorphic copy constructor (detailed TBD)
+    rdata::RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
+                                const rdata::Rdata& source);
     //@}
 
 private:




More information about the bind10-changes mailing list