MayaFlux 1.0.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< DataVariant >.

Definition at line 275 of file PlotContainer.cpp.

276{
277 if (data.empty() || region.start_coordinates.empty())
278 return;
279
280 const auto series_idx = static_cast<size_t>(region.start_coordinates[0]);
281 if (series_idx >= m_data.size())
282 return;
283
284 const auto* src = std::get_if<std::vector<double>>(&data[0]);
285 if (!src || src->empty())
286 return;
287
288 Memory::SeqlockWriteGuard g(m_series_locks[series_idx]);
289 auto* dst = std::get_if<std::vector<double>>(&m_data[series_idx]);
290 if (!dst || dst->empty())
291 return;
292
293 const uint64_t s = (region.start_coordinates.size() > 1) ? region.start_coordinates[1] : 0;
294 const uint64_t e = (region.end_coordinates.size() > 1)
295 ? std::min(region.end_coordinates[1], static_cast<uint64_t>(dst->size() - 1))
296 : static_cast<uint64_t>(dst->size() - 1);
297 if (s > e)
298 return;
299
300 const uint64_t n = std::min<uint64_t>(src->size(), e - s + 1);
301 std::copy_n(src->begin(), n, dst->begin() + static_cast<ptrdiff_t>(s));
302}
bool size
uint32_t * dst
const uint32_t * src
std::vector< DataVariant > m_data
Memory::SeqlockArray m_series_locks

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