Skip to content

Commit 195105b

Browse files
committed
[nop] cleanup after switching to core-0.6.0
1 parent f8f42b4 commit 195105b

18 files changed

+111
-159
lines changed

include/bio/io/detail/concept.hpp

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <concepts>
1717

1818
#include <bio/alphabet/concept.hpp>
19+
#include <bio/meta/overloaded.hpp>
1920

2021
#include <bio/io/detail/utility.hpp>
2122

@@ -26,16 +27,6 @@ namespace bio::io::detail
2627
* \{
2728
*/
2829

29-
/*!\interface bio::io::detail::one_of <>
30-
* \tparam t The query type to compare.
31-
* \tparam ts The reference types.
32-
* \brief Checks whether the list of reference types contains the query type.
33-
*/
34-
//!\cond
35-
template <typename t, typename... ts>
36-
concept one_of = (std::same_as<t, ts> || ...);
37-
//!\endcond
38-
3930
/*!\interface bio::io::detail::deliberate_alphabet <>
4031
* \tparam t The query type to compare.
4132
* \brief A bio::alphabet::alphabet that is **not** a character or a number (any std::integral).
@@ -45,15 +36,6 @@ template <typename t>
4536
concept deliberate_alphabet = alphabet::alphabet<t> && !std::integral<std::remove_cvref_t<t>>;
4637
//!\endcond
4738

48-
/*!\interface bio::io::detail::decays_to <>
49-
* \tparam t The type to check.
50-
* \brief Shortcut for `std::same_as<std::decay_t<from_t>, to_t>`.
51-
*/
52-
//!\cond
53-
template <typename from_t, typename to_t>
54-
concept decays_to = std::same_as<std::decay_t<from_t>, to_t>;
55-
//!\endcond
56-
5739
/*!\brief Pass this function a constrained functor that accepts one argument and returns std::true_type.
5840
* \details
5941
*
@@ -65,7 +47,7 @@ constexpr bool lazy_concept_checker(auto fun)
6547
{
6648
return std::false_type{};
6749
};
68-
using ret_t = decltype(detail::overloaded{fallback, fun}(1));
50+
using ret_t = decltype(meta::overloaded{fallback, fun}(1));
6951
return ret_t::value;
7052
}
7153

include/bio/io/detail/range.hpp

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
#include <ranges>
1717
#include <span>
1818

19+
#include <bio/meta/concept/core_language.hpp>
20+
#include <bio/ranges/concept.hpp>
21+
1922
#include <bio/io/platform.hpp>
2023

2124
namespace bio::io::detail
@@ -29,32 +32,6 @@ namespace bio::io::detail
2932
// concepts
3033
// ----------------------------------------------------------------------------
3134

32-
/*!\interface bio::io::detail::back_insertable_with <>
33-
* \extends std::ranges::output_range
34-
* \tparam rng_t The container type.
35-
* \tparam val_t The type to append to the container.
36-
* \brief Describes range types that can grow in amortised constant time by appending an element of type val_t.
37-
*/
38-
//!\cond
39-
template <typename rng_t, typename val_t>
40-
concept back_insertable_with = std::ranges::output_range<rng_t, val_t> && requires(rng_t & v)
41-
{
42-
v.push_back(std::declval<val_t>());
43-
};
44-
//!\endcond
45-
46-
/*!\interface bio::io::detail::back_insertable <>
47-
* \extends std::ranges::output_range
48-
* \extends std::ranges::input_range
49-
* \tparam rng_t The container type.
50-
* \brief Describes range types that can grow in amortised constant time by appending an element.
51-
*/
52-
//!\cond
53-
template <typename rng_t>
54-
concept back_insertable =
55-
std::ranges::input_range<rng_t> && back_insertable_with<rng_t, std::ranges::range_reference_t<rng_t>>;
56-
//!\endcond
57-
5835
//!\brief A range whose value type is `char`.
5936
template <typename t>
6037
concept char_range =
@@ -69,21 +46,21 @@ char const * > ;
6946
template <typename t>
7047
concept int_range =
7148
std::ranges::forward_range<t> && std::integral<std::remove_cvref_t<std::ranges::range_value_t<t>>> &&
72-
!std::same_as<char, std::remove_cvref_t<std::ranges::range_value_t<t>>>;
49+
meta::different_from<char, std::ranges::range_value_t<t>>;
7350

7451
/*!\interface bio::io::detail::out_string <>
7552
* \tparam rng_t The container type.
7653
* \brief A range that `char` can be back-inserted to, or a string_view.
7754
*/
7855
//!\cond
7956
template <typename rng_t>
80-
concept out_string = back_insertable_with<rng_t, char> || std::same_as<rng_t &, std::string_view &>;
57+
concept out_string = ranges::back_insertable_with<rng_t, char> || std::same_as<rng_t &, std::string_view &>;
8158
//!\endcond
8259

8360
//!\brief Range that is random-access, output, sized and has .resize() and .clear()
8461
template <typename rng_t>
8562
concept vector_like = std::ranges::random_access_range<rng_t> && std::ranges::sized_range<rng_t> &&
86-
std::ranges::output_range<rng_t, std::ranges::range_reference_t<rng_t>> && requires(rng_t & v)
63+
ranges::back_insertable<rng_t> && requires(rng_t & v)
8764
{
8865
v.resize(3);
8966
v.clear();
@@ -132,8 +109,8 @@ concept transform_view_on_string_view = requires
132109
* If the input range is sized and the target range offers a `.resize()` member, this function uses
133110
* resize and assignment instead of back-insertion.
134111
*/
135-
void sized_range_copy(std::ranges::input_range auto && in,
136-
back_insertable_with<std::ranges::range_reference_t<decltype(in)>> auto && out)
112+
void sized_range_copy(std::ranges::input_range auto && in,
113+
ranges::back_insertable_with<std::ranges::range_reference_t<decltype(in)>> auto && out)
137114
{
138115
using in_t = decltype(in);
139116
using out_t = decltype(out);

include/bio/io/detail/tuple_record.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ consteval bool has_non_ignore_field()
431431
using field_ids = typename tuple_record_t::field_ids;
432432
if constexpr (field_ids::contains(f))
433433
{
434-
if constexpr (!decays_to<tuple_record_element_t<f, tuple_record_t>, ignore_t>)
434+
if constexpr (!meta::decays_to<tuple_record_element_t<f, tuple_record_t>, ignore_t>)
435435
{
436436
return true;
437437
}

include/bio/io/detail/utility.hpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,6 @@ namespace bio::io::detail
3232
* \{
3333
*/
3434

35-
//!\brief Wrapper to create an overload set of multiple functors.
36-
template <typename... functors>
37-
struct overloaded : functors...
38-
{
39-
using functors::operator()...;
40-
};
41-
42-
//!\brief Deduction guide for bio::io::detail::overloaded.
43-
template <typename... functors>
44-
overloaded(functors...) -> overloaded<functors...>;
45-
//!\}
46-
4735
//!\brief Can be included as a member to infer whether parent is in moved-from state.
4836
//!\ingroup io
4937
struct move_tracker

include/bio/io/detail/writer_base.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ class writer_base
320320
void write_record(auto & r)
321321
{
322322
init_state = false;
323-
std::visit(detail::overloaded([](std::monostate) {}, [&r](auto & handler) { handler.write_record(r); }),
323+
std::visit(meta::overloaded([](std::monostate) {}, [&r](auto & handler) { handler.write_record(r); }),
324324
format_handler);
325325
}
326326

include/bio/io/format/bcf_input_handler.hpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ class format_input_handler<bcf> :
465465

466466
// IMPLEMENTATION NOTE: the following is the only decoder that is used in parsed record reading.
467467
//!\brief Decodes any range of integral and stores in any range of integral (no check of sizes).
468-
template <detail::back_insertable out_t>
468+
template <ranges::back_insertable out_t>
469469
requires detail::int_range<out_t>
470470
void decode_numbers_into(std::span<std::byte const> in, out_t & out)
471471
{
@@ -764,7 +764,7 @@ class format_input_handler<bcf> :
764764
}
765765

766766
//!\overload
767-
template <detail::back_insertable parsed_field_t>
767+
template <ranges::back_insertable parsed_field_t>
768768
requires(std::ranges::range<std::ranges::range_reference_t<parsed_field_t>>)
769769
void parse_field(meta::vtag_t<detail::field::alt> const & /**/, parsed_field_t & parsed_field)
770770
{
@@ -785,15 +785,15 @@ class format_input_handler<bcf> :
785785
}
786786

787787
//!\brief Reading of FILTER field.
788-
template <detail::back_insertable parsed_field_t>
788+
template <ranges::back_insertable parsed_field_t>
789789
requires detail::int_range<parsed_field_t>
790790
void parse_field(meta::vtag_t<detail::field::filter> const & /**/, parsed_field_t & parsed_field)
791791
{
792792
decode_numbers_into(get<detail::field::filter>(raw_record), parsed_field);
793793
}
794794

795795
//!\overload
796-
template <detail::back_insertable parsed_field_t>
796+
template <ranges::back_insertable parsed_field_t>
797797
requires detail::out_string<std::ranges::range_reference_t<parsed_field_t>>
798798
void parse_field(meta::vtag_t<detail::field::filter> const & /**/, parsed_field_t & parsed_field)
799799
{
@@ -810,7 +810,7 @@ class format_input_handler<bcf> :
810810
}
811811

812812
//!\brief Reading of the INFO field.
813-
template <detail::back_insertable parsed_field_t>
813+
template <ranges::back_insertable parsed_field_t>
814814
requires detail::info_element_reader_concept<std::ranges::range_reference_t<parsed_field_t>>
815815
void parse_field(meta::vtag_t<detail::field::info> const & /**/, parsed_field_t & parsed_field)
816816
{
@@ -929,20 +929,19 @@ class format_input_handler<bcf> :
929929

930930
/* we transform number to string and store in caches */
931931
std::visit(
932-
[&]<typename rng_t>(rng_t && int_range)
932+
[&]<typename rng_t>(rng_t && rng)
933933
{
934-
using innermost_val_t = bio::ranges::range_innermost_value_t<rng_t>;
935934
if constexpr (std::ranges::range<std::ranges::range_value_t<rng_t>> &&
936-
std::integral<innermost_val_t> && !std::same_as<innermost_val_t, char>)
935+
detail::int_range<std::ranges::range_value_t<rng_t>>)
937936
{
938-
if (std::ranges::size(int_range) != record_core->n_sample)
937+
if (std::ranges::size(rng) != record_core->n_sample)
939938
error("Expected exactly one GT string per sample.");
940939

941940
for (size_t sample = 0; sample < record_core->n_sample; ++sample)
942941
{
943942
gt_cache[sample].clear();
944943
number_cache.clear();
945-
parse_gt_field(int_range[sample], number_cache, gt_cache[sample]);
944+
parse_gt_field(rng[sample], number_cache, gt_cache[sample]);
946945
}
947946
}
948947
else
@@ -981,7 +980,7 @@ class format_input_handler<bcf> :
981980
}
982981

983982
//!\brief Reading of the GENOTYPES field.
984-
template <detail::back_insertable field_t>
983+
template <ranges::back_insertable field_t>
985984
requires detail::genotype_reader_concept<std::ranges::range_reference_t<field_t>>
986985
void parse_field(meta::vtag_t<detail::field::genotypes> const & /**/, field_t & parsed_field)
987986
{

include/bio/io/format/bcf_output_handler.hpp

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,9 @@ class format_output_handler<bcf>
175175
{
176176
size_t run_length = 1;
177177

178-
auto eq = detail::overloaded{[](std::ranges::range auto && lhs, std::ranges::range auto && rhs)
179-
{ return std::ranges::equal(lhs, rhs); },
180-
[](auto && lhs, auto && rhs) { return lhs == rhs; }};
178+
auto eq = meta::overloaded{[](std::ranges::range auto && lhs, std::ranges::range auto && rhs)
179+
{ return std::ranges::equal(lhs, rhs); },
180+
[](auto && lhs, auto && rhs) { return lhs == rhs; }};
181181

182182
for (auto rit = std::ranges::begin(range), next = std::ranges::next(rit); rit != std::ranges::end(range);
183183
++rit, ++next)
@@ -446,8 +446,8 @@ class format_output_handler<bcf>
446446
return;
447447
}
448448

449-
auto to_size = detail::overloaded{[](char const * const cstr) { return std::string_view{cstr}.size(); },
450-
[](std::ranges::range auto & rng) { return std::ranges::distance(rng); }};
449+
auto to_size = meta::overloaded{[](char const * const cstr) { return std::string_view{cstr}.size(); },
450+
[](std::ranges::range auto & rng) { return std::ranges::distance(rng); }};
451451

452452
size_t size_sum = std::transform_reduce(std::ranges::begin(vector_of_string),
453453
std::ranges::end(vector_of_string),
@@ -999,10 +999,12 @@ class format_output_handler<bcf>
999999
write_header();
10001000
}
10011001

1002-
static_assert(!detail::decays_to<typename record_t::chrom_t, ignore_t>,
1002+
static_assert(meta::different_from<typename record_t::chrom_t, ignore_t>,
10031003
"The record must contain the CHROM field.");
1004-
static_assert(!detail::decays_to<typename record_t::pos_t, ignore_t>, "The record must contain the POS field.");
1005-
static_assert(!detail::decays_to<typename record_t::ref_t, ignore_t>, "The record must contain the REF field.");
1004+
static_assert(meta::different_from<typename record_t::pos_t, ignore_t>,
1005+
"The record must contain the POS field.");
1006+
static_assert(meta::different_from<typename record_t::ref_t, ignore_t>,
1007+
"The record must contain the REF field.");
10061008

10071009
/* IMPLEMENTATION NOTE:
10081010
* A problem when writing BCF is that the first fields of the record hold the size of the record
@@ -1038,45 +1040,45 @@ class format_output_handler<bcf>
10381040

10391041
set_core_rlen(record.ref);
10401042

1041-
if constexpr (!detail::decays_to<typename record_t::qual_t, ignore_t>)
1043+
if constexpr (meta::different_from<typename record_t::qual_t, ignore_t>)
10421044
set_core_qual(record.qual);
10431045

1044-
if constexpr (!detail::decays_to<typename record_t::info_t, ignore_t>)
1046+
if constexpr (meta::different_from<typename record_t::info_t, ignore_t>)
10451047
set_core_n_info(record.info);
10461048

1047-
if constexpr (!detail::decays_to<typename record_t::alt_t, ignore_t>)
1049+
if constexpr (meta::different_from<typename record_t::alt_t, ignore_t>)
10481050
set_core_n_allele(record.alt);
10491051
else
10501052
record_core.n_allele = 1; // the REF allele
10511053

10521054
record_core.n_sample = header->column_labels.size() > 9 ? header->column_labels.size() - 9 : 0;
10531055

1054-
if constexpr (!detail::decays_to<typename record_t::genotypes_t, ignore_t>)
1056+
if constexpr (meta::different_from<typename record_t::genotypes_t, ignore_t>)
10551057
set_core_n_fmt(record.genotypes);
10561058

10571059
// write record core
10581060
it->write_as_binary(record_core);
10591061

10601062
/* After this point, the order of writers is important! */
10611063

1062-
if constexpr (!detail::decays_to<typename record_t::id_t, ignore_t>)
1064+
if constexpr (meta::different_from<typename record_t::id_t, ignore_t>)
10631065
write_field(meta::vtag<detail::field::id>, record.id);
10641066
else
10651067
write_field(meta::vtag<detail::field::id>, std::string_view{});
10661068

10671069
write_field(meta::vtag<detail::field::ref>, record.ref);
10681070

1069-
if constexpr (!detail::decays_to<typename record_t::alt_t, ignore_t>)
1071+
if constexpr (meta::different_from<typename record_t::alt_t, ignore_t>)
10701072
write_field(meta::vtag<detail::field::alt>, record.alt);
10711073
else
10721074
write_field(meta::vtag<detail::field::alt>, std::span<std::string_view>{});
10731075

1074-
if constexpr (!detail::decays_to<typename record_t::filter_t, ignore_t>)
1076+
if constexpr (meta::different_from<typename record_t::filter_t, ignore_t>)
10751077
write_field(meta::vtag<detail::field::filter>, record.filter);
10761078
else
10771079
write_field(meta::vtag<detail::field::filter>, std::span<std::string_view>{});
10781080

1079-
if constexpr (!detail::decays_to<typename record_t::info_t, ignore_t>)
1081+
if constexpr (meta::different_from<typename record_t::info_t, ignore_t>)
10801082
write_field(meta::vtag<detail::field::info>, record.info);
10811083
else
10821084
write_field(meta::vtag<detail::field::info>, std::span<var_io::info_element<>>{});
@@ -1087,7 +1089,7 @@ class format_output_handler<bcf>
10871089

10881090
if (header->column_labels.size() > 8)
10891091
{
1090-
if constexpr (!detail::decays_to<typename record_t::genotypes_t, ignore_t>)
1092+
if constexpr (meta::different_from<typename record_t::genotypes_t, ignore_t>)
10911093
write_field(meta::vtag<detail::field::genotypes>, record.genotypes);
10921094
else
10931095
write_field(meta::vtag<detail::field::genotypes>, std::span<var_io::genotype_element<>>{});

include/bio/io/format/format_input_handler.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <vector>
1919

2020
#include <bio/meta/tag/vtag.hpp>
21+
#include <bio/ranges/concept.hpp>
2122
#include <bio/ranges/views/char_strictly_to.hpp>
2223

2324
#include <bio/io/detail/charconv.hpp>
@@ -139,15 +140,15 @@ class format_input_handler_base
139140
}
140141

141142
//!\brief Parse into string-like types.
142-
template <detail::back_insertable parsed_field_t>
143+
template <ranges::back_insertable parsed_field_t>
143144
requires detail::char_range<parsed_field_t>
144145
static void parse_field_aux(std::string_view const in, parsed_field_t & parsed_field)
145146
{
146147
detail::sized_range_copy(in, parsed_field);
147148
}
148149

149150
//!\brief Parse into containers of alphabets.
150-
template <detail::back_insertable parsed_field_t>
151+
template <ranges::back_insertable parsed_field_t>
151152
requires detail::deliberate_alphabet<std::ranges::range_reference_t<parsed_field_t>>
152153
static void parse_field_aux(std::string_view const in, parsed_field_t & parsed_field)
153154
{

0 commit comments

Comments
 (0)