MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ sort_implementation()

template<ComputeData InputType = std::shared_ptr<Kakshya::SignalSourceContainer>, ComputeData OutputType = InputType>
output_type MayaFlux::Yantra::VisionSorter< InputType, OutputType >::sort_implementation ( const input_type input)
inlineoverrideprotectedvirtual

Pure virtual sorting implementation - derived classes implement this.

Parameters
inputInput data with metadata
Returns
Raw sorting output before granularity processing

Implements MayaFlux::Yantra::UniversalSorter< InputType, OutputType >.

Definition at line 213 of file VisionSorter.hpp.

214 {
215 const auto analysis_it = input.metadata.find("vision_analysis");
216 if (analysis_it == input.metadata.end() || !analysis_it->second.has_value()) {
217 error<std::runtime_error>(
220 std::source_location::current(),
221 "VisionSorter: no vision_analysis in input metadata");
222 }
223
224 auto analysis = safe_any_cast_or_throw<VisionAnalysis>(analysis_it->second);
225
226 const bool descending = (this->get_direction() == SortingDirection::DESCENDING);
227
228 auto sort_collection = [&]<typename T>(std::vector<T>& coll) {
229 const size_t n = coll.size();
230 std::vector<size_t> idx(n);
231 std::iota(idx.begin(), idx.end(), 0);
232 std::stable_sort(idx.begin(), idx.end(),
233 [&](size_t a, size_t b) {
234 const float ka = m_key_fn
235 ? m_key_fn(a, analysis)
236 : key_for(a, coll, analysis);
237 const float kb = m_key_fn
238 ? m_key_fn(b, analysis)
239 : key_for(b, coll, analysis);
240 return descending ? ka > kb : ka < kb;
241 });
242 std::vector<T> sorted(n);
243 for (size_t i = 0; i < n; ++i)
244 sorted[i] = coll[idx[i]];
245 coll = std::move(sorted);
246 };
247
248 if (!analysis.frame.boxes.empty())
249 sort_collection(analysis.frame.boxes);
250 if (!analysis.frame.contours.empty())
251 sort_collection(analysis.frame.contours);
252
253 output_type out { input.data };
254 out.metadata = input.metadata;
255 out.metadata["vision_analysis"] = std::move(analysis);
256 return out;
257 }
Core::GlobalInputConfig input
Definition Config.cpp:38
size_t a
size_t b
SortingDirection get_direction() const
Datum< OutputType > output_type
@ ComputeMatrix
Compute operations (Yantra - algorithms, matrices, DSP)
@ Yantra
DSP algorithms, computational units, matrix operations, Grammar.
T data
The actual computation data.
Definition DataIO.hpp:25

References a, b, MayaFlux::Journal::ComputeMatrix, MayaFlux::Yantra::Datum< T >::data, MayaFlux::Yantra::UniversalSorter< InputType, OutputType >::get_direction(), input, MayaFlux::Yantra::Datum< T >::metadata, and MayaFlux::Journal::Yantra.

+ Here is the call graph for this function: