@@ -372,105 +372,6 @@ constexpr auto make_meta_scalar_handler(std::string_view usage, std::string_view
372372
373373namespace handlers
374374{
375- // abs function implementation
376- constexpr auto abs (
377- Workspace& workspace,
378- std::span<const std::string_view> args,
379- std::ostream& os = std::cout
380- )
381- {
382- auto transform_handler = make_meta_transform_handler<2 , master_data_types>(
383- " abs [execution_policy] <input_data | $var> <output_var | $var>" ,
384- [](std::span<const std::string_view> filtered_args, const std::string_view policy_str, std::ostream& os)
385- {
386- os << " Calculating abs of " << filtered_args[0 ];
387- if (!std::ranges::empty (policy_str))
388- {
389- os << " (Policy: " << policy_str << " )" ;
390- }
391- os << " ...\n " ;
392-
393- return [policy_str, &os]<typename DataT>(DataT&& data) -> std::any
394- {
395- using DecayedDataT = std::remove_cvref_t <DataT>;
396-
397- auto exec_default = [&]() -> std::any
398- {
399- if constexpr (TinyDIP::is_Image<DecayedDataT>::value)
400- {
401- if constexpr (requires { TinyDIP::abs (std::forward<DataT>(data)); })
402- {
403- return TinyDIP::abs (std::forward<DataT>(data));
404- }
405- else
406- {
407- throw std::invalid_argument (" Input image type does not support abs operation." );
408- }
409- }
410- else if constexpr (std::ranges::input_range<DecayedDataT>)
411- {
412- return TinyDIP::recursive_transform<TinyDIP::recursive_depth<DecayedDataT>()>(
413- [](auto && element)
414- {
415- return TinyDIP::generic_abs (std::forward<decltype (element)>(element));
416- },
417- std::forward<DataT>(data)
418- );
419- }
420- else
421- {
422- return TinyDIP::generic_abs (std::forward<DataT>(data));
423- }
424-
425- return std::any{};
426- };
427-
428- auto exec_policy = [&]<typename ExecPolicy>(ExecPolicy&& exec_policy) -> std::any
429- requires std::is_execution_policy_v<std::remove_cvref_t <ExecPolicy>>
430- {
431- if constexpr (TinyDIP::is_Image<DecayedDataT>::value)
432- {
433- if constexpr (requires { TinyDIP::abs (std::forward<ExecPolicy>(exec_policy), std::forward<DataT>(data)); })
434- {
435- return TinyDIP::abs (std::forward<ExecPolicy>(exec_policy), std::forward<DataT>(data));
436- }
437- else
438- {
439- if (!std::ranges::empty (policy_str))
440- {
441- os << " Warning: Execution policy requested but not supported for this image type/operation. Falling back to default.\n " ;
442- }
443- return exec_default ();
444- }
445- }
446- else if constexpr (std::ranges::input_range<DecayedDataT>)
447- {
448- return TinyDIP::recursive_transform<TinyDIP::recursive_depth<DecayedDataT>()>(
449- std::forward<ExecPolicy>(exec_policy),
450- [](auto && element)
451- {
452- return TinyDIP::generic_abs (std::forward<decltype (element)>(element));
453- },
454- std::forward<DataT>(data)
455- );
456- }
457- else
458- {
459- if (!std::ranges::empty (policy_str))
460- {
461- os << " Warning: Execution policy requested but not supported for this data type/operation. Falling back to default.\n " ;
462- }
463- return exec_default ();
464- }
465- };
466-
467- return dispatch_policy_string (policy_str, exec_policy, exec_default, os);
468- };
469- }
470- );
471-
472- transform_handler (workspace, args, os);
473- }
474375
475376 // append_element template function implementation
476377 template <
0 commit comments