@@ -161,7 +161,7 @@ namespace sysstr
161
161
{ append_many (m_impl, str, std::char_traits<Char>::length (str)); return *this ; }
162
162
163
163
sys_string_builder_t & append (const sys_string_t <Storage> & str)
164
- { append_access (typename sys_string_t <Storage>::char_access (str)); return *this ; }
164
+ { append_range (typename sys_string_t <Storage>::char_access (str)); return *this ; }
165
165
166
166
sys_string_t <Storage> build () noexcept
167
167
{ return util::build<Storage>(m_impl); }
@@ -188,8 +188,8 @@ namespace sysstr
188
188
template <has_utf_encoding Char>
189
189
static typename impl_type::iterator insert_many (impl_type & impl, typename impl_type::iterator pos, const Char * str, size_t len);
190
190
191
- template <class Access >
192
- void append_access (const Access & access );
191
+ template <std::ranges::input_range Range >
192
+ void append_range (const Range & range );
193
193
194
194
auto storage_begin () const
195
195
{ return std::begin (m_impl); }
@@ -271,20 +271,19 @@ namespace sysstr
271
271
}
272
272
273
273
template <class Storage >
274
- template <class Access >
275
- inline void sys_string_builder_t <Storage>::append_access (const Access & access )
274
+ template <std::ranges::input_range Range >
275
+ inline void sys_string_builder_t <Storage>::append_range (const Range & range )
276
276
{
277
- if constexpr (util::has_contiguous_data<Access>)
277
+ static_assert (std::is_same_v<std::ranges::range_value_t <Range>, storage_type>);
278
+
279
+ if constexpr (std::ranges::contiguous_range<Range>)
278
280
{
279
- m_impl.append (access . data (), access . size ());
281
+ m_impl.append (std:: data (range ), std:: size (range ));
280
282
}
281
283
else
282
284
{
283
- for (typename Access::size_type i = 0 , count = access .size (); i < count; ++i)
284
- {
285
- auto c = access [i];
285
+ for (storage_type c: range)
286
286
m_impl.push_back (c);
287
- }
288
287
}
289
288
}
290
289
0 commit comments