Deprecate TableVal::ConvertToList() and TableVal::ConvertToPureList()

Replaced with ToListVal() and ToPureListVal() that return IntrusivePtr
This commit is contained in:
Jon Siwek 2020-05-05 14:58:43 -07:00
parent 5f57ceb70a
commit b096e552d3
10 changed files with 37 additions and 38 deletions

View file

@ -535,17 +535,14 @@ int CompositeHash::SingleTypeKeySize(BroType* bt, const Val* v,
sz = SizeAlign(sz, sizeof(int));
TableVal* tv = const_cast<TableVal*>(v->AsTableVal());
ListVal* lv = tv->ConvertToList();
auto lv = tv->ToListVal();
for ( int i = 0; i < tv->Size(); ++i )
{
Val* key = lv->Idx(i).get();
sz = SingleTypeKeySize(key->Type(), key, type_check, sz, false,
calc_static_size);
if ( ! sz )
{
Unref(lv);
return 0;
}
if ( ! bt->IsSet() )
{
@ -553,15 +550,10 @@ int CompositeHash::SingleTypeKeySize(BroType* bt, const Val* v,
sz = SingleTypeKeySize(val->Type(), val.get(), type_check, sz,
false, calc_static_size);
if ( ! sz )
{
Unref(lv);
return 0;
}
}
}
Unref(lv);
break;
}

View file

@ -1361,16 +1361,11 @@ void id_to_maskedvallist(const char* id, maskedvalue_list* append_to,
if ( v->Type()->Tag() == TYPE_TABLE )
{
ListVal* lv = v->AsTableVal()->ConvertToPureList();
auto lv = v->AsTableVal()->ToPureListVal();
for ( const auto& val : lv->Vals() )
if ( ! val_to_maskedval(val.get(), append_to, prefix_vector) )
{
Unref(lv);
return;
}
Unref(lv);
}
else

View file

@ -1218,11 +1218,10 @@ bool NetSessions::IsLikelyServerPort(uint32_t port, TransportProto proto) const
if ( ! have_cache )
{
ListVal* lv = likely_server_ports->ConvertToPureList();
auto lv = likely_server_ports->ToPureListVal();
for ( int i = 0; i < lv->Length(); i++ )
port_cache.insert(lv->Idx(i)->InternalUnsigned());
have_cache = true;
Unref(lv);
}
// We exploit our knowledge of PortVal's internal storage mechanism

View file

@ -1755,7 +1755,7 @@ bool TableVal::ExpandAndInit(IntrusivePtr<Val> index, IntrusivePtr<Val> new_val)
if ( index_type->IsSet() )
{
index = {AdoptRef{}, index->AsTableVal()->ConvertToList()};
index = index->AsTableVal()->ToListVal();
return ExpandAndInit(std::move(index), std::move(new_val));
}
@ -2110,9 +2110,9 @@ IntrusivePtr<Val> TableVal::Delete(const HashKey* k)
return va;
}
ListVal* TableVal::ConvertToList(TypeTag t) const
IntrusivePtr<ListVal> TableVal::ToListVal(TypeTag t) const
{
ListVal* l = new ListVal(t);
auto l = make_intrusive<ListVal>(t);
const PDict<TableEntryVal>* tbl = AsTable();
IterCookie* c = tbl->InitForIteration();
@ -2128,7 +2128,7 @@ ListVal* TableVal::ConvertToList(TypeTag t) const
{
// We're expecting a pure list, flatten the ListVal.
if ( index->Length() != 1 )
InternalWarning("bad index in TableVal::ConvertToList");
InternalWarning("bad index in TableVal::ToListVal");
l->Append(index->Idx(0));
}
@ -2139,16 +2139,26 @@ ListVal* TableVal::ConvertToList(TypeTag t) const
return l;
}
ListVal* TableVal::ConvertToPureList() const
ListVal* TableVal::ConvertToList(TypeTag t) const
{
return ToListVal().release();
}
IntrusivePtr<ListVal> TableVal::ToPureListVal() const
{
type_list* tl = table_type->Indices()->Types();
if ( tl->length() != 1 )
{
InternalWarning("bad index type in TableVal::ConvertToPureList");
InternalWarning("bad index type in TableVal::ToPureListVal");
return nullptr;
}
return ConvertToList((*tl)[0]->Tag());
return ToListVal((*tl)[0]->Tag());
}
ListVal* TableVal::ConvertToPureList() const
{
return ToPureListVal().release();
}
Attr* TableVal::FindAttr(attr_tag t) const
@ -2246,7 +2256,7 @@ bool TableVal::ExpandCompoundAndInit(ListVal* lv, int k, IntrusivePtr<Val> new_v
{
Val* ind_k_v = lv->Idx(k).get();
auto ind_k = ind_k_v->Type()->IsSet() ?
IntrusivePtr<ListVal>{AdoptRef{}, ind_k_v->AsTableVal()->ConvertToList()} :
ind_k_v->AsTableVal()->ToListVal() :
IntrusivePtr<ListVal>{NewRef{}, ind_k_v->AsListVal()};
for ( int i = 0; i < ind_k->Length(); ++i )

View file

@ -808,7 +808,15 @@ public:
IntrusivePtr<Val> Delete(const HashKey* k);
// Returns a ListVal representation of the table (which must be a set).
IntrusivePtr<ListVal> ToListVal(TypeTag t = TYPE_ANY) const;
// Returns a ListVal representation of the table (which must be a set
// with non-composite index type).
IntrusivePtr<ListVal> ToPureListVal() const;
[[deprecated("Remove in v4.1. Use ToListVal() instead.")]]
ListVal* ConvertToList(TypeTag t=TYPE_ANY) const;
[[deprecated("Remove in v4.1. Use ToPureListVal() instead.")]]
ListVal* ConvertToPureList() const; // must be single index type
void SetAttrs(IntrusivePtr<Attributes> attrs);

View file

@ -749,8 +749,8 @@ ListVal* internal_list_val(const char* name)
else if ( v->Type()->IsSet() )
{
TableVal* tv = v->AsTableVal();
ListVal* lv = tv->ConvertToPureList();
return lv;
auto lv = tv->ToPureListVal();
return lv.release();
}
else

View file

@ -96,12 +96,10 @@ void Manager::InitPostScript()
reporter->FatalError("Tunnel::vxlan_ports not defined");
auto table_val = id->ID_Val()->AsTableVal();
auto port_list = table_val->ConvertToPureList();
auto port_list = table_val->ToPureListVal();
for ( auto i = 0; i < port_list->Length(); ++i )
vxlan_ports.emplace_back(port_list->Idx(i)->AsPortVal()->Port());
Unref(port_list);
}
void Manager::DumpDebug()

View file

@ -244,7 +244,7 @@ X509_STORE* file_analysis::X509::GetRootStore(TableVal* root_certs)
return x509_stores[root_certs];
X509_STORE* ctx = X509_STORE_new();
ListVal* idxs = root_certs->ConvertToPureList();
auto idxs = root_certs->ToPureListVal();
// Build the validation store
for ( int i = 0; i < idxs->Length(); ++i )
@ -264,8 +264,6 @@ X509_STORE* file_analysis::X509::GetRootStore(TableVal* root_certs)
X509_free(x);
}
delete idxs;
// Save the newly constructed certificate store into the cacheing map.
x509_stores[root_certs] = ctx;

View file

@ -1012,11 +1012,11 @@ threading::Value* Manager::ValToLogVal(Val* val, BroType* ty)
case TYPE_TABLE:
{
ListVal* set = val->AsTableVal()->ConvertToPureList();
auto set = val->AsTableVal()->ToPureListVal();
if ( ! set )
// ConvertToPureList has reported an internal warning
// ToPureListVal has reported an internal warning
// already. Just keep going by making something up.
set = new ListVal(TYPE_INT);
set = make_intrusive<ListVal>(TYPE_INT);
lval->val.set_val.size = set->Length();
lval->val.set_val.vals = new threading::Value* [lval->val.set_val.size];
@ -1024,7 +1024,6 @@ threading::Value* Manager::ValToLogVal(Val* val, BroType* ty)
for ( int i = 0; i < lval->val.set_val.size; i++ )
lval->val.set_val.vals[i] = ValToLogVal(set->Idx(i).get());
Unref(set);
break;
}

View file

@ -401,7 +401,7 @@ function terminate%(%): bool
// is false).
static bool prepare_environment(TableVal* tbl, bool set)
{
IntrusivePtr<ListVal> idxs{AdoptRef{}, tbl->ConvertToPureList()};
auto idxs = tbl->ToPureListVal();
for ( int i = 0; i < idxs->Length(); ++i )
{