From: JINMEI Tatuya Date: Sun, 12 Aug 2012 07:40:29 +0000 (-0700) Subject: [2097] use the encoder to allocate the sufficient len of data and do encode. X-Git-Tag: trac2351_base~113^2~15 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a7df756bee32ebd4be5a010659b68c71df152af7;p=thirdparty%2Fkea.git [2097] use the encoder to allocate the sufficient len of data and do encode. some parameters are currently hardcoded; we need a revised version of the reader implementation. --- diff --git a/src/lib/datasrc/memory/rdataset.cc b/src/lib/datasrc/memory/rdataset.cc index 176844dee0..efd1287c6d 100644 --- a/src/lib/datasrc/memory/rdataset.cc +++ b/src/lib/datasrc/memory/rdataset.cc @@ -31,22 +31,32 @@ namespace datasrc { namespace memory { RdataSet* -RdataSet::create(util::MemorySegment& mem_sgmt, RdataEncoder& /*encoder*/, - dns::ConstRRsetPtr rrset, dns::ConstRRsetPtr sig_rrset) +RdataSet::create(util::MemorySegment& mem_sgmt, RdataEncoder& encoder, + ConstRRsetPtr rrset, ConstRRsetPtr sig_rrset) { - void* p = mem_sgmt.allocate(sizeof(RdataSet)); + encoder.start(rrset->getClass(), rrset->getType()); + for (RdataIteratorPtr it = rrset->getRdataIterator(); + !it->isLast(); + it->next()) { + encoder.addRdata(it->getCurrent()); + } + + const size_t data_len = encoder.getStorageLength(); + assert(data_len == 4); + void* p = mem_sgmt.allocate(sizeof(RdataSet) + data_len); RdataSet* rdataset = new(p) RdataSet(rrset->getType(), rrset->getRdataCount(), sig_rrset ? sig_rrset->getRdataCount() : 0, rrset->getTTL()); + encoder.encode(rdataset + 1, data_len); return (rdataset); } void RdataSet::destroy(util::MemorySegment& mem_sgmt, RdataSet* rdataset) { rdataset->~RdataSet(); - mem_sgmt.deallocate(rdataset, sizeof(RdataSet)); + mem_sgmt.deallocate(rdataset, sizeof(RdataSet) + 4); } namespace {