9 #ifndef __PDG_WORKITEM_SORT_H__
10 #define __PDG_WORKITEM_SORT_H__
37 static bool prioritize(
45 template <
typename T,
bool Reverse,
typename... Args>
46 class Comparator :
public T
49 Comparator() :
T(), myReverse(
Reverse), myPriorityItems(
nullptr) {}
50 Comparator(
bool reverse, Args...
args)
51 :
T(std::forward<Args>(
args)...)
52 , myPriorityItems(
nullptr)
56 Comparator(
bool reverse,
59 :
T(std::forward<Args>(
args)...)
60 , myPriorityItems(priority_items)
76 if (prioritize(lhs, rhs, result))
89 if (prioritize(&lhs, &rhs, result))
99 return PDG_WorkItemSort::prioritize(
100 myPriorityItems, lhs, rhs, myReverse, result);
108 class PriorityComparator
114 class IndexComparator
118 : myInputs(input_list) {}
124 class InputComparator
128 : myInputs(input_list) {}
135 class AttributeComparator
139 : myEvaluator(evaluator) {}
146 class FrameComparator
150 : myInputs(input_list) {}
159 template<
bool Reverse=false>
160 using Priority = Comparator<PriorityComparator, Reverse>;
163 template<
bool Reverse=false>
164 using Index = Comparator<IndexComparator, Reverse>;
167 template<
bool Reverse=false>
169 Comparator<IndexComparator, Reverse, const PDG_NodeArray*>;
173 template<
bool Reverse=false>
175 Comparator<InputComparator, Reverse, const PDG_NodeArray*>;
178 template<
bool Reverse=false>
180 Comparator<AttributeComparator, Reverse, const PDG_AttributeEvaluator*>;
183 template<
bool Reverse=false>
184 using Frame = Comparator<FrameComparator, Reverse, const PDG_NodeArray*>;
189 template <
typename Array>
193 sortItems(work_items, default_options,
nullptr,
nullptr);
198 template <
typename Array>
211 work_items, target_node->
sortOptions(), required_items, &inputs);
215 template <
typename Array>
225 sort_options.
myRequired ? required_items :
nullptr;
230 work_items.sort(
IndexInput<>(reverse, priority_items, inputs));
232 work_items.sort(
Index<>(reverse, priority_items));
237 work_items.sort(
Input<>(reverse, priority_items, inputs));
239 work_items.sort(
Index<>(reverse, priority_items));
244 work_items.sort(
Attribute<>(reverse, priority_items, &evaluator));
248 work_items.sort(
Frame<>(reverse, priority_items, inputs));
bool myRequired
Sort required items to the beginning of the list.
Comparator< IndexComparator, Reverse > Index
Functor for comparing work items for sorting by index.
static void sortItems(Array &work_items)
Sorts the work items based on index, in ascending order.
Order by a specific attribute value.
Comparator< PriorityComparator, Reverse > Priority
Functor that compares two work item references or pointers by priority.
void reverse(I begin, I end)
**But if you need a result
Comparator< FrameComparator, Reverse, const PDG_NodeArray * > Frame
Compars work items using their frame value.
Comparator< InputComparator, Reverse, const PDG_NodeArray * > Input
Comparator< AttributeComparator, Reverse, const PDG_AttributeEvaluator * > Attribute
Compares work items using an attribute.
Comparator< IndexComparator, Reverse, const PDG_NodeArray * > IndexInput
Functor for comparing work items for sorting by index and node.
void connectedNodes(PDG_NodeArray &nodes, PDG_PortType type, bool filter_bypassed=true, bool filter_reference=true) const
static void sortItems(Array &work_items, const PDG_SortOptions &sort_options, const PDG_WorkItemIDBoolMap *required_items, const PDG_NodeArray *inputs)
Sorts the work items based on a sort options struct.
const PDG_SortOptions & sortOptions() const
Returns the node's sort options struct.
CompareResults OIIO_API compare(const ImageBuf &A, const ImageBuf &B, float failthresh, float warnthresh, ROI roi={}, int nthreads=0)
PDG_WorkItemSortOrder myOrder
The type of sort to use for work items.
UT_StringHolder myAttribute
The sort attribute, used when the sort order is SortAttribute.
static void sortItems(Array &work_items, const PDG_Node *target_node, const PDG_WorkItemIDBoolMap *required_items)
Order by the work item's frame value.
**If you just want to fire and args
bool myDirection
Sort ascending or descending.