Combine 2 layers.
This is going to push everything from layer2 into layer1 We can do this because both sources and the result live in the same aggregation context so we are good as long as we don't free anything from the sources
1169 const uint32_t key_offset = layer->n_keys;
1170 const uint32_t value_offset = layer->n_values;
1171 const uint32_t feature_offset = layer->n_features;
1175 layer->keys = layer2->keys;
1176 layer->n_keys = layer2->n_keys;
1178 else if (layer2->n_keys)
1180 layer->keys = repalloc(layer->keys,
sizeof(
char *) * (layer->n_keys + layer2->n_keys));
1181 memcpy(&layer->keys[key_offset], layer2->keys,
sizeof(
char *) * layer2->n_keys);
1182 layer->n_keys += layer2->n_keys;
1185 if (!layer->n_values)
1187 layer->values = layer2->values;
1188 layer->n_values = layer2->n_values;
1190 else if (layer2->n_values)
1193 repalloc(layer->values,
sizeof(VectorTile__Tile__Value *) * (layer->n_values + layer2->n_values));
1195 &layer->values[value_offset], layer2->values,
sizeof(VectorTile__Tile__Value *) * layer2->n_values);
1196 layer->n_values += layer2->n_values;
1199 if (!layer->n_features)
1201 layer->features = layer2->features;
1202 layer->n_features = layer2->n_features;
1204 else if (layer2->n_features)
1206 layer->features = repalloc(
1207 layer->features,
sizeof(VectorTile__Tile__Feature *) * (layer->n_features + layer2->n_features));
1208 memcpy(&layer->features[feature_offset], layer2->features,
sizeof(
char *) * layer2->n_features);
1209 layer->n_features += layer2->n_features;
1211 for (uint32_t i = feature_offset; i < layer->n_features; i++)
1213 for (uint32_t t = 0; t < layer->features[i]->n_tags; t += 2)
1215 layer->features[i]->tags[t] += key_offset;
1216 layer->features[i]->tags[t + 1] += value_offset;