Val: reduce duplicate code by using delegating constructors

This commit is contained in:
Max Kellermann 2020-02-08 13:04:49 +01:00
parent 74f93091e6
commit 5d58dbbd2e

View file

@ -828,9 +828,8 @@ AddrVal::AddrVal(const char* text) : Val(TYPE_ADDR)
val.addr_val = new IPAddr(text); val.addr_val = new IPAddr(text);
} }
AddrVal::AddrVal(const std::string& text) : Val(TYPE_ADDR) AddrVal::AddrVal(const std::string& text) : AddrVal(text.c_str())
{ {
val.addr_val = new IPAddr(text);
} }
AddrVal::AddrVal(uint32_t addr) : Val(TYPE_ADDR) AddrVal::AddrVal(uint32_t addr) : Val(TYPE_ADDR)
@ -886,16 +885,12 @@ SubNetVal::SubNetVal(const char* text, int width) : Val(TYPE_SUBNET)
val.subnet_val = new IPPrefix(text, width); val.subnet_val = new IPPrefix(text, width);
} }
SubNetVal::SubNetVal(uint32_t addr, int width) : Val(TYPE_SUBNET) SubNetVal::SubNetVal(uint32_t addr, int width) : SubNetVal(IPAddr{IPv4, &addr, IPAddr::Network}, width)
{ {
IPAddr a(IPv4, &addr, IPAddr::Network);
val.subnet_val = new IPPrefix(a, width);
} }
SubNetVal::SubNetVal(const uint32_t* addr, int width) : Val(TYPE_SUBNET) SubNetVal::SubNetVal(const uint32_t* addr, int width) : SubNetVal(IPAddr{IPv6, addr, IPAddr::Network}, width)
{ {
IPAddr a(IPv6, addr, IPAddr::Network);
val.subnet_val = new IPPrefix(a, width);
} }
SubNetVal::SubNetVal(const IPAddr& addr, int width) : Val(TYPE_SUBNET) SubNetVal::SubNetVal(const IPAddr& addr, int width) : Val(TYPE_SUBNET)
@ -984,20 +979,17 @@ StringVal::StringVal(BroString* s) : Val(TYPE_STRING)
val.string_val = s; val.string_val = s;
} }
StringVal::StringVal(int length, const char* s) : Val(TYPE_STRING) // The following adds a NUL at the end.
StringVal::StringVal(int length, const char* s) : StringVal(new BroString((const u_char*) s, length, 1))
{ {
// The following adds a NUL at the end.
val.string_val = new BroString((const u_char*) s, length, 1);
} }
StringVal::StringVal(const char* s) : Val(TYPE_STRING) StringVal::StringVal(const char* s) : StringVal(new BroString(s))
{ {
val.string_val = new BroString(s);
} }
StringVal::StringVal(const string& s) : Val(TYPE_STRING) StringVal::StringVal(const string& s) : StringVal(s.length(), s.data())
{ {
val.string_val = new BroString(reinterpret_cast<const u_char*>(s.data()), s.length(), 1);
} }
Val* StringVal::SizeVal() const Val* StringVal::SizeVal() const