45class string_base_array :
46 public comparable_array_base < Type, const Type &, comparable_eq_array_base < Type, const Type &, array_base < Type, const Type &, ::typed::def < Type >, ::heap::typed_memory < Type, ::heap::e_memory_array >, t_etypeContainer > > >
51 using BASE_ARRAY = comparable_array_base < Type, const Type &, comparable_eq_array_base < Type, const Type &, array_base < Type, const Type &, ::typed::def < Type >, ::heap::typed_memory < Type, ::heap::e_memory_array >, t_etypeContainer > > >;
52 using RAW_BASE_ARRAY =
typename BASE_ARRAY::RAW_BASE_ARRAY;
53 using BASE_STRING = Type;
54 using BASE_RAW_STRING = RawType;
55 using BASE_RAW_STRING_ARRAY = ::string_base_array < RawType, RawType, t_etypeContainer >;
56 using CHARACTER =
typename BASE_STRING::CHARACTER;
57 using RAW_RANGE =
typename BASE_RAW_STRING::RANGE;
58 using BASE_TYPE = BASE_STRING;
59 using BASE_ARG_TYPE =
const BASE_STRING &;
60 using SCOPED_STRING =
typename BASE_STRING::SCOPED_STRING;
62 using THIS_RAW_RANGE =
typename BASE_ARRAY::THIS_RAW_RANGE;
63 using CONST_RAW_RANGE =
typename BASE_ARRAY::CONST_RAW_RANGE;
64 using this_iterator =
typename BASE_ARRAY::this_iterator;
66 using BASE_ARRAY::BASE_ARRAY;
70 string_base_array(
const RAW_BASE_ARRAY& a) : BASE_ARRAY(a) {}
71 string_base_array(CHARACTER *
const * ppsz, ::collection::count c);
74 template < prototype_container CONTAINER >
75 string_base_array & operator = (
const CONTAINER & container)
77 this->assign_a_container(container);
81 ::collection::count get_size()
const;
82 ::collection::count get_count()
const;
83 ::collection::index get_lower_bound(::collection::index i = 0)
const;
84 ::collection::index get_upper_bound(::collection::index i = -1)
const;
85 ::collection::index get_middle_index(::collection::index i = 0)
const;
88 void erase_duplicates();
90 void case_insensitive_erase_duplicates();
93 ::collection::index _007FindLine(
const SCOPED_STRING & strKey, ::collection::index iStart = 0)
const;
94 void _007SetLine(
const SCOPED_STRING & strKey,
const SCOPED_STRING & strValue, ::collection::index iStart = 0);
95 ::collection::index _007GetLine(RawType & rawtype,
const SCOPED_STRING & strKey, ::collection::index iStart = 0)
const;
96 RawType _007GetLine(
const SCOPED_STRING & strKey, ::collection::index iStart = 0)
const;
99 ::collection::index _007FindSection(
const SCOPED_STRING & strSection)
const;
100 ::collection::index _007FindLine(
const SCOPED_STRING & strSection,
const SCOPED_STRING & strKey)
const;
101 ::collection::index _007OpenSection(
const SCOPED_STRING & strSection);
102 void _007SetLine(
const SCOPED_STRING & strSection,
const SCOPED_STRING & strKey,
const SCOPED_STRING & strValue);
103 ::collection::index _007GetLine(RawType & rawtype,
const SCOPED_STRING & strSection,
const SCOPED_STRING & strKey)
const;
104 RawType _007GetLine(
const SCOPED_STRING & strSection,
const SCOPED_STRING & strKey)
const;
108 void case_insensitive_order();
109 void collate_order();
110 void case_insensitive_collate_sort();
113 Type safe_at(::collection::index nIndex, Type tDefault =
"")
const;
114 Type safe_at(::collection::index nIndex, Type tDefault =
"");
116 Type get_at(::collection::index nIndex)
const;
117 void set_at(::collection::index nIndex,
const Type & newElement);
119 Type & element_at(::collection::index nIndex);
120 const Type & element_at(::collection::index nIndex)
const;
125 Type & first(::collection::index i = 0);
126 Type first(::collection::index i = 0)
const;
128 Type & last(::collection::index i = -1);
129 Type last(::collection::index i = -1)
const;
131 const Type * get_data()
const;
134 using BASE_ARRAY::add;
136 Type & set_at_grow(::collection::index nIndex,
const Type & newElement);
139 Type & add_get(
const Type & newElement);
142 void copy(
const string_base_array & src);
144 template < prototype_array ARRAY >
145 void copy(
const ARRAY & src);
148 using BASE_ARRAY::copy;
151 ::collection::index add(::strsize_range_array & stra,
const SCOPED_STRING & str)
154 ::collection::index i = -1;
156 for (
auto & size_range : stra)
159 i = add(RawType(str.begin() + size_range.m_iBegin, str.begin() + size_range.m_iEnd));
167 string_base_array & c_stra(string_base_array & stra)
const;
168 string_base_array c_stra()
const;
170 Type & insert_at(::collection::index nIndex,
const Type & strElement);
171 void insert_at(::collection::index nIndex,
const Type & strElement, ::collection::count nCount);
172 template < prototype_container CONTAINER >
173 void insert_at(::collection::index nStartIndex,
const CONTAINER & container);
176 string_base_array slice(::collection::index iStart, ::collection::count iCount = -1)
const;
181 Type & insert_empty(::collection::index nIndex);
183 void insert_empty(::collection::index nIndex, ::collection::count c);
186 ::collection::count truncate_on_find_character(CHARACTER ch);
190 ::collection::count erase_prefixed(const ::scoped_string & scopedstrPrefix);
191 ::collection::count erase_empty();
192 ::collection::count erase_empty_end();
193 ::collection::count erase_empty_begin();
194 ::collection::count erase_empty_trimmed_end();
195 ::collection::count erase_empty_trimmed_begin();
196 ::collection::index add_normal(
const Type & str);
198 void trim_right(
const SCOPED_STRING & strChars);
199 void trim_left(
const SCOPED_STRING & strChars);
200 void trim(
const SCOPED_STRING & strChars);
205 ::collection::index add_unique(
const Type & str);
206 ::collection::index case_insensitive_add_unique(
const Type & str);
208 ::collection::count append_unique(
const string_base_array & stra);
209 ::collection::count case_insensitive_append_unique(
const string_base_array & stra);
214 auto & append_formatf(
const CHARACTER * psz, ...)
219 va_start(arguments, psz);
221 auto & str = this->add_new().formatf_arguments(psz, arguments);
230 template<
typename... Args>
231 auto & append_format(std::format_string<Args...> fmt, Args&&... args)
234 return this->add_new().format(fmt, std::forward<Args>(args)...);
239 auto & add_trace(enum_trace_level etracelevel,
const SCOPED_STRING & scopedstr)
242 return append_formatf(
"%c: %s\n", trace_level_letter(etracelevel), ::string(scopedstr).c_str());
248 operator ::collection::count()
const
254 ::collection::index get_random_index()
const;
256 Type & random_element();
257 const Type & random_element()
const;
259 Type pop_random_element();
261 Type pop(::collection::index i = -1);
262 void slice(string_base_array & stra, ::collection::index i, ::collection::count ca = -1);
263 void erase(::collection::index i, ::collection::count count);
264 void splice(
const string_base_array & stra, ::collection::index i, ::collection::count ca = -1);
265 void splice(
const string_base_array & stra, ::collection::index i, string_base_array & straRemoved, ::collection::count ca = -1);
269 bool case_insensitive_move(
const SCOPED_STRING & str, ::collection::index iIndex);
273 bool preferred(
const SCOPED_STRING & str);
275 ::collection::count preferred(string_base_array & stra);
278 ::collection::count case_insensitive_count(
const SCOPED_STRING & strFind, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
279 ::collection::count count(
const SCOPED_STRING & strFind, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
282 ::collection::index case_insensitive_find_first(
const SCOPED_STRING & strFind, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
283 ::collection::index find_first(
const SCOPED_STRING & strFind, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
286 ::collection::index case_insensitive_find_last(
const SCOPED_STRING & strFind, ::collection::index iFind = -1, ::collection::index iLast = 0)
const;
287 ::collection::index find_last(
const SCOPED_STRING & strFind, ::collection::index iFind = -1, ::collection::index iLast = 0)
const;
290 ::collection::index case_insensitive_reverse_find(
const SCOPED_STRING & strFind, ::collection::index iFind = -1, ::collection::index iLast = 0)
const;
291 ::collection::index rear_find(
const SCOPED_STRING & strFind, ::collection::index iFind = -1, ::collection::index iLast = 0)
const;
294 ::collection::index _066Find(
const SCOPED_STRING & str)
const;
296 ::collection::index _case_insensitive_find_first_prefixed(
const SCOPED_STRING & strStarting, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
297 ::collection::index _find_first_prefixed(
const SCOPED_STRING & strStarting, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
299 ::collection::index _find_first_with_starting_word(
const SCOPED_STRING & strStartingWord, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
301 ::collection::index case_insensitive_find_first_prefixed(
const SCOPED_STRING & strStarting, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
302 ::collection::index find_first_prefixed(
const SCOPED_STRING & strStarting, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
304 ::collection::index _case_insensitive_find_first_suffixed(
const SCOPED_STRING & strEnding, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
305 ::collection::index _find_first_suffixed(
const SCOPED_STRING & strEnding, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
307 ::collection::index case_insensitive_find_first_suffixed(
const SCOPED_STRING & strEnding, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
308 ::collection::index find_first_suffixed(
const SCOPED_STRING & strEnding, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
310 ::collection::index case_insensitive_find_first_begins(
const SCOPED_STRING & strStarting, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return case_insensitive_find_first_prefixed(strStarting, iFind, iLast); }
311 ::collection::index find_first_begins(
const SCOPED_STRING & strStarting, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return find_first_prefixed(strStarting, iFind, iLast); }
313 ::collection::index find_first_with_starting_word(
const SCOPED_STRING & strStartingWord, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
315 ::collection::index case_insensitive_find_first_ends(
const SCOPED_STRING & strEnding, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return case_insensitive_find_first_suffixed(strEnding, iFind, iLast); }
316 ::collection::index find_first_ends(
const SCOPED_STRING & strEnding, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return find_first_suffixed(strEnding, iFind, iLast); }
318 ::collection::index _case_insensitive_find_first_contains(
const SCOPED_STRING & strSubstring, ::collection::index iFind = 0, ::collection::index iLast = -1,
const CHARACTER ** ppszBeg =
nullptr,
const CHARACTER ** ppszEnd =
nullptr)
const;
319 ::collection::index _find_first_contains(
const SCOPED_STRING & strSubstring, ::collection::index iFind = 0, ::collection::index iLast = -1,
const CHARACTER ** ppszBeg =
nullptr,
const CHARACTER ** ppszEnd =
nullptr)
const;
321 ::collection::index case_insensitive_find_first_contains(
const SCOPED_STRING & strSubstring, ::collection::index iFind = 0, ::collection::index iLast = -1,
const CHARACTER ** ppszBeg =
nullptr,
const CHARACTER ** ppszEnd =
nullptr)
const;
322 ::collection::index find_first_contains(
const SCOPED_STRING & strSubstring, ::collection::index iFind = 0, ::collection::index iLast = -1,
const CHARACTER ** ppszBeg =
nullptr,
const CHARACTER ** ppszEnd =
nullptr)
const;
324 ::collection::index case_insensitive_find_first_begins_eat(Type & strFoundAndEaten,
const SCOPED_STRING & strStarting, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
325 ::collection::index find_first_begins_eat(Type & strFoundAndEaten,
const SCOPED_STRING & strStarting, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
327 ::collection::index find_first_with_starting_word_eat(Type & strFoundAndEaten,
const SCOPED_STRING & strStartingWord, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
329 ::collection::index case_insensitive_find_first_ends_eat(Type & strFoundAndEaten,
const SCOPED_STRING & strEnding, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
330 ::collection::index find_first_ends_eat(Type & strFoundAndEaten,
const SCOPED_STRING & strEnding, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
332 ::collection::index case_insensitive_find_first_contains_eat(Type & strFoundAndEaten,
const SCOPED_STRING & strEnding, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
333 ::collection::index find_first_contains_eat(Type & strFoundAndEaten,
const SCOPED_STRING & strEnding, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
336 ::collection::index case_insensitive_prefix_find_first(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
337 ::collection::index prefix_find_first(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
339 inline bool case_insensitive_prefixes(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return found(case_insensitive_prefix_find_first(strTopic, iFind, iLast)); }
340 inline bool prefixes(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return found(prefix_find_first(strTopic, iFind, iLast)); }
342 ::collection::index case_insensitive_suffix_find_first(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
343 ::collection::index suffix_find_first(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1)
const;
345 inline bool case_insensitive_suffixes(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return found(case_insensitive_suffix_find_first(strTopic, iFind, iLast)); }
346 inline bool suffixes(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return found(suffix_find_first(strTopic, iFind, iLast)); }
348 ::collection::index case_insensitive_substring_find_first(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1,
const CHARACTER ** ppszBeg =
nullptr,
const CHARACTER ** ppszEnd =
nullptr)
const;
349 ::collection::index substring_find_first(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1,
const CHARACTER ** ppszBeg =
nullptr,
const CHARACTER ** ppszEnd =
nullptr)
const;
351 inline bool case_insensitive_is_part_of(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return found(case_insensitive_substring_find_first(strTopic, iFind, iLast)); }
352 inline bool is_part_of(
const SCOPED_STRING & strTopic, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return found(substring_find_first(strTopic, iFind, iLast)); }
356 bool _067CaseInsensitiveContains(
const SCOPED_STRING & strFind, ::collection::index iFind = 0, ::collection::index iLast = -1, ::collection::count countMin = 1, ::collection::count countMax = -1)
const;
357 bool _067Contains(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1, ::collection::count countMin = 1, ::collection::count countMax = -1)
const;
360 bool _067CaseInsensitiveContainsSubstring(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1, ::collection::count countMin = 1, ::collection::count countMax = -1)
const;
361 bool _067ContainsSubstring(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1, ::collection::count countMin = 1, ::collection::count countMax = -1)
const;
364 bool case_insensitive_contains(
const SCOPED_STRING & strFind, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return found(case_insensitive_find_first(strFind, iFind, iLast)); }
365 bool contains(
const SCOPED_STRING & strFind, ::collection::index iFind = 0, ::collection::index iLast = -1)
const {
return found(case_insensitive_find_first(strFind, iFind, iLast)); }
368 bool case_insensitive_theres(
const SCOPED_STRING & strSubstring, ::collection::index iFind = 0, ::collection::index iLast = -1,
const CHARACTER ** ppszBeg =
nullptr,
const CHARACTER ** ppszEnd =
nullptr)
const {
return found(case_insensitive_substring_find_first(strSubstring, iFind, iLast, ppszBeg, ppszEnd)); }
369 bool theres(
const SCOPED_STRING & strSubstring, ::collection::index iFind = 0, ::collection::index iLast = -1,
const CHARACTER ** ppszBeg =
nullptr,
const CHARACTER ** ppszEnd =
nullptr)
const {
return found(case_insensitive_substring_find_first(strSubstring, iFind, iLast, ppszBeg, ppszEnd)); }
372 template < prototype_array INDEX_ARRAY >
373 ::collection::count case_insensitive_begins(INDEX_ARRAY & ia,
const SCOPED_STRING & strPrefix, ::collection::index first = 0, ::collection::index iLast = -1);
375 template < prototype_array INDEX_ARRAY >
376 ::collection::count begins(INDEX_ARRAY & ia,
const SCOPED_STRING & strPrefix, ::collection::index first = 0, ::collection::index iLast = -1);
379 template < prototype_array STRING_ARRAY >
380 ::collection::count case_insensitive_ends(STRING_ARRAY & stra,
const SCOPED_STRING & strSuffix, ::collection::index first = 0, ::collection::index iLast = -1);
382 template < prototype_array STRING_ARRAY >
383 ::collection::count ends(STRING_ARRAY & stra,
const SCOPED_STRING & strSuffix, ::collection::index first = 0, ::collection::index iLast = -1);
386 template < prototype_array STRING_ARRAY >
387 ::collection::count case_insensitive_search(STRING_ARRAY & stra,
const SCOPED_STRING & strSubstring, ::collection::index first = 0, ::collection::index iLast = -1);
389 template < prototype_array STRING_ARRAY >
390 ::collection::count search(STRING_ARRAY & stra,
const SCOPED_STRING & strSubstring, ::collection::index first = 0, ::collection::index iLast = -1);
405 ::collection::count case_insensitive_filter_begins(
const SCOPED_STRING & strPrefix, ::collection::index first = 0, ::collection::index iLast = -1);
406 ::collection::count filter_begins(
const SCOPED_STRING & strPrefix, ::collection::index first = 0, ::collection::index iLast = -1);
409 template <
typename Pred >
410 ::collection::count filter(Pred pred, ::collection::index first = 0, ::collection::index iLast = -1);
412 template <
typename Pred >
413 ::collection::count filter_out(Pred pred, ::collection::index first = 0, ::collection::index iLast = -1);
415 template <
typename Pred,
typename ArrayOut >
416 ::collection::count filter_out(Pred pred, ArrayOut & a, ::collection::index first = 0, ::collection::index iLast = -1);
418 using BASE_ARRAY::erase_first;
419 ::collection::count case_insensitive_erase_first(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1);
421 ::collection::count erase_first(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1);
424 ::collection::count case_insensitive_erase_last(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1);
426 using BASE_ARRAY::erase_last;
427 ::collection::count erase_last(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1);
429 ::collection::count _067CaseInsensitiveRemove(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1, ::collection::count countMin = 0, ::collection::count countMax = -1);
431 ::collection::count _067Remove(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1, ::collection::count countMin = 0, ::collection::count countMax = -1);
433 ::collection::count case_insensitive_erase(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1);
435 ::collection::count erase(
const SCOPED_STRING & str, ::collection::index iFind = 0, ::collection::index iLast = -1);
438 template < prototype_container CONTAINER >
439 ::collection::count case_insensitive_erase(
const CONTAINER & container);
441 template < prototype_container CONTAINER >
442 ::collection::count erase(
const CONTAINER & container);
444 string_base_array & explode(
const SCOPED_STRING & strSeparator,
const SCOPED_STRING & str,
bool bAddEmpty =
true);
446 string_base_array & _001Explode(
const SCOPED_STRING & str);
456 template <
typename PRED >
457 Type predicate_implode(PRED pred,
const SCOPED_STRING & strSeparator =
nullptr, ::collection::index iStart = 0, ::collection::count iCount = -1)
const;
462 Type implode(
const SCOPED_STRING & strSeparator =
nullptr, ::collection::index iStart = 0, ::collection::count iCount = -1)
const;
464 Type postfix_implode(
const SCOPED_STRING& strSuffix =
nullptr, ::collection::index iStart = 0, ::collection::count iCount = -1)
const;
468 Type
reverse_implode(
const SCOPED_STRING & strSeparator =
nullptr, ::collection::index iStart = 0, ::collection::count iCount = -1)
const;
473 Type _008Implode(
const SCOPED_STRING & strSeparator =
nullptr,
const SCOPED_STRING & strLastSeparator =
nullptr, ::collection::index iStart = 0, ::collection::count iCount = -1)
const;
478 Type _008IfImplode(
const SCOPED_STRING & strIfHasElementPrefix =
nullptr,
const SCOPED_STRING & strSeparator =
nullptr,
const SCOPED_STRING & strLastSeparator =
nullptr,
bool bUseLast =
true, ::collection::index iStart = 0, ::collection::count iCount = -1)
const;
481 void surround(
const SCOPED_STRING & strPrefix =
nullptr,
const SCOPED_STRING & strSuffix =
nullptr, ::collection::index iStart = 0, ::collection::count iCount = -1);
482 Type surround_and_implode(
const SCOPED_STRING & strSeparator =
nullptr,
const SCOPED_STRING & strPrefix =
nullptr,
const SCOPED_STRING & strSuffix =
nullptr, ::collection::index iStart = 0, ::collection::count iCount = -1);
500 using BASE_ARRAY::operator +=;
510 bool operator == (
const BASE_RAW_STRING_ARRAY & a)
const;
511 bool operator != (
const BASE_RAW_STRING_ARRAY & a)
const;
514 void replace_with(
const SCOPED_STRING & strNew,
const SCOPED_STRING & strOld);
521 void get_format_string(Type & str,
const SCOPED_STRING & strSeparator)
const;
523 void add_tokens(
const SCOPED_STRING & str,
const SCOPED_STRING & strSeparator,
bool bAddEmpty =
true);
525 void add_smallest_tokens(
const SCOPED_STRING & str,
const BASE_RAW_STRING_ARRAY & straSeparator,
bool bAddEmpty =
true,
bool bWithSeparator =
false);
527 void add_words(
const SCOPED_STRING & str);
535 template <
bool bAddEmpty >
536 typename Type::const_iterator
_____add_lines_rn(
const SCOPED_STRING & scopedstr,
bool bWithEOL);
543 template <
bool bAddEmpty >
550 this->add_item({ start, end });
561 template <
bool bAddEmpty >
562 void __add_lines_rn(
const SCOPED_STRING & scopedstr) {
__add_lines_suffix<bAddEmpty>(__add_lines_rn<bAddEmpty>(scopedstr), scopedstr.end()); }
563 template < CHARACTER chSeparator,
bool bAddEmpty >
564 void __add_lines(
const SCOPED_STRING & scopedstr) {
__add_lines_suffix<bAddEmpty>(__add_lines<chSeparator, bAddEmpty>(scopedstr), scopedstr.end()); }
565 template <
bool bAddEmpty >
566 void _add_lines(
const SCOPED_STRING & scopedstr,
bool bWithEOL =
false);
567 void add_lines(
const SCOPED_STRING & scopedstr,
bool bAddEmpty =
true,
bool bWithEOL =
false)
569 if (bAddEmpty)_add_lines<true>(scopedstr, bWithEOL);
else _add_lines<false>(scopedstr, bWithEOL);
578 template < CHARACTER chSeparator,
bool bAddEmpty >
579 typename Type::const_iterator
_____add_lines(
const SCOPED_STRING & scopedstr,
bool bWithEOL =
false)
582 auto range = scopedstr();
587 auto p =
range.find(chSeparator);
592 return range.begin();
606 void _001AddTokens(
const SCOPED_STRING & str);
610 bool is_empty(::collection::count countMinimum = 1)
const;
611 bool has_elements(::collection::count countMinimum = 1)
const;
616 void decode_v16(
const SCOPED_STRING & str);
618 ::collection::count count_except(
const SCOPED_STRING & str);
621 ::collection::count case_insensitive_count_except(
const SCOPED_STRING & str);
622 ::collection::count case_insensitive_count_except(
const string_base_array & stra);
624 Type & get_network_payload(Type & str,
bool bNewLine =
true)
const;
629 ::array_base < const_char_pointer >c_ansi_get(
bool bMemoryAlloc =
false)
const;
631 void c_add(char_pointer * ppsz, ::collection::count iCount,
bool bMemoryAlloc =
false);
632 void c_add(char_pointer * ppsz,
bool bMemoryAlloc =
false);
633 void c_add(
wchar_t ** ppsz, ::collection::count iCount,
bool bMemoryAlloc =
false);
634 void c_add(
wchar_t ** ppsz,
bool bMemoryAlloc =
false);
636 void feed_line(const ::scoped_string& scopedstr,
bool bCarriage)
638 if (this->m_erange & e_range_array_carriage_return)
640 if (this->has_elements())
642 this->last() = scopedstr;
646 this->add(scopedstr);
650 this->m_erange = this->m_erange & ~e_range_array_carriage_return;
655 this->add(scopedstr);
658 this->m_erange = this->m_erange | e_range_array_carriage_return;
664 string_base_array & intersect(
const string_base_array & a)
667 for (::collection::index i = 0; i < get_size(); )
670 if (!a.contains(element_at(i)))
689 string_base_array & case_insensitive_intersect(
const string_base_array & a)
692 for (::collection::index i = 0; i < get_size(); )
695 if (!a.case_insensitive_contains(element_at(i)))
714 string_base_array & operator &=(
const string_base_array & a)
722 ::std::strong_ordering case_insensitive_order(
const THIS_RAW_RANGE & rawrange)
const
725 return BASE_ARRAY::order(rawrange, ::comparison::case_insensitive < Type >());