SearchExpressionEvaluatorAttribute
Use this attribute to register a static C# function as a new evaluator. SearchExpressionEvaluator when use within a SearchExpression can have a signature that is validated against the passed parameters.
Read time 5 minutesLast updated 13 days ago
Definition
- Type: Constructor
- Namespace: UnityEditor.Search
- Assembly: UnityEditor
SearchExpressionEvaluatorAttribute(SearchExpressionType[])
Use this attribute to register a static C# function as a new evaluator. SearchExpressionEvaluator when use within a SearchExpression can have a signature that is validated against the passed parameters.
public SearchExpressionEvaluatorAttribute(params SearchExpressionType[] signatureArgumentTypes)
Parameters
Array of types corresponding to the type of the parameters used with this evaluator.
Remarks
Here is an example using a Variadic paramater.
[SearchExpressionEvaluator(SearchExpressionType.Iterable | SearchExpressionType.Variadic)][SearchExpressionEvaluatorSignatureOverload(SearchExpressionType.Number, SearchExpressionType.Iterable | SearchExpressionType.Variadic)][Description("Extract and returns the X first results for each expression.")]public static IEnumerable<SearchItem> TakeXFirst(SearchExpressionContext c){ var argIndex = 0; var takeNumber = 1; if (c.args[0].types.HasFlag(SearchExpressionType.Number)) { ++argIndex; takeNumber = Math.Max((int)(c.args[0].GetNumberValue(takeNumber)), 0); } for ( ; argIndex < c.args.Length; ++argIndex) { var iterable = c.args[argIndex].Execute(c); var taken = 0; foreach (var item in iterable) { if (item == null) yield return null; else { yield return item; ++taken; if (taken == takeNumber) { c.Break(); break; } } } }}
Here is an example not supporting thread evaluation.
[Description("Returns ids of current selection")][SearchExpressionEvaluator(SearchExpressionEvaluationHints.ThreadNotSupported)]public static IEnumerable<SearchItem> SelectionIds(SearchExpressionContext c){ var entityIds = UnityEditor.Selection.entityIds; foreach (var id in entityIds) { EntityId entityId = id; yield return SearchExpression.CreateItem(UnsafeUtility.As<EntityId, ulong>(ref entityId), c.ResolveAlias("selected id")); }}
SearchExpressionEvaluatorAttribute(string, SearchExpressionType[])
Use this attribute to register a static C# function as a new evaluator. SearchExpressionEvaluator when use within a SearchExpression can have a signature that is validated against the passed parameters.
public SearchExpressionEvaluatorAttribute(string name, params SearchExpressionType[] signatureArgumentTypes)
Parameters
N ame of the evaluator. If no name are specified the name of the evaluator functio will be used.
Array of types corresponding to the type of the parameters used with this evaluator.
Remarks
Here is an example using a Variadic paramater.
[SearchExpressionEvaluator(SearchExpressionType.Iterable | SearchExpressionType.Variadic)][SearchExpressionEvaluatorSignatureOverload(SearchExpressionType.Number, SearchExpressionType.Iterable | SearchExpressionType.Variadic)][Description("Extract and returns the X first results for each expression.")]public static IEnumerable<SearchItem> TakeXFirst(SearchExpressionContext c){ var argIndex = 0; var takeNumber = 1; if (c.args[0].types.HasFlag(SearchExpressionType.Number)) { ++argIndex; takeNumber = Math.Max((int)(c.args[0].GetNumberValue(takeNumber)), 0); } for ( ; argIndex < c.args.Length; ++argIndex) { var iterable = c.args[argIndex].Execute(c); var taken = 0; foreach (var item in iterable) { if (item == null) yield return null; else { yield return item; ++taken; if (taken == takeNumber) { c.Break(); break; } } } }}
Here is an example not supporting thread evaluation.
[Description("Returns ids of current selection")][SearchExpressionEvaluator(SearchExpressionEvaluationHints.ThreadNotSupported)]public static IEnumerable<SearchItem> SelectionIds(SearchExpressionContext c){ var entityIds = UnityEditor.Selection.entityIds; foreach (var id in entityIds) { EntityId entityId = id; yield return SearchExpression.CreateItem(UnsafeUtility.As<EntityId, ulong>(ref entityId), c.ResolveAlias("selected id")); }}
SearchExpressionEvaluatorAttribute(SearchExpressionEvaluationHints, SearchExpressionType[])
Use this attribute to register a static C# function as a new evaluator. SearchExpressionEvaluator when use within a SearchExpression can have a signature that is validated against the passed parameters.
public SearchExpressionEvaluatorAttribute(SearchExpressionEvaluationHints hints, params SearchExpressionType[] signatureArgumentTypes)
Parameters
Hints to specify to the evaluator runtime how function should be run.
Array of types corresponding to the type of the parameters used with this evaluator.
Remarks
Here is an example using a Variadic paramater.
[SearchExpressionEvaluator(SearchExpressionType.Iterable | SearchExpressionType.Variadic)][SearchExpressionEvaluatorSignatureOverload(SearchExpressionType.Number, SearchExpressionType.Iterable | SearchExpressionType.Variadic)][Description("Extract and returns the X first results for each expression.")]public static IEnumerable<SearchItem> TakeXFirst(SearchExpressionContext c){ var argIndex = 0; var takeNumber = 1; if (c.args[0].types.HasFlag(SearchExpressionType.Number)) { ++argIndex; takeNumber = Math.Max((int)(c.args[0].GetNumberValue(takeNumber)), 0); } for ( ; argIndex < c.args.Length; ++argIndex) { var iterable = c.args[argIndex].Execute(c); var taken = 0; foreach (var item in iterable) { if (item == null) yield return null; else { yield return item; ++taken; if (taken == takeNumber) { c.Break(); break; } } } }}
Here is an example not supporting thread evaluation.
[Description("Returns ids of current selection")][SearchExpressionEvaluator(SearchExpressionEvaluationHints.ThreadNotSupported)]public static IEnumerable<SearchItem> SelectionIds(SearchExpressionContext c){ var entityIds = UnityEditor.Selection.entityIds; foreach (var id in entityIds) { EntityId entityId = id; yield return SearchExpression.CreateItem(UnsafeUtility.As<EntityId, ulong>(ref entityId), c.ResolveAlias("selected id")); }}
SearchExpressionEvaluatorAttribute(string, SearchExpressionEvaluationHints, SearchExpressionType[])
Use this attribute to register a static C# function as a new evaluator. SearchExpressionEvaluator when use within a SearchExpression can have a signature that is validated against the passed parameters.
public SearchExpressionEvaluatorAttribute(string name, SearchExpressionEvaluationHints hints, params SearchExpressionType[] signatureArgumentTypes)
Parameters
N ame of the evaluator. If no name are specified the name of the evaluator functio will be used.
Hints to specify to the evaluator runtime how function should be run.
Array of types corresponding to the type of the parameters used with this evaluator.
Remarks
Here is an example using a Variadic paramater.
[SearchExpressionEvaluator(SearchExpressionType.Iterable | SearchExpressionType.Variadic)][SearchExpressionEvaluatorSignatureOverload(SearchExpressionType.Number, SearchExpressionType.Iterable | SearchExpressionType.Variadic)][Description("Extract and returns the X first results for each expression.")]public static IEnumerable<SearchItem> TakeXFirst(SearchExpressionContext c){ var argIndex = 0; var takeNumber = 1; if (c.args[0].types.HasFlag(SearchExpressionType.Number)) { ++argIndex; takeNumber = Math.Max((int)(c.args[0].GetNumberValue(takeNumber)), 0); } for ( ; argIndex < c.args.Length; ++argIndex) { var iterable = c.args[argIndex].Execute(c); var taken = 0; foreach (var item in iterable) { if (item == null) yield return null; else { yield return item; ++taken; if (taken == takeNumber) { c.Break(); break; } } } }}
Here is an example not supporting thread evaluation.
[Description("Returns ids of current selection")][SearchExpressionEvaluator(SearchExpressionEvaluationHints.ThreadNotSupported)]public static IEnumerable<SearchItem> SelectionIds(SearchExpressionContext c){ var entityIds = UnityEditor.Selection.entityIds; foreach (var id in entityIds) { EntityId entityId = id; yield return SearchExpression.CreateItem(UnsafeUtility.As<EntityId, ulong>(ref entityId), c.ResolveAlias("selected id")); }}