}
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);
+ encoder.encode(rdataset->getDataBuf(), data_len);
return (rdataset);
}
{
const size_t data_len =
RdataReader(rrclass, rdataset->type,
- reinterpret_cast<const uint8_t*>(rdataset + 1),
+ reinterpret_cast<const uint8_t*>(rdataset->getDataBuf()),
rdataset->rdata_count,
rdataset->sig_rdata_count).getSize();
rdataset->~RdataSet();
namespace memory {
class RdataEncoder;
-struct RdataSet {
+class RdataSet {
+public:
static RdataSet* create(util::MemorySegment& mem_sgmt,
RdataEncoder& encoder,
dns::ConstRRsetPtr rrset,
RdataSet* rdataset);
const dns::RRType type;
+private:
const uint16_t sig_rdata_count : 3;
const uint16_t rdata_count : 13;
const uint32_t ttl; ///< TTL of the RdataSet, net byte order
+public:
+ size_t getRdataCount() const { return (rdata_count); }
+ size_t getSigRdataCount() const { return (sig_rdata_count); }
+ const void* getTTLData() const { return (&ttl); }
+ void* getDataBuf() { return (this + 1); }
private:
RdataSet(dns::RRType type, size_t rdata_count, size_t sig_rdata_count,
// Convert the given 32-bit integer (network byte order) to the corresponding
// RRTTL object.
RRTTL
-restoreTTL(uint32_t net_ttl) {
- isc::util::InputBuffer b(&net_ttl, sizeof(net_ttl));
+restoreTTL(const void* ttl_data) {
+ isc::util::InputBuffer b(ttl_data, sizeof(uint32_t));
return (RRTTL(b));
}
RdataSet* rdataset = RdataSet::create(mem_sgmt_, encoder_, a_rrset_,
ConstRRsetPtr());
EXPECT_EQ(RRType::A(), rdataset->type);
- EXPECT_EQ(RRTTL(1076895760), restoreTTL(rdataset->ttl));
- EXPECT_EQ(1, rdataset->rdata_count);
- EXPECT_EQ(0, rdataset->sig_rdata_count);
+ EXPECT_EQ(RRTTL(1076895760), restoreTTL(rdataset->getTTLData()));
+ EXPECT_EQ(1, rdataset->getRdataCount());
+ EXPECT_EQ(0, rdataset->getSigRdataCount());
RdataSet::destroy(mem_sgmt_, RRClass::IN(), rdataset);
}
}