@@ -303,27 +303,41 @@ Subarray subarray_from_capnp(
303303 }
304304 }
305305
306- std::vector<optional<Subarray::LabelRangeSubset>> label_range_subset (
307- dim_num, nullopt );
306+ std::vector<optional<Subarray::LabelRangeSubset>> label_range_subset;
307+ label_range_subset.reserve (dim_num);
308+ uint32_t last_dim = 0 ;
308309 if (reader.hasLabelRanges ()) {
309310 auto label_ranges_reader = reader.getLabelRanges ();
310311 uint32_t label_num = label_ranges_reader.size ();
311312 for (uint32_t i = 0 ; i < label_num; i++) {
312313 auto label_range_reader = label_ranges_reader[i];
313314 auto dim_index = label_range_reader.getDimensionId ();
314315 auto dim = array->array_schema_latest ().dimension_ptr (dim_index);
316+
317+ // Fill in any missing dimensions with nullopt
318+ for (; last_dim < dim_index; last_dim++) {
319+ label_range_subset.emplace_back (std::nullopt );
320+ }
315321 auto label_name = label_range_reader.getName ();
316322
317323 // Deserialize ranges for this dim label
318324 auto range_reader = label_range_reader.getRanges ();
319325 auto label_ranges = range_buffers_from_capnp (range_reader);
320326
321327 // Set ranges for this dim label on the subarray
322- label_range_subset[dim_index] = {
323- label_name, dim->type (), label_ranges, coalesce_ranges};
328+ label_range_subset.emplace_back (
329+ std::in_place,
330+ label_name,
331+ dim->type (),
332+ label_ranges,
333+ coalesce_ranges);
324334 is_default[dim_index] = false ;
325335 }
326336 }
337+ // Fill in label ranges with nullopt for any remaining dimensions
338+ for (; last_dim < dim_num; last_dim++) {
339+ label_range_subset.emplace_back (std::nullopt );
340+ }
327341
328342 std::unordered_map<std::string, std::vector<Range>> attr_range_subset;
329343 if (reader.hasAttributeRanges ()) {
0 commit comments