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
1168 const uint32_t key_offset = layer->n_keys;
1169 const uint32_t value_offset = layer->n_values;
1170 const uint32_t feature_offset = layer->n_features;
1174 layer->keys = layer2->keys;
1175 layer->n_keys = layer2->n_keys;
1177 else if (layer2->n_keys)
1179 layer->keys = repalloc(layer->keys,
sizeof(
char *) * (layer->n_keys + layer2->n_keys));
1180 memcpy(&layer->keys[key_offset], layer2->keys,
sizeof(
char *) * layer2->n_keys);
1181 layer->n_keys += layer2->n_keys;
1184 if (!layer->n_values)
1186 layer->values = layer2->values;
1187 layer->n_values = layer2->n_values;
1189 else if (layer2->n_values)
1192 repalloc(layer->values,
sizeof(VectorTile__Tile__Value *) * (layer->n_values + layer2->n_values));
1194 &layer->values[value_offset], layer2->values,
sizeof(VectorTile__Tile__Value *) * layer2->n_values);
1195 layer->n_values += layer2->n_values;
1198 if (!layer->n_features)
1200 layer->features = layer2->features;
1201 layer->n_features = layer2->n_features;
1203 else if (layer2->n_features)
1205 layer->features = repalloc(
1206 layer->features,
sizeof(VectorTile__Tile__Feature *) * (layer->n_features + layer2->n_features));
1207 memcpy(&layer->features[feature_offset], layer2->features,
sizeof(
char *) * layer2->n_features);
1208 layer->n_features += layer2->n_features;
1210 for (uint32_t i = feature_offset; i < layer->n_features; i++)
1212 for (uint32_t t = 0; t < layer->features[i]->n_tags; t += 2)
1214 layer->features[i]->tags[t] += key_offset;
1215 layer->features[i]->tags[t + 1] += value_offset;