From c9061433382ba486db760e4edd0238a012f7acbd Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 8 Mar 2019 15:21:46 +0100 Subject: [PATCH] sample: add sample_data_{insert, remove}() --- include/villas/sample.h | 4 ++++ lib/sample.c | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/villas/sample.h b/include/villas/sample.h index f5bc0d35f..9659e306a 100644 --- a/include/villas/sample.h +++ b/include/villas/sample.h @@ -136,6 +136,10 @@ int sample_decref_many(struct sample *smps[], int cnt); enum signal_type sample_format(const struct sample *s, unsigned idx); +void sample_data_insert(struct sample *smp, const union signal_data *src, size_t offset, size_t len); + +void sample_data_remove(struct sample *smp, size_t offset, size_t len); + #ifdef __cplusplus } #endif diff --git a/lib/sample.c b/lib/sample.c index afe6ce98f..f18225afb 100644 --- a/lib/sample.c +++ b/lib/sample.c @@ -301,3 +301,20 @@ void sample_dump(struct sample *s) if (s->signals) signal_list_dump(s->signals, s->data, s->length); } + +void sample_data_insert(struct sample *smp, const union signal_data *src, size_t offset, size_t len) +{ + memmove(&smp->data[offset + len], &smp->data[offset], sizeof(smp->data[0]) * (smp->length - offset)); + memcpy(&smp->data[offset], src, sizeof(smp->data[0]) * len); + + smp->length += len; +} + +void sample_data_remove(struct sample *smp, size_t offset, size_t len) +{ + size_t sz = sizeof(smp->data[0]) * len; + + memmove(&smp->data[offset], &smp->data[offset + len], sz); + + smp->length -= len; +}