mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
Mark List::sort as deprecated, remove List::sortedinsert
This commit is contained in:
parent
e860a4b22d
commit
d2d5043bf0
3 changed files with 13 additions and 36 deletions
27
src/List.h
27
src/List.h
|
@ -27,6 +27,7 @@
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
|
// TODO: this can be removed in v3.1 when List::sort() is removed
|
||||||
typedef int (*list_cmp_func)(const void* v1, const void* v2);
|
typedef int (*list_cmp_func)(const void* v1, const void* v2);
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -154,6 +155,7 @@ public:
|
||||||
return max_entries;
|
return max_entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZEEK_DEPRECATED("Remove in v3.1: Use std::sort instead")
|
||||||
void sort(list_cmp_func cmp_func)
|
void sort(list_cmp_func cmp_func)
|
||||||
{
|
{
|
||||||
qsort(entries, num_entries, sizeof(T), cmp_func);
|
qsort(entries, num_entries, sizeof(T), cmp_func);
|
||||||
|
@ -174,31 +176,6 @@ public:
|
||||||
entries[0] = a;
|
entries[0] = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assumes that the list is sorted and inserts at correct position.
|
|
||||||
void sortedinsert(const T& a, list_cmp_func cmp_func)
|
|
||||||
{
|
|
||||||
// We optimize for the case that the new element is
|
|
||||||
// larger than most of the current entries.
|
|
||||||
|
|
||||||
// First append element.
|
|
||||||
if ( num_entries == max_entries )
|
|
||||||
resize(max_entries ? max_entries * LIST_GROWTH_FACTOR : DEFAULT_LIST_SIZE);
|
|
||||||
|
|
||||||
entries[num_entries++] = a;
|
|
||||||
|
|
||||||
// Then move it to the correct place.
|
|
||||||
T tmp;
|
|
||||||
for ( int i = num_entries - 1; i > 0; --i )
|
|
||||||
{
|
|
||||||
if ( cmp_func(entries[i],entries[i-1]) <= 0 )
|
|
||||||
break;
|
|
||||||
|
|
||||||
tmp = entries[i];
|
|
||||||
entries[i] = entries[i-1];
|
|
||||||
entries[i-1] = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void push_back(const T& a) { append(a); }
|
void push_back(const T& a) { append(a); }
|
||||||
void push_front(const T& a) { insert(a); }
|
void push_front(const T& a) { insert(a); }
|
||||||
void pop_front() { remove_nth(0); }
|
void pop_front() { remove_nth(0); }
|
||||||
|
|
20
src/NFA.cc
20
src/NFA.cc
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include "zeek-config.h"
|
#include "zeek-config.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "NFA.h"
|
#include "NFA.h"
|
||||||
#include "EquivClass.h"
|
#include "EquivClass.h"
|
||||||
|
|
||||||
|
@ -342,11 +344,14 @@ NFA_state_list* epsilon_closure(NFA_state_list* states)
|
||||||
if ( ! closuremap.Contains(ns->ID()) )
|
if ( ! closuremap.Contains(ns->ID()) )
|
||||||
{
|
{
|
||||||
closuremap.Insert(ns->ID());
|
closuremap.Insert(ns->ID());
|
||||||
closure->sortedinsert(ns, NFA_state_cmp_neg);
|
closure->append(ns);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sort all of the closures in the list by ID
|
||||||
|
std::sort(closure->begin(), closure->end(), NFA_state_cmp_neg);
|
||||||
|
|
||||||
// Make it fit.
|
// Make it fit.
|
||||||
closure->resize(0);
|
closure->resize(0);
|
||||||
|
|
||||||
|
@ -355,15 +360,10 @@ NFA_state_list* epsilon_closure(NFA_state_list* states)
|
||||||
return closure;
|
return closure;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NFA_state_cmp_neg(const void* v1, const void* v2)
|
bool NFA_state_cmp_neg(const NFA_State* v1, const NFA_State* v2)
|
||||||
{
|
{
|
||||||
const NFA_State* n1 = (const NFA_State*) v1;
|
if ( v1->ID() < v2->ID() )
|
||||||
const NFA_State* n2 = (const NFA_State*) v2;
|
return true;
|
||||||
|
|
||||||
if ( n1->ID() < n2->ID() )
|
|
||||||
return -1;
|
|
||||||
else if ( n1->ID() == n2->ID() )
|
|
||||||
return 0;
|
|
||||||
else
|
else
|
||||||
return 1;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ extern NFA_Machine* make_alternate(NFA_Machine* m1, NFA_Machine* m2);
|
||||||
extern NFA_state_list* epsilon_closure(NFA_state_list* states);
|
extern NFA_state_list* epsilon_closure(NFA_state_list* states);
|
||||||
|
|
||||||
// For sorting NFA states based on their ID fields (decreasing)
|
// For sorting NFA states based on their ID fields (decreasing)
|
||||||
extern int NFA_state_cmp_neg(const void* v1, const void* v2);
|
extern bool NFA_state_cmp_neg(const NFA_State* v1, const NFA_State* v2);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue