mirror of
https://github.com/zeek/zeek.git
synced 2025-10-15 04:58:21 +00:00
Val: add BroValUnion constructors
Allows using C++ initializers.
This commit is contained in:
parent
5d58dbbd2e
commit
4a5473c572
2 changed files with 68 additions and 38 deletions
70
src/Val.h
70
src/Val.h
|
@ -86,13 +86,50 @@ union BroValUnion {
|
|||
|
||||
vector<Val*>* vector_val;
|
||||
|
||||
BroValUnion() = default;
|
||||
|
||||
constexpr BroValUnion(bro_int_t value) noexcept
|
||||
:int_val(value) {}
|
||||
|
||||
constexpr BroValUnion(bro_uint_t value) noexcept
|
||||
:uint_val(value) {}
|
||||
|
||||
constexpr BroValUnion(IPAddr* value) noexcept
|
||||
:addr_val(value) {}
|
||||
|
||||
constexpr BroValUnion(IPPrefix* value) noexcept
|
||||
:subnet_val(value) {}
|
||||
|
||||
constexpr BroValUnion(double value) noexcept
|
||||
:double_val(value) {}
|
||||
|
||||
constexpr BroValUnion(BroString* value) noexcept
|
||||
:string_val(value) {}
|
||||
|
||||
constexpr BroValUnion(Func* value) noexcept
|
||||
:func_val(value) {}
|
||||
|
||||
constexpr BroValUnion(BroFile* value) noexcept
|
||||
:file_val(value) {}
|
||||
|
||||
constexpr BroValUnion(RE_Matcher* value) noexcept
|
||||
:re_val(value) {}
|
||||
|
||||
constexpr BroValUnion(PDict<TableEntryVal>* value) noexcept
|
||||
:table_val(value) {}
|
||||
|
||||
constexpr BroValUnion(val_list* value) noexcept
|
||||
:val_list_val(value) {}
|
||||
|
||||
constexpr BroValUnion(vector<Val*> *value) noexcept
|
||||
:vector_val(value) {}
|
||||
};
|
||||
|
||||
class Val : public BroObj {
|
||||
public:
|
||||
Val(double d, TypeTag t)
|
||||
:val(d)
|
||||
{
|
||||
val.double_val = d;
|
||||
type = base_type(t);
|
||||
#ifdef DEBUG
|
||||
bound_id = 0;
|
||||
|
@ -114,8 +151,8 @@ public:
|
|||
}
|
||||
|
||||
Val()
|
||||
:val(bro_int_t(0))
|
||||
{
|
||||
val.int_val = 0;
|
||||
type = base_type(TYPE_ERROR);
|
||||
#ifdef DEBUG
|
||||
bound_id = 0;
|
||||
|
@ -312,26 +349,22 @@ protected:
|
|||
|
||||
static Val* MakeBool(bool b)
|
||||
{
|
||||
auto rval = new Val(TYPE_BOOL);
|
||||
rval->val.int_val = b;
|
||||
return rval;
|
||||
return new Val(bro_int_t(b), TYPE_BOOL);
|
||||
}
|
||||
|
||||
static Val* MakeInt(bro_int_t i)
|
||||
{
|
||||
auto rval = new Val(TYPE_INT);
|
||||
rval->val.int_val = i;
|
||||
return rval;
|
||||
return new Val(i, TYPE_INT);
|
||||
}
|
||||
|
||||
static Val* MakeCount(bro_uint_t u)
|
||||
{
|
||||
auto rval = new Val(TYPE_COUNT);
|
||||
rval->val.uint_val = u;
|
||||
return rval;
|
||||
return new Val(u, TYPE_COUNT);
|
||||
}
|
||||
|
||||
explicit Val(TypeTag t)
|
||||
template<typename V>
|
||||
Val(V &&v, TypeTag t) noexcept
|
||||
:val(std::forward<V>(v))
|
||||
{
|
||||
type = base_type(t);
|
||||
#ifdef DEBUG
|
||||
|
@ -339,6 +372,16 @@ protected:
|
|||
#endif
|
||||
}
|
||||
|
||||
template<typename V>
|
||||
Val(V &&v, BroType* t) noexcept
|
||||
:val(std::forward<V>(v))
|
||||
{
|
||||
type = t->Ref();
|
||||
#ifdef DEBUG
|
||||
bound_id = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
explicit Val(BroType* t)
|
||||
{
|
||||
type = t->Ref();
|
||||
|
@ -918,9 +961,8 @@ protected:
|
|||
friend class Val;
|
||||
friend class EnumType;
|
||||
|
||||
EnumVal(EnumType* t, int i) : Val(t)
|
||||
EnumVal(EnumType* t, int i) : Val(bro_int_t(i), t)
|
||||
{
|
||||
val.int_val = i;
|
||||
}
|
||||
|
||||
void ValDescribe(ODesc* d) const override;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue