diff pkg/common/delta.go @ 5710:37c8feeecb4d

Merged branch sr-v2 into default.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 20 Feb 2024 21:28:56 +0100
parents 3bc15e38c7e8
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/common/delta.go	Tue Feb 20 21:28:56 2024 +0100
@@ -0,0 +1,37 @@
+// This is Free Software under GNU Affero General Public License v >= 3.0
+// without warranty, see README.md and license for details.
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// License-Filename: LICENSES/AGPL-3.0.txt
+//
+// Copyright (C) 2024 by via donau
+//   – Österreichische Wasserstraßen-Gesellschaft mbH
+// Software engineering by Intevation GmbH
+//
+// Author(s):
+//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
+
+package common
+
+// Delta returns a function which returns its argument when called
+// the first time and the delta to the last call afterwards.
+func Delta() func(int64) int64 {
+	var last int64
+	return func(x int64) (y int64) {
+		y = x - last
+		last = x
+		return
+	}
+}
+
+// InvDelta is the inverse function to Delta. A sequence of numbers
+// fed into the function generated by InvDelta restores
+// the values fed into the function generated by Delta.
+func InvDelta() func(int64) int64 {
+	var last int64
+	return func(x int64) (y int64) {
+		y = x + last
+		last = y
+		return
+	}
+}