template< . . . >
C *fast_string_concatenator<S, C, T>::write(C *s) const
{
return m_rhs.write(m_lhs.write(s));
}
template< . . . >
C *fast_string_concatenator<S, C, T>::Data::write(C *s) const
{
size_t len;
switch(type)
{
case seed:
break;
case single:
*(s++) = ref.ch;
break;
case cstring:
len = ref.cstring.len;
memcpy(s, ref.cstring.s, sizeof(C) * len);
s += len;
break;
case concat:
s = ref.concat->write(s);
break;
}
return s;
}