4#include "collection_iterable.h"
20template <
typename ITERABLE >
26 typedef typename ITERABLE::iterator iterator;
27 typedef typename ITERABLE Iterable;
28 typedef typename ITERABLE::iterator iterator;
29 typedef typename Iterable::BASE_TYPE Type;
32 iterator add(const ::scoped_string & scopedstr);
34 iterator add(
const unichar * pwsz);
36 iterator add(
char ch);
38 iterator add(unichar wch);
40 iterator add(const ::payload &
payload);
46 iterator add(
const Type & newElement);
51 return ::iter::erase_empty(*
this);
55 Container & trim_right()
58 return ::iter::trim_right(*
this);
62 Container & trim_left()
65 return ::iter::trim_left(*
this);
73 return ::iter::trim(*
this);
81template <
typename ITERABLE >
82typename string_iterable < ITERABLE >::iterator string_iterable < ITERABLE >::add(const ::scoped_string & scopedstr)
84 ::collection::index nIndex = this->m_nSize;
85 set_at_grow(nIndex, psz);
86 return m_pData + nIndex;
90template <
typename ITERABLE >
91typename string_iterable < ITERABLE >::iterator string_iterable < ITERABLE >::add(
const unichar * pwsz)
93 ::collection::index nIndex = this->m_nSize;
94 set_at_grow(nIndex, (Type) unicode_to_utf8(pwsz));
95 return m_pData + nIndex;
100template <
typename ITERABLE >
101typename string_iterable < ITERABLE >::iterator string_iterable < ITERABLE >::add(
char ch)
115template <
typename ITERABLE >
116typename string_iterable < ITERABLE >::iterator string_iterable < ITERABLE >::add(unichar wch)
130template <
typename ITERABLE >
131typename string_iterable < ITERABLE >::iterator string_iterable < ITERABLE >::add(
const Type & newElement)
134 ::collection::index nIndex = this->m_nSize;
136 set_at_grow(nIndex, newElement);
138 return m_pData + nIndex;
153template <
typename ITERABLE >
154typename string_iterable < ITERABLE >::iterator string_iterable < ITERABLE >::add(
const atom &
atom)
186template <
typename ITERABLE >
187typename ITERABLE::iterator string_iterable < ITERABLE >::add(const ::payload &
payload)
193 else if (
payload.get_type() == ::e_type_string_array)
195 ::acme::array::add(*
this,
payload.stra());
197 else if (
payload.cast < string_array_base < Type > >() !=
nullptr)
199 ::acme::array::add(*
this, *
payload.cast < string_array_base < Type > >());
201 else if (
payload.get_type() == ::type_vara)
203 for (
int i = 0; i <
payload.payloada().get_count(); i++)
205 add((Type)
payload.payloada()[i].get_string());
208 else if (
payload.get_type() == ::e_type_int_array)
210 for (
int i = 0; i <
payload.inta().get_count(); i++)
212 add((Type) as_string(
payload.inta()[i]));
215 else if (
payload.get_type() == ::e_type_property_set)
217 for (
auto assoc :
payload.propset())
219 add((Type) assoc.get_string());
224 add((Type)
payload.get_string());
227 return upper_bound();
234template <
typename ITERABLE >
235typename ITERABLE::iterator string_iterable < ITERABLE >::add(
const property & prop)
238 return add(prop.get_value());
Definition iterable.h:4040
Definition string_iterable.h:23