public boolean evaluate(FunctionDescription func) {

		if ((func.getFlags() & filterflags_mask) != filterflags_value) {
			return false;
		}

		ExecutableRecord exe = func.getExecutableRecord();

		if (filterNameToFilterMapAND == null) {
			populateFilterMaps();
		}

		return processFilters(exe);
	}
Returns true if all filters resolve correctly for the given function description. There are 
4 main types of filters, each of which must be evaluated differently:
<pre>
1) Positive Filter: 	{@code "<filter name> matches <filter value>"}. 
   	For these, filter out any result that does not contain all elements (at a minimum) of the 
   	filter value.
   	ie: FILTER = "SetA", 		RESULT = "SetA" => keep it
		    FILTER = "SetA, SetB", 	RESULT = "SetA"	=> filter out

2) Negative Filter: 	{@code "<filter name> does not match <filter value>"}
		For these, filter out any result that does not contain EXACTLY the filter value.
		ie: FILTER = "SetA", 		RESULT = "SetA, SetB"   => keep it
		    FILTER = "SetA, SetB", 	RESULT = "SetA, SetB"	=> filter out

3) Positive Exe Filter: 	Same as #1, but custom exe filters are stored differently than
		'normal' categories and must be processed separately.

4) Negative Exe Filter:	Same as #2, but custom exe filters are stored differently than
		'normal' categories and must be processed separately.
</pre>
@param func the function description
@return true if all filters resolve to true
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/protocol/BSimFilter.java