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

◆ set_region_data()

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

Write a sample range back into a series.

Same coordinate convention as get_region_data(). The first DataVariant in data must hold vector<double>. Used by Context drag handlers for wavetable editing and interactive signal manipulation.

Implements MayaFlux::Kakshya::NDDataContainer.

Definition at line 254 of file PlotContainer.cpp.

255{
256 if (data.empty() || region.start_coordinates.empty())
257 return;
258
259 const auto series_idx = static_cast<size_t>(region.start_coordinates[0]);
260 if (series_idx >= m_data.size())
261 return;
262
263 const auto* src = std::get_if<std::vector<double>>(&data[0]);
264 if (!src || src->empty())
265 return;
266
267 Memory::SeqlockWriteGuard g(m_series_locks[series_idx]);
268 auto* dst = std::get_if<std::vector<double>>(&m_data[series_idx]);
269 if (!dst)
270 return;
271
272 const uint64_t s = (region.start_coordinates.size() > 1) ? region.start_coordinates[1] : 0;
273 const uint64_t e = (region.end_coordinates.size() > 1)
274 ? std::min(region.end_coordinates[1], static_cast<uint64_t>(dst->size() - 1))
275 : static_cast<uint64_t>(dst->size() - 1);
276 if (s > e)
277 return;
278
279 const uint64_t n = std::min<uint64_t>(src->size(), e - s + 1);
280 std::copy_n(src->begin(), n, dst->begin() + static_cast<ptrdiff_t>(s));
281}
std::vector< DataVariant > m_data
Memory::SeqlockArray m_series_locks

References MayaFlux::Kakshya::Region::end_coordinates, m_data, m_series_locks, and MayaFlux::Kakshya::Region::start_coordinates.