diff --git a/src/TimeRange.cpp b/src/TimeRange.cpp index 98b075f..0def66e 100644 --- a/src/TimeRange.cpp +++ b/src/TimeRange.cpp @@ -32,6 +32,20 @@ void TimeRange::resize(time_type start, time_type end) { resize(TimeRange(start, end)); } +void TimeRange::shift(time_type offset) { + start += offset; + end += offset; +} + +void TimeRange::grow(time_type value) { + start -= value; + end += value; +} + +void TimeRange::shrink(time_type value) { + grow(-value); +} + bool TimeRange::operator==(const TimeRange& rhs) const { return start == rhs.start && end == rhs.end; } diff --git a/src/TimeRange.h b/src/TimeRange.h index a0f546a..eef8a43 100644 --- a/src/TimeRange.h +++ b/src/TimeRange.h @@ -18,6 +18,9 @@ public: void resize(const TimeRange& newRange); void resize(time_type start, time_type end); + void shift(time_type offset); + void grow(time_type value); + void shrink(time_type value); bool operator==(const TimeRange& rhs) const; bool operator!=(const TimeRange& rhs) const; diff --git a/src/Timeline.h b/src/Timeline.h index 1358378..8da4f49 100644 --- a/src/Timeline.h +++ b/src/Timeline.h @@ -191,6 +191,18 @@ public: return reference(*this, time); } + void shift(time_type offset) { + if (offset == time_type::zero()) return; + + range.shift(offset); + set_type newElements; + for (Timed element : elements) { + element.shift(offset); + newElements.insert(element); + } + elements = std::move(newElements); + } + Timeline(const Timeline&) = default; Timeline(Timeline&&) = default; Timeline& operator=(const Timeline&) = default;