static void format_collection( JsonIn &jsin, JsonOut &jsout, int depth, std::function<void(JsonIn &, JsonOut &, int, bool )>write_func ) { if( depth > 1 ) { // We're backtracking by storing jsin and jsout state before formatting // and restoring it afterwards if necessary. int in_start_pos = jsin.tell(); bool ate_seperator = jsin.get_ate_separator(); int out_start_pos = jsout.tell(); bool need_separator = jsout.get_need_separator(); write_func( jsin, jsout, depth, false ); if( jsout.tell() - out_start_pos <= 120 ) { // Line is short enough, so we're done. return; } else { // Reset jsin and jsout to their initial state, // and we'll serialize while forcing wrapping. jsin.seek( in_start_pos ); jsin.set_ate_separator( ate_seperator ); jsout.seek( out_start_pos ); if( need_separator ) { jsout.set_need_separator(); } } } write_func( jsin, jsout, depth, true ); }