Copy valid one-dimensional segments into separate arrays.
100{
101 std::vector<CompositeArray> result;
102 result.reserve(segments.size());
103
104 for (const auto& segment : segments) {
105 const auto& region = segment.source_region;
106
107 if (region.start_coordinates.size() != 1 || region.end_coordinates.size() != 1
108 || segment.offset_in_region.size() != 1 || segment.segment_size.size() != 1)
109 continue;
110
111 const uint64_t source_start = region.start_coordinates[0];
112 const uint64_t source_end = region.end_coordinates[0];
113 const uint64_t
offset = segment.offset_in_region[0];
114 const uint64_t
count = segment.segment_size[0];
115
116 if (source_start > source_end ||
offset > source_end - source_start ||
count == 0)
117 continue;
118
119 const uint64_t start = source_start +
offset;
120 if (
count - 1 > source_end - start)
121 continue;
122
124 std::vector<uint64_t> { start }, std::vector<uint64_t> { start +
count - 1 }));
125
126 if (!copied.empty())
127 result.push_back(std::move(copied.front()));
128 }
129 return result;
130}
std::vector< CompositeArray > get_region_data(const Region ®ion) const override
Copy a one-dimensional Region into an owning CompositeArray.