Skip to content

Commit 7fdac3d

Browse files
committed
Move abs function implementation to main.h
Move abs function implementation to main.h
1 parent 7b26197 commit 7fdac3d

2 files changed

Lines changed: 100 additions & 99 deletions

File tree

main.cpp

Lines changed: 0 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -372,105 +372,6 @@ constexpr auto make_meta_scalar_handler(std::string_view usage, std::string_view
372372

373373
namespace 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 <

main.h

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,106 @@ constexpr auto make_meta_transform_handler(std::string_view usage, SetupFun&& se
11911191

11921192
namespace handlers
11931193
{
1194+
// abs function implementation
1195+
constexpr auto abs(
1196+
Workspace& workspace,
1197+
std::span<const std::string_view> args,
1198+
std::ostream& os = std::cout
1199+
)
1200+
{
1201+
auto transform_handler = make_meta_transform_handler<2, master_data_types>(
1202+
"abs [execution_policy] <input_data | $var> <output_var | $var>",
1203+
[](std::span<const std::string_view> filtered_args, const std::string_view policy_str, std::ostream& os)
1204+
{
1205+
os << "Calculating abs of " << filtered_args[0];
1206+
if (!std::ranges::empty(policy_str))
1207+
{
1208+
os << " (Policy: " << policy_str << ")";
1209+
}
1210+
os << "...\n";
1211+
1212+
return [policy_str, &os]<typename DataT>(DataT&& data) -> std::any
1213+
{
1214+
using DecayedDataT = std::remove_cvref_t<DataT>;
1215+
1216+
auto exec_default = [&]() -> std::any
1217+
{
1218+
if constexpr (TinyDIP::is_Image<DecayedDataT>::value)
1219+
{
1220+
if constexpr (requires { TinyDIP::abs(std::forward<DataT>(data)); })
1221+
{
1222+
return TinyDIP::abs(std::forward<DataT>(data));
1223+
}
1224+
else
1225+
{
1226+
throw std::invalid_argument("Input image type does not support abs operation.");
1227+
}
1228+
}
1229+
else if constexpr (std::ranges::input_range<DecayedDataT>)
1230+
{
1231+
return TinyDIP::recursive_transform<TinyDIP::recursive_depth<DecayedDataT>()>(
1232+
[](auto&& element)
1233+
{
1234+
return TinyDIP::generic_abs(std::forward<decltype(element)>(element));
1235+
},
1236+
std::forward<DataT>(data)
1237+
);
1238+
}
1239+
else
1240+
{
1241+
return TinyDIP::generic_abs(std::forward<DataT>(data));
1242+
}
1243+
1244+
return std::any{};
1245+
};
1246+
1247+
auto exec_policy = [&]<typename ExecPolicy>(ExecPolicy&& exec_policy) -> std::any
1248+
requires std::is_execution_policy_v<std::remove_cvref_t<ExecPolicy>>
1249+
{
1250+
if constexpr (TinyDIP::is_Image<DecayedDataT>::value)
1251+
{
1252+
if constexpr (requires { TinyDIP::abs(std::forward<ExecPolicy>(exec_policy), std::forward<DataT>(data)); })
1253+
{
1254+
return TinyDIP::abs(std::forward<ExecPolicy>(exec_policy), std::forward<DataT>(data));
1255+
}
1256+
else
1257+
{
1258+
if (!std::ranges::empty(policy_str))
1259+
{
1260+
os << "Warning: Execution policy requested but not supported for this image type/operation. Falling back to default.\n";
1261+
}
1262+
return exec_default();
1263+
}
1264+
}
1265+
else if constexpr (std::ranges::input_range<DecayedDataT>)
1266+
{
1267+
return TinyDIP::recursive_transform<TinyDIP::recursive_depth<DecayedDataT>()>(
1268+
std::forward<ExecPolicy>(exec_policy),
1269+
[](auto&& element)
1270+
{
1271+
return TinyDIP::generic_abs(std::forward<decltype(element)>(element));
1272+
},
1273+
std::forward<DataT>(data)
1274+
);
1275+
}
1276+
else
1277+
{
1278+
if (!std::ranges::empty(policy_str))
1279+
{
1280+
os << "Warning: Execution policy requested but not supported for this data type/operation. Falling back to default.\n";
1281+
}
1282+
return exec_default();
1283+
}
1284+
};
1285+
1286+
return dispatch_policy_string(policy_str, exec_policy, exec_default, os);
1287+
};
1288+
}
1289+
);
1290+
1291+
transform_handler(workspace, args, os);
1292+
}
1293+
11941294
// dct3 function implementation
11951295
constexpr void dct3(
11961296
Workspace& workspace,

0 commit comments

Comments
 (0)