Skip to content

Commit 2bfe7f8

Browse files
committed
fixing errors...
1 parent 8b3dccb commit 2bfe7f8

File tree

2 files changed

+34
-24
lines changed

2 files changed

+34
-24
lines changed

include/ctre/evaluation.hpp

+31-22
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,17 @@ template <typename CharT, typename Iterator, typename EndIterator> constexpr CTR
116116
}
117117

118118
template <auto... String, size_t... Idx, typename Iterator, typename EndIterator> constexpr CTRE_FORCE_INLINE string_match_result<Iterator> evaluate_match_string(Iterator current, [[maybe_unused]] const EndIterator end, std::index_sequence<Idx...>) noexcept {
119-
if constexpr (!std::is_same_v<Iterator, utf8_iterator> && is_random_accessible(typename std::iterator_traits<Iterator>::iterator_category{})) {
120-
bool same = (::std::distance(current, end) >= sizeof...(String)) && ((String == *(current + Idx)) & ...);
119+
#if __cpp_char8_t >= 201811
120+
if constexpr (!std::is_same_v<Iterator, utf8_iterator> && is_random_accessible(typename std::iterator_traits<Iterator>::iterator_category{}) && !std::is_same_v<EndIterator, struct ctre::zero_terminated_string_end_iterator>) {
121+
#else
122+
if constexpr (is_random_accessible(typename std::iterator_traits<Iterator>::iterator_category{}) && !std::is_same_v<EndIterator, struct ctre::zero_terminated_string_end_iterator>) {
123+
#endif
124+
using char_type = decltype(*current);
125+
bool same = ((size_t)std::distance(current, end) >= sizeof...(String)) && ((static_cast<char_type>(String) == *(current + Idx)) && ...);
121126
if (same) {
122-
return {current+=sizeof...(String), same};
127+
return { current += sizeof...(String), same };
123128
} else {
124-
return {current, same};
129+
return { current, same };
125130
}
126131
} else {
127132
bool same = (compare_character(String, current, end) && ... && true);
@@ -530,63 +535,63 @@ constexpr CTRE_FORCE_INLINE R evaluate(const Iterator begin, Iterator current, c
530535
}
531536

532537
template <typename T>
533-
constexpr bool is_string(T) {
538+
constexpr bool is_string(T) noexcept {
534539
return false;
535540
}
536541
template <auto... String>
537-
constexpr bool is_string(string<String...>) {
542+
constexpr bool is_string(string<String...>)noexcept {
538543
return true;
539544
}
540545

541546
template <typename T>
542-
constexpr bool is_string_like(T) {
547+
constexpr bool is_string_like(T) noexcept {
543548
return false;
544549
}
545550
template <auto... String>
546-
constexpr bool is_string_like(string<String...>) {
551+
constexpr bool is_string_like(string<String...>) noexcept {
547552
return true;
548553
}
549554
template <typename CharacterLike, typename = std::enable_if_t<MatchesCharacter<CharacterLike>::template value<decltype(*std::declval<std::string_view::iterator>())>>>
550-
constexpr bool is_string_like(CharacterLike) {
555+
constexpr bool is_string_like(CharacterLike) noexcept {
551556
return true;
552557
}
553558

554559
template <typename... Content>
555-
constexpr auto extract_leading_string(ctll::list<Content...>) -> ctll::list<Content...> {
560+
constexpr auto extract_leading_string(ctll::list<Content...>) noexcept -> ctll::list<Content...> {
556561
return {};
557-
};
562+
}
558563
template <typename... Content>
559-
constexpr auto extract_leading_string(sequence<Content...>) -> sequence<Content...> {
564+
constexpr auto extract_leading_string(sequence<Content...>) noexcept -> sequence<Content...> {
560565
return {};
561-
};
566+
}
562567

563568
//concatenation
564569
template <auto C, auto... String, typename... Content>
565-
constexpr auto extract_leading_string(ctll::list<string<String...>, character<C>, Content...>) {
570+
constexpr auto extract_leading_string(ctll::list<string<String...>, character<C>, Content...>) noexcept {
566571
return extract_leading_string(ctll::list<string<String..., C>, Content...>());
567572
}
568573

569574
template <auto... StringA, auto... StringB, typename... Content>
570-
constexpr auto extract_leading_string(ctll::list<string<StringA...>, string<StringB...>, Content...>) {
571-
return extract_leading_string(ctll::list<string<StringA..., StringB>, Content...>());
575+
constexpr auto extract_leading_string(ctll::list<string<StringA...>, string<StringB...>, Content...>) noexcept {
576+
return extract_leading_string(ctll::list<string<StringA..., StringB...>, Content...>());
572577
}
573578
//move things up out of sequences
574579
template <typename... Content, typename... Tail>
575-
constexpr auto extract_leading_string(ctll::list<sequence<Content...>, Tail...>) {
580+
constexpr auto extract_leading_string(ctll::list<sequence<Content...>, Tail...>) noexcept {
576581
return extract_leading_string(ctll::list<Content..., Tail...>());
577582
}
578583

579584
template <typename T, typename... Content, typename... Tail>
580-
constexpr auto extract_leading_string(ctll::list<T, sequence<Content...>, Tail...>) {
585+
constexpr auto extract_leading_string(ctll::list<T, sequence<Content...>, Tail...>) noexcept {
581586
return extract_leading_string(ctll::list<T, Content..., Tail...>());
582587
}
583588

584589
template <typename... Content>
585-
constexpr auto make_into_sequence(ctll::list<Content...>) -> sequence<Content...> {
590+
constexpr auto make_into_sequence(ctll::list<Content...>) noexcept -> sequence<Content...> {
586591
return{};
587592
}
588593
template <typename... Content>
589-
constexpr auto make_into_sequence(sequence<Content...>) -> sequence<Content...> {
594+
constexpr auto make_into_sequence(sequence<Content...>) noexcept -> sequence<Content...> {
590595
return{};
591596
}
592597

@@ -642,8 +647,12 @@ template <typename Iterator> struct string_search_result {
642647
};
643648

644649
template <typename Iterator, typename EndIterator, auto... String>
645-
constexpr CTRE_FORCE_INLINE string_search_result<Iterator> search_for_string(Iterator current, const EndIterator end, string<String...>) {
650+
constexpr CTRE_FORCE_INLINE string_search_result<Iterator> search_for_string(Iterator current, const EndIterator end, string<String...>) noexcept {
651+
#if __cpp_char8_t >= 201811
646652
if constexpr (sizeof...(String) > 2 && !std::is_same_v<Iterator, utf8_iterator> && is_random_accessible(typename std::iterator_traits<Iterator>::iterator_category{})) {
653+
#else
654+
if constexpr (sizeof...(String) > 2 && is_random_accessible(typename std::iterator_traits<Iterator>::iterator_category{})) {
655+
#endif
647656
constexpr std::array<typename ::std::iterator_traits<Iterator>::value_type, sizeof...(String)> chars{ String... };
648657
constexpr std::array<ptrdiff_t, sizeof...(String)> delta_2 = make_delta_2<typename ::std::iterator_traits<Iterator>::value_type>(string<String...>());
649658

@@ -666,7 +675,7 @@ constexpr CTRE_FORCE_INLINE string_search_result<Iterator> search_for_string(Ite
666675
}
667676

668677
return { current + str_size, current + str_size, false };
669-
} else if (sizeof...(String)) {
678+
} else if constexpr (sizeof...(String)) {
670679
//fallback to plain string matching
671680
constexpr std::array<typename ::std::iterator_traits<Iterator>::value_type, sizeof...(String)> chars{ String... };
672681
constexpr typename ::std::iterator_traits<Iterator>::value_type first_char = chars.data()[0];

include/ctre/wrapper.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ struct search_method {
7171
return_type<result_iterator, RE> result{};
7272
for (; end != it2.position;) {
7373
result.set_start_mark(it2.position);
74-
if (result = evaluate(orig_begin, it2.end_position, end, Modifier{}, result, ctll::list<start_mark, decltype(make_into_sequence(front_re{}.list)), end_mark, accept>())) {
74+
result = evaluate(orig_begin, it2.end_position, end, Modifier{}, result, ctll::list<start_mark, decltype(make_into_sequence(front_re{}.list)), end_mark, accept>());
75+
if (result) {
7576
return result;
7677
}
7778
result.unmatch();
@@ -80,7 +81,7 @@ struct search_method {
8081
}
8182
result.set_start_mark(it2.position);
8283
return result = evaluate(orig_begin, it2.end_position, end, Modifier{}, result, ctll::list<start_mark, decltype(make_into_sequence(front_re{}.list)), end_mark, accept>());
83-
} else if (is_string(front_re{}.front)) {
84+
} else if constexpr (is_string(front_re{}.front)) {
8485
auto it2 = search_for_string(it, end, front_re{}.front);
8586
return_type<result_iterator, RE> result{};
8687
result.set_start_mark(it2.position);

0 commit comments

Comments
 (0)