/* * Helper for element and docuemnt constructors to insert sequence * of atomic values. Returns true if node was actually inserted. * In this case left pointer is changed to the last inserted indirection. * In any case at_vals sequence is cleared. */ static inline bool process_atomic_values(xptr& left, const xptr& parent, sequence& at_vals) { if (at_vals.size() > 0) { executor_globals::tmp_op_str_buf.clear(); tuple_cell tcc; sequence::iterator it = at_vals.begin(); do { tcc = tuple_cell::make_sure_light_atomic((*it).cells[0]); tcc = cast(tcc, xs_string); executor_globals::tmp_op_str_buf.append(tcc); it++; } while (it != at_vals.end()); at_vals.clear(); if(executor_globals::tmp_op_str_buf.get_size() > 0) { insert_text(indirectionDereferenceCP(left), XNULL, indirectionDereferenceCP(parent), text_source_strbuf(&(executor_globals::tmp_op_str_buf))); left = get_last_mo_inderection(); return true; } } return false; }