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
1167 const uint32_t key_offset = layer->n_keys;
1168 const uint32_t value_offset = layer->n_values;
1169 const uint32_t feature_offset = layer->n_features;
1173 layer->keys = layer2->keys;
1174 layer->n_keys = layer2->n_keys;
1176 else if (layer2->n_keys)
1178 layer->keys = repalloc(layer->keys,
sizeof(
char *) * (layer->n_keys + layer2->n_keys));
1179 memcpy(&layer->keys[key_offset], layer2->keys,
sizeof(
char *) * layer2->n_keys);
1180 layer->n_keys += layer2->n_keys;
1183 if (!layer->n_values)
1185 layer->values = layer2->values;
1186 layer->n_values = layer2->n_values;
1188 else if (layer2->n_values)
1191 repalloc(layer->values,
sizeof(VectorTile__Tile__Value *) * (layer->n_values + layer2->n_values));
1193 &layer->values[value_offset], layer2->values,
sizeof(VectorTile__Tile__Value *) * layer2->n_values);
1194 layer->n_values += layer2->n_values;
1197 if (!layer->n_features)
1199 layer->features = layer2->features;
1200 layer->n_features = layer2->n_features;
1202 else if (layer2->n_features)
1204 layer->features = repalloc(
1205 layer->features,
sizeof(VectorTile__Tile__Feature *) * (layer->n_features + layer2->n_features));
1206 memcpy(&layer->features[feature_offset], layer2->features,
sizeof(
char *) * layer2->n_features);
1207 layer->n_features += layer2->n_features;
1209 for (uint32_t i = feature_offset; i < layer->n_features; i++)
1211 for (uint32_t t = 0; t < layer->features[i]->n_tags; t += 2)
1213 layer->features[i]->tags[t] += key_offset;
1214 layer->features[i]->tags[t + 1] += value_offset;