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
1143 const uint32_t key_offset = layer->n_keys;
1144 const uint32_t value_offset = layer->n_values;
1145 const uint32_t feature_offset = layer->n_features;
1149 layer->keys = layer2->keys;
1150 layer->n_keys = layer2->n_keys;
1152 else if (layer2->n_keys)
1154 layer->keys = repalloc(layer->keys,
sizeof(
char *) * (layer->n_keys + layer2->n_keys));
1155 memcpy(&layer->keys[key_offset], layer2->keys,
sizeof(
char *) * layer2->n_keys);
1156 layer->n_keys += layer2->n_keys;
1159 if (!layer->n_values)
1161 layer->values = layer2->values;
1162 layer->n_values = layer2->n_values;
1164 else if (layer2->n_values)
1167 repalloc(layer->values,
sizeof(VectorTile__Tile__Value *) * (layer->n_values + layer2->n_values));
1169 &layer->values[value_offset], layer2->values,
sizeof(VectorTile__Tile__Value *) * layer2->n_values);
1170 layer->n_values += layer2->n_values;
1173 if (!layer->n_features)
1175 layer->features = layer2->features;
1176 layer->n_features = layer2->n_features;
1178 else if (layer2->n_features)
1180 layer->features = repalloc(
1181 layer->features,
sizeof(VectorTile__Tile__Feature *) * (layer->n_features + layer2->n_features));
1182 memcpy(&layer->features[feature_offset], layer2->features,
sizeof(
char *) * layer2->n_features);
1183 layer->n_features += layer2->n_features;
1185 for (uint32_t i = feature_offset; i < layer->n_features; i++)
1187 for (uint32_t t = 0; t < layer->features[i]->n_tags; t += 2)
1189 layer->features[i]->tags[t] += key_offset;
1190 layer->features[i]->tags[t + 1] += value_offset;