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
1377 const uint32_t key_offset = layer->n_keys;
1378 const uint32_t value_offset = layer->n_values;
1379 const uint32_t feature_offset = layer->n_features;
1383 layer->keys = layer2->keys;
1384 layer->n_keys = layer2->n_keys;
1386 else if (layer2->n_keys)
1388 layer->keys = repalloc(layer->keys,
sizeof(
char *) * (layer->n_keys + layer2->n_keys));
1389 memcpy(&layer->keys[key_offset], layer2->keys,
sizeof(
char *) * layer2->n_keys);
1390 layer->n_keys += layer2->n_keys;
1393 if (!layer->n_values)
1395 layer->values = layer2->values;
1396 layer->n_values = layer2->n_values;
1398 else if (layer2->n_values)
1401 repalloc(layer->values,
sizeof(VectorTile__Tile__Value *) * (layer->n_values + layer2->n_values));
1403 &layer->values[value_offset], layer2->values,
sizeof(VectorTile__Tile__Value *) * layer2->n_values);
1404 layer->n_values += layer2->n_values;
1407 if (!layer->n_features)
1409 layer->features = layer2->features;
1410 layer->n_features = layer2->n_features;
1412 else if (layer2->n_features)
1414 layer->features = repalloc(
1415 layer->features,
sizeof(VectorTile__Tile__Feature *) * (layer->n_features + layer2->n_features));
1416 memcpy(&layer->features[feature_offset], layer2->features,
sizeof(
char *) * layer2->n_features);
1417 layer->n_features += layer2->n_features;
1419 for (uint32_t i = feature_offset; i < layer->n_features; i++)
1421 for (uint32_t t = 0; t < layer->features[i]->n_tags; t += 2)
1423 layer->features[i]->tags[t] += key_offset;
1424 layer->features[i]->tags[t + 1] += value_offset;