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 {