/* A sparse representation of a "struct match".
*
- * This has the same invariant as "struct match", that is, a 1-bit in the
- * 'flow' must correspond to a 1-bit in 'mask'.
+ * There are two invariants:
*
- * The invariants for the underlying miniflow and minimask are also maintained,
- * which means that 'flow' and 'mask' can have different 'map's. In
- * particular, if the match checks that a given 32-bit field has value 0, then
- * 'map' will have a 1-bit in 'mask' but a 0-bit in 'flow' for that field. */
+ * - The same invariant as "struct match", that is, a 1-bit in the 'flow'
+ * must correspond to a 1-bit in 'mask'.
+ *
+ * - 'flow' and 'mask' have the same 'map'. This implies that 'flow' and
+ * 'mask' have the same part of "struct flow" at the same offset into
+ * 'values', which makes minimatch_matches_flow() faster.
+ */
struct minimatch {
struct miniflow flow;
struct minimask mask;
bool minimatch_equal(const struct minimatch *a, const struct minimatch *b);
uint32_t minimatch_hash(const struct minimatch *, uint32_t basis);
+bool minimatch_matches_flow(const struct minimatch *, const struct flow *);
+
void minimatch_format(const struct minimatch *, struct ds *,
unsigned int priority);
char *minimatch_to_string(const struct minimatch *, unsigned int priority);