- struct type_class_sequence *sequence_class =
- container_of(type_class, struct type_class_sequence, p);
- unsigned int i;
- size_t len;
+ struct definition_sequence *sequence =
+ container_of(definition, struct definition_sequence, p);
+ struct declaration_sequence *sequence_declaration = sequence->declaration;
+ uint64_t len, oldlen, i;
+
+ fsrc->sequence_begin(src, sequence_declaration);
+ if (fdest)
+ fdest->sequence_begin(dest, sequence_declaration);
+
+ sequence->len->p.declaration->copy(dest, fdest, src, fsrc,
+ &sequence->len->p);
+ len = sequence->len->value._unsigned;
+ g_array_set_size(sequence->elems, len);
+ /*
+ * Yes, large sequences could be _painfully slow_ to parse due
+ * to memory allocation for each event read. At least, never
+ * shrink the sequence. Note: the sequence GArray len should
+ * never be used as indicator of the current sequence length.
+ * One should always look at the sequence->len->value._unsigned
+ * value for that.
+ */
+ oldlen = sequence->elems->len;
+ if (oldlen < len)
+ g_array_set_size(sequence->elems, len);