From 07a54e89dd58a055ab91cd7561977ca80bf686e4 Mon Sep 17 00:00:00 2001 From: Adnan Maolood Date: Wed, 12 May 2021 17:10:19 -0400 Subject: [PATCH] funcs: Add reverse --- funcs.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/funcs.go b/funcs.go index 90de897..307ab80 100644 --- a/funcs.go +++ b/funcs.go @@ -3,11 +3,13 @@ package main import ( "html/template" "path" + "reflect" "strings" ) var funcs = map[string]interface{}{ "path": func() _path { return _path{} }, + "reverse": reverse, "strings": func() _strings { return _strings{} }, "safeHTML": func(s string) template.HTML { return template.HTML(s) }, "safeHTMLAttr": func(s string) template.HTMLAttr { return template.HTMLAttr(s) }, @@ -44,3 +46,15 @@ func (_strings) TrimPrefix(a, b string) string { return strings.TrimPrefi func (_strings) TrimRight(a, b string) string { return strings.TrimRight(a, b) } func (_strings) TrimSpace(s string) string { return strings.TrimSpace(s) } func (_strings) TrimSuffix(a, b string) string { return strings.TrimSuffix(a, b) } + +func reverse(s interface{}) interface{} { + v := reflect.ValueOf(s) + n := v.Len() + r := reflect.MakeSlice(v.Type(), n, n) + reflect.Copy(r, v) + swap := reflect.Swapper(r.Interface()) + for i, j := 0, n-1; i < j; i, j = i+1, j-1 { + swap(i, j) + } + return r.Interface() +}