[#BloombergLP-ball-AttributeContext_RuleEvaluationCache]
= xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/ball.adoc[ball]::AttributeContext&lowbar;RuleEvaluationCache
:relfileprefix: ../../
:mrdocs:

This is an implementation type of `AttributeContext` and should not be used by clients of this package&period; A rule evaluation cache is a mechanism for evaluating and caching whether a rule is active&period; A rule is considered active if all of its attributes are satisfied by the collection of attributes held in a `AttributeContainerList` object (i&period;e&period;, `Rule&colon;&colon;evaluate` returns `true` for the `AttributeContainerList` object)&period; The rules this cache evaluates are contained in a `RuleSet` object&period; `RuleSet&colon;&colon;MaskType` is a bit mask for a rule set, where each bit is a boolean value associated with the rule at the corresponding index in a rule set&period; An `AttributeContext` determines, using the `isDataAvailable` method, if a particular set of rules (described using a bit mask) have already been evaluated&period; A context accesses the current cache of rule evaluations using the `knownActiveRules` method&period; Finally, a context updates the cache of rule evaluations using the `update` method&period; Note that the `isDataAvailable` method should be used prior to using `knownActiveRules` in order to ensure the relevant rules have been evaluated and that those evaluations are up&hyphen;to&hyphen;date&period;

== Synopsis

Declared in `&lt;ball&lowbar;attributecontext&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class AttributeContext&lowbar;RuleEvaluationCache;
----

== Member Functions

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/ball/AttributeContext_RuleEvaluationCache/2constructor.adoc[`AttributeContext&lowbar;RuleEvaluationCache`]         [.small]#[constructor]#
| Create an empty rule evaluation cache having a sequence number of &hyphen;1&period;
| xref:BloombergLP/ball/AttributeContext_RuleEvaluationCache/clear.adoc[`clear`] 
| Clear any currently cached rule evaluation data, restoring this object to its default constructed state (empty)&period;
| xref:BloombergLP/ball/AttributeContext_RuleEvaluationCache/isDataAvailable.adoc[`isDataAvailable`] 
| Return `true` if this cache contains up&hyphen;to&hyphen;date cached rule evaluations having the specified `sequenceNumber` for the set of rules indicated by the specified `relevantRulesMask` bit mask, and `false` otherwise&period;
| xref:BloombergLP/ball/AttributeContext_RuleEvaluationCache/knownActiveRules.adoc[`knownActiveRules`] 
| Return a bit mask indicating those rules, from the set of rules provided in the last call to `update`, that are known to be active (as of that last call to `update`)&period; If a bit in the returned value is set to 1, the rule at the corresponding index is active&semi; however, if a bit is set to 0, the corresponding rule is either not active _or_ has not been evaluated&period; Note that `isDataAvailable` should be called to test if this cache contains up&hyphen;to&hyphen;date evaluated rule information for the rules in which they are interested before using the result of this method&period;
| xref:BloombergLP/ball/AttributeContext_RuleEvaluationCache/print.adoc[`print`] 
| Format this object to the specified output `stream` at the (absolute value of) the optionally specified indentation `level` and return a reference to `stream`&period; If `level` is specified, optionally specify `spacesPerLevel`, the number of spaces per indentation level for this and all of its nested objects&period; If `level` is negative, suppress indentation of the first line&period; If `spacesPerLevel` is negative, format the entire output on one line, suppressing all but the initial indentation (as governed by `level`)&period; If `stream` is not valid on entry, this operation has no effect&period;
| xref:BloombergLP/ball/AttributeContext_RuleEvaluationCache/update.adoc[`update`] 
| Update, for the specified `sequenceNumber`, the cache for those rules indicated by the specified `relevantRulesMask` bit mask in the specified set of `rules`, by evaluating those rules for the specified `attributes`&semi; return the bit mask indicating those rules that are known to be active&period; If a bit in the returned bit mask value is set to 1, the rule at the corresponding index in `rules` is &quot;active&quot;&semi; however, if a bit is set to 0, the corresponding rule is either not active _or_ has not been evaluated&period; This operation does, however, guarantee that all the rules indicated by the `relevantRulesMask` _will_ be evaluated&period; A particular rule is considered &quot;active&quot; if all of its attributes are satisfied by `attributes` (i&period;e&period;, if `Rule&colon;&colon;evaluate` returns `true` for `attributes`)&period; The behavior is undefined unless `rules` is not modified during this operation (i&period;e&period;, any lock associated with `rules` must be locked during this operation)&period;
|===



[.small]#Created with https://www.mrdocs.com[MrDocs]#
