Skip to content
Snippets Groups Projects
Commit 3ed74a9c authored by Oskar Lappi's avatar Oskar Lappi
Browse files

Added min and max element accessors

parent 2503e847
No related branches found
No related tags found
No related merge requests found
......@@ -2,7 +2,9 @@
#include <vector>
#include <utility>
#include <iterator>
#include <ranges>
#include <unordered_set>
#include <algorithm>
namespace ojl {
template <typename T>
......@@ -254,6 +256,138 @@ namespace ojl {
return r_relations.count(r);
}
// Min elements
std::optional<L>
l_min_element()
{
auto it = std::min_element(left_elements.begin(), left_elements.end());
if (it != left_elements.end()){
return *it;
}
return std::nullopt;
}
std::optional<R>
r_min_element()
{
auto it = std::min_element(right_elements.begin(), right_elements.end());
if (it != right_elements.end()){
return *it;
}
return std::nullopt;
}
// Max elements
std::optional<L>
l_max_element()
{
auto it = std::max_element(left_elements.begin(), left_elements.end());
if (it != left_elements.end()){
return *it;
}
return std::nullopt;
}
std::optional<R>
r_max_element()
{
auto it = std::max_element(right_elements.begin(), right_elements.end());
if (it != right_elements.end()){
return *it;
}
return std::nullopt;
}
// Min mapped elements
std::optional<R>
min_mapped_element(left l_key)
{
auto it = std::ranges::min_element(l_relations | std::views::filter([&l_key](relation rel){return rel.first == l_key.val;}));
if (it != l_relations.end()){
return it->second;
}
return std::nullopt;
}
std::optional<R>
min_mapped_element(right r_key)
{
auto it = std::ranges::min_element(l_relations | std::views::filter([&r_key](relation rel){return rel.second == r_key.val;}));
if (it != l_relations.end()){
return it->first;
}
return std::nullopt;
}
std::optional<R>
l_min_mapped_element(L l)
{
auto it = std::ranges::min_element(l_relations | std::views::filter([&l](relation rel){return rel.first == l;}));
if (it != l_relations.end()){
return it->second;
}
return std::nullopt;
}
std::optional<R>
r_min_mapped_element(R r)
{
auto it = std::ranges::min_element(l_relations | std::views::filter([&r](relation rel){return rel.second == r;}));
if (it != l_relations.end()){
return it->first;
}
return std::nullopt;
}
// Max mapped elements
std::optional<R>
max_mapped_element(left l_key)
{
auto it = std::ranges::max_element(l_relations | std::views::filter([&l_key](relation rel){return rel.first == l_key.val;}));
if (it != l_relations.end()){
return it->second;
}
return std::nullopt;
}
std::optional<R>
max_mapped_element(right r_key)
{
auto it = std::ranges::max_element(l_relations | std::views::filter([&r_key](relation rel){return rel.second == r_key.val;}));
if (it != l_relations.end()){
return it->first;
}
return std::nullopt;
}
std::optional<R>
l_max_mapped_element(L l)
{
auto it = std::ranges::max_element(l_relations | std::views::filter([&l](relation rel){return rel.first == l;}));
if (it != l_relations.end()){
return it->second;
}
return std::nullopt;
}
std::optional<R>
r_max_mapped_element(R r)
{
auto it = std::ranges::max_element(l_relations | std::views::filter([&r](relation rel){return rel.second == r;}));
if (it != l_relations.end()){
return it->first;
}
return std::nullopt;
}
// Equal range
std::pair<relation_iterator, relation_iterator>
equal_range(left l_key)
......
#TODO: make this macro take an argument
macro(find_catch2_and_define_test_target)
if (TARGET TestInterface)
set(TestInterface_EXISTS 1)
......@@ -33,4 +32,3 @@ macro(find_catch2_and_define_test_target)
endif()
endmacro()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment