acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
_character_range.h
1// Created by camilo on 2025-04-17 09:37 <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5
6
7
8//#include "acme/prototype/string/string_base.h"
9//#include "acme/prototype/string/string_base.h"
10
11
12//template < typename T >
13//concept character_range_not_string = character_range<T> && !prototype_string<T>;
14//
15//
16//template < typename T >
17//concept character_range_not_string_neither_scoped_string = character_range<T> && !prototype_string<T> && !prototype_scoped_string<T>;
18
19
20//template < prototype_character CHARACTER, character_count n, typed_character_range < CHARACTER > TYPED_CHARACTER_RANGE >
21//const_string_range_static_array < const CHARACTER*, 2 > operator + (const CHARACTER(&s)[n], const TYPED_CHARACTER_RANGE& range)
22//{
23//
24// //return { ::as_string_literal< CHARACTER, n>(s), range };
25// return { s, range };
26//
27//}
28
29
30
31
32template < prototype_character_range RANGE, typed_character_range < typename RANGE::CHARACTER > TYPED_RANGE >
33::string_base < typename RANGE::const_iterator > operator + (const RANGE& range, const TYPED_RANGE& typedrange)
34{
35
36 return { range, typedrange };
37
38}
39
40
41template < prototype_character_range RANGE, has_as_string HAS_AS_STRING >
42::string_base < typename RANGE::const_iterator > operator + (const RANGE& range, const HAS_AS_STRING& has_as_string)
43 requires (!prototype_character_range < HAS_AS_STRING >)
44{
45
46 return ::transfer(::string_base < typename RANGE::const_iterator >(range) + has_as_string.as_string());
47
48}
49
50
51
52//template < character_count n >
53//const_string_range_static_array < const_char_pointer ,2 > operator + (const ::range < const_char_pointer >& range, const ansi_string_literal<n> & literal)
54//{
55//
56// //return { range, ::as_string_literal<typename RANGE::CHARACTER, n>(s) };
57// return { range, literal };
58//
59//}
60
61
62
63
64
65
66//template < character_range RANGE, ::i32 t_size >
67//const_string_range_static_array < typename RANGE::const_iterator, t_size + 1 > operator + (const const_string_range_static_array < typename RANGE::const_iterator, t_size >& a, const RANGE& range)
68//{
69//
70// return { a, range };
71//
72//}
73
74template < prototype_character_range RANGE, prototype_character CHARACTER >
75::string_base < typename RANGE::const_iterator > operator + (const RANGE& range, const typename RANGE::CHARACTER ch)
76{
77
78 return { range, {&ch, &ch + 1, e_range_none} };
79
80}
81
82
83template < prototype_character_range RANGE >
84inline ::string_base < const typename RANGE::CHARACTER* > operator +(const typename RANGE::CHARACTER& ch, const RANGE& range)
85{
86
87 return {
88 ::character_range < const typename RANGE::CHARACTER*>(
89 (const typename RANGE::CHARACTER*) & ch,
90 ((const typename RANGE::CHARACTER*) (&ch)) + 1,
91 e_range_none
92 ),
93 range
94 };
95
96}
97
98
99template < prototype_character_range RANGE >
100inline string& operator <<(string& str, const RANGE& r)
101{
102
103 str.append(r);
104
105 return str;
106
107}
108
109
110template<typename ITERATOR_TYPE>
111inline string_base<ITERATOR_TYPE> const_string_range<ITERATOR_TYPE>::surrounded(const SCOPED_STRING& strLeft, const SCOPED_STRING& strRight) const
112{
113
114 return strLeft + *this + strRight;
115
116}
117
118
119template < prototype_payload PAYLOAD, prototype_character_range RANGE >
120::string operator + (const PAYLOAD& payload, const RANGE& range)
121{
122
123 return ::transfer(::string(payload) + ::string(range));
124
125}
126
127
128template < prototype_payload PAYLOAD, prototype_character_range RANGE >
129PAYLOAD& operator += (PAYLOAD& payload, const RANGE& range)
130{
131
132 string str = payload.as_string() + ::string(range);
133
134 payload = str;
135
136 return payload;
137
138}
139
140
141template < prototype_character_range RANGE >
142atom::atom(const RANGE& range) :
143 m_str(range)
144{
145
146 m_etype = e_type_text;
147
148}
149
150
151
Definition payload.h:54
Definition range.h:223
Definition string_base.h:90
Definition _initial_concepts.h:462