From 910792e383e153a67799af54aa0dfb6df33c2079 Mon Sep 17 00:00:00 2001 From: Robert Bendun Date: Tue, 14 Jun 2022 11:39:04 +0200 Subject: [PATCH] rotate function --- src/interpreter.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/interpreter.cc b/src/interpreter.cc index c3ddcd0..a8873cf 100644 --- a/src/interpreter.cc +++ b/src/interpreter.cc @@ -430,6 +430,19 @@ Interpreter::Interpreter() }}); }); + global.force_define("rotate", +[](Interpreter &i, std::vector args) -> Result { + assert(!args.empty(), "rotate requires offset"); // TODO(assert) + auto offset = std::move(args.front()).n.as_int(); + auto array = Try(into_flat_array(i, std::span(args).subspan(1))); + offset = offset % array.elements.size(); + if (offset > 0) { + std::rotate(array.elements.begin(), array.elements.begin() + offset, array.elements.end()); + } else if (offset < 0) { + std::rotate(array.elements.rbegin(), array.elements.rbegin() + (-offset), array.elements.rend()); + } + return Value::from(std::move(array)); + }); + global.force_define("chord", +[](Interpreter &i, std::vector args) -> Result { Chord chord; Try(create_chord(chord.notes, i, std::move(args)));