Rune Caster
1.0.0
Modern C++ Text Processing Framework
Loading...
Searching...
No Matches
concepts.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <concepts>
4
#include <ranges>
5
#include <type_traits>
6
7
namespace
rune_caster
{
8
9
// Forward declarations
10
namespace
unicode
{
11
enum class
Category
;
12
enum class
Script
;
13
}
14
15
namespace
language
{
16
enum class
Code
;
17
}
18
19
namespace
runes
{
20
21
// 기본 Rune 타입 Concepts
22
template
<
typename
T>
23
concept
RuneLike
=
requires
(T t) {
24
{ t.code_point() } -> std::convertible_to<char32_t>;
25
{ t.category() } -> std::convertible_to<unicode::Category>;
26
{ t.script() } -> std::convertible_to<unicode::Script>;
27
{ t.language_hint() } -> std::convertible_to<language::Code>;
28
};
29
30
template
<
typename
T>
31
concept
RuneContainer
=
requires
(T t) {
32
typename
T::value_type;
33
typename
T::iterator;
34
typename
T::const_iterator;
35
requires
RuneLike<typename T::value_type>
;
36
{ t.begin() } -> std::input_iterator;
37
{ t.end() } -> std::input_iterator;
38
{ t.size() } -> std::convertible_to<std::size_t>;
39
{ t.empty() } -> std::convertible_to<bool>;
40
};
41
42
template
<
typename
T>
43
concept
RuneRange
= std::ranges::range<T> &&
44
RuneLike<std::ranges::range_value_t<T>
>;
45
46
template
<
typename
T>
47
concept
MutableRuneRange
=
RuneRange<T>
&&
48
std::ranges::output_range<T, typename std::ranges::range_value_t<T>>;
49
50
// 텍스트 처리 Concepts
51
template
<
typename
T>
52
concept
TextProcessor
=
requires
(T processor) {
53
typename
T::input_type;
54
typename
T::output_type;
55
requires
RuneRange<typename T::input_type>
;
56
requires
RuneRange<typename T::output_type>
;
57
} &&
requires
(T processor,
typename
T::input_type input) {
58
{ processor.process(input) } -> std::convertible_to<typename T::output_type>;
59
};
60
61
template
<
typename
T>
62
concept
Spell
=
TextProcessor<T>
&&
requires
(T
spell
) {
63
// Spell은 함수 호출 연산자도 지원해야 함
64
{
spell
(std::declval<typename T::input_type>()) }
65
-> std::convertible_to<typename T::output_type>;
66
};
67
68
template
<
typename
T>
69
concept
InPlaceSpell
=
Spell<T>
&&
requires
{
70
requires
std::same_as<typename T::input_type, typename T::output_type>;
71
};
72
73
// Caster Concepts
74
template
<
typename
T>
75
concept
Caster
=
requires
(T
caster
) {
76
typename
T::input_type;
77
typename
T::output_type;
78
{
caster
.
cast
(std::declval<typename T::input_type>()) }
79
-> std::convertible_to<typename T::output_type>;
80
};
81
82
// 성능 제약 Concepts
83
template
<
typename
T>
84
concept
LowLatency
=
requires
{
85
requires
sizeof
(T) <= 64;
// 캐시 라인 크기 제한
86
};
87
88
template
<
typename
T>
89
concept
ThreadSafe
=
requires
{
90
typename
T::is_thread_safe;
91
requires
T::is_thread_safe::value;
92
};
93
94
}
// namespace runes
95
}
// namespace rune_caster
rune_caster::caster
A powerful chaining pipeline for applying spells to data.
Definition
caster.hpp:22
rune_caster::caster::cast
constexpr auto cast(Spell &&spell) const &-> caster< typename Spell::output_type >
Apply a spell and return a new caster with the result (C++20 concepts)
Definition
caster.hpp:48
rune_caster::runes::Caster
Definition
concepts.hpp:75
rune_caster::runes::InPlaceSpell
Definition
concepts.hpp:69
rune_caster::runes::LowLatency
Definition
concepts.hpp:84
rune_caster::runes::MutableRuneRange
Definition
concepts.hpp:47
rune_caster::runes::RuneContainer
Definition
concepts.hpp:31
rune_caster::runes::RuneLike
Definition
concepts.hpp:23
rune_caster::runes::RuneRange
Definition
concepts.hpp:43
rune_caster::runes::Spell
Definition
concepts.hpp:62
rune_caster::runes::TextProcessor
Definition
concepts.hpp:52
rune_caster::runes::ThreadSafe
Definition
concepts.hpp:89
rune_caster::language
Language detection and identification functionality.
Definition
concepts.hpp:15
rune_caster::language::Code
Code
Enumeration of supported language codes.
Definition
language.hpp:43
rune_caster::runes
Definition
concepts.hpp:19
rune_caster::spell
Definition
spell.hpp:40
rune_caster::unicode
Definition
concepts.hpp:10
rune_caster::unicode::Category
Category
Definition
unicode.hpp:9
rune_caster::unicode::Script
Script
Definition
unicode.hpp:21
rune_caster
Definition
caster.hpp:9
include
rune_caster
concepts.hpp
Generated by
1.14.0