MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ set_region_data()

void MayaFlux::Kakshya::CompositeContainer::set_region_data ( const Region &  region,
const std::vector< CompositeArray > &  data 
)
overridevirtual

Replace a Region with an equal number of compatible elements.

Parameters
regionInclusive destination range.
dataArrays whose combined element count must equal the range.
Note
Invalid ranges, counts, or layouts leave the source unchanged.

Implements MayaFlux::Kakshya::NDDataContainer< CompositeArray >.

Definition at line 132 of file CompositeContainer.cpp.

133{
134 const auto target = m_data.slice(region);
135 if (!target)
136 return;
137
138 size_t supplied = 0;
139 for (const auto& array : data) {
140 if (array.size() > target->size() - supplied)
141 return;
142 supplied += array.size();
143 }
144 if (supplied != target->size())
145 return;
146
147 CompositeArray replacement(m_data.layout());
148 CompositeInsertion insertion(replacement);
149
150 const auto before = m_data.slice(0, target->start());
151 const auto after_start = target->start() + target->size();
152 const auto after = m_data.slice(after_start, m_data.size() - after_start);
153
154 if (!before || !after || !append_slice(insertion, *before))
155 return;
156
157 for (const auto& array : data) {
158 const auto selected = array.slice(0, array.size());
159 if (!selected || !append_slice(insertion, *selected))
160 return;
161 }
162 if (!append_slice(insertion, *after))
163 return;
164
165 m_data = std::move(replacement);
166}
size_t size() const noexcept
Number of packed elements.
const CompositeLayout & layout() const noexcept
Finalized layout shared by all elements.
std::optional< CompositeSlice > slice(size_t start, size_t count) const
Borrow consecutive elements without copying.

References MayaFlux::Kakshya::CompositeArray::layout(), m_data, MayaFlux::Kakshya::CompositeArray::size(), and MayaFlux::Kakshya::CompositeArray::slice().

+ Here is the call graph for this function: