``` #include <array/length-prefix.h> #include <stdlib.h> ``` morph_seqseq_valsep_uint8 (T: Type, SrcDelim: T, DstDelim: T) < Seq <Seq T> > ~ < ValueSep SrcDelim T > ~ < Seq~<LengthPrefix native.UInt64> T > --> < Seq <Seq T> > ~ < ValueSep DstDelim T > ~ < Seq~<LengthPrefix native.UInt64> T > ``` length_prefix_uint64_t_array_uint8_t_clear( dst ); uint8_t * dst_items = dst->items; for( uint64_t i = 0; i < src->len; ++i ) { if( src->items[i] == SrcDelim ) { length_prefix_uint64_t_array_uint8_t_push( dst, DstDelim ); } else if( src->items[i] == DstDelim ) { if( DstDelim == '\n' ) { length_prefix_uint64_t_array_uint8_t_push( dst, '\\' ); length_prefix_uint64_t_array_uint8_t_push( dst, 'n' ); } } else { length_prefix_uint64_t_array_uint8_t_push( dst, src->items[i] ); } } return 0; ``` morph_seqseq_as_valsep_to_lenpfx (T: Type, Delim: T, EscKey: T) < Seq <Seq T> > ~ < ValueSep T Delim > ~ < Seq~<LengthPrefix native.UInt64> T > --> < Seq~<LengthPrefix native.UInt64> <Seq~<LengthPrefix native.UInt64> T > ~ <RefMut < Seq~<LengthPrefix native.UInt64> T>> ~ native.Address ~ native.UInt64 > ``` length_prefix_uint64_t_array_uint64_t_clear( dst ); struct LengthPrefix_uint64_t_Array_uint8_t * cur_item = NULL; uint8_t const * start = &src->items[0]; uint8_t const * cur = start; uint8_t const * end = &src->items[src->len]; while( cur < end ) { if( *cur == Delim || cur+1 == end ) { uint64_t len = cur - start; cur_item = malloc( sizeof(uint64_t) + sizeof(uint8_t) * len ); cur_item->len = len; memcpy( cur_item->items, start, len ); length_prefix_uint64_t_array_uint64_t_push( dst, (uint64_t)cur_item ); start = ++cur; } else { cur++; } } return 0; ``` morph_seqeq_as_lenpfx_to_valsep (T: Type, Delim: T, EscKey: T) < Seq~<LengthPrefix native.UInt64> <Seq~<LengthPrefix native.UInt64> T > ~ <RefMut < Seq~<LengthPrefix native.UInt64> T>> ~ native.Address ~ native.UInt64 > --> < Seq <Seq T> > ~ < ValueSep T Delim > ~ < Seq~<LengthPrefix native.UInt64> T > ``` length_prefix_uint64_t_array_uint8_t_clear( dst ); for( uint64_t i = 0; i < src->len; ++i ) { LengthPrefix_uint64_t_Array_uint8_t * item = src->items[i]; for( uint64_t j = 0; j < item->len; ++j ) { length_prefix_uint64_t_array_uint8_t_push( items->items[j] ); } if( i+1 < src->len ) { length_prefix_uint64_t_array_uint8_t_push( Delim ); } } return 0; ```