[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