From 81261f992dce2a4eb43781e939008a40b174f96d Mon Sep 17 00:00:00 2001 From: crowfrog <38678436+crowfrog@users.noreply.github.com> Date: Sat, 8 Oct 2022 10:41:00 +0800 Subject: [PATCH 1/2] Update parser.go --- parser.go | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/parser.go b/parser.go index 76ec02d..e0fac00 100644 --- a/parser.go +++ b/parser.go @@ -708,13 +708,29 @@ func WriteToBuffer(buffer []byte, str string) int { /* -Del - Receives existing data structure, path to delete. +Delete - Receives existing data structure, path to delete. Returns: -`data` - return modified data +`data` - return modified data on new slice */ func Delete(data []byte, keys ...string) []byte { + return delete(false, data, keys) +} + +/* + +DeleteOnOrig - Receives existing data structure, path to delete. + +Returns: +`data` - return modified data on original slice + +*/ +func DeleteOnOrig(data []byte, keys ...string) []byte { + return delete(true, data, keys) +} + +func delete(flag bool, data []byte, keys ...string) []byte { lk := len(keys) if lk == 0 { return data[:0] @@ -783,11 +799,16 @@ func Delete(data []byte, keys ...string) []byte { newOffset = prevTok + 1 } - // We have to make a copy here if we don't want to mangle the original data, because byte slices are - // accessed by reference and not by value - dataCopy := make([]byte, len(data)) - copy(dataCopy, data) - data = append(dataCopy[:newOffset], dataCopy[endOffset:]...) + if !flag { + // We have to make a copy here if we don't want to mangle the original data, because byte slices are + // accessed by reference and not by value + dataCopy := make([]byte, len(data)) + copy(dataCopy, data) + data = append(dataCopy[:newOffset], dataCopy[endOffset:]...) + } else { + // delete on original slice + data = append(data[:newOffset], data[endOffset:]...) + } return data } From 3cfaafe9e4674a389dd0280e09f34511d7189307 Mon Sep 17 00:00:00 2001 From: crowfrog <38678436+crowfrog@users.noreply.github.com> Date: Sat, 8 Oct 2022 11:25:33 +0800 Subject: [PATCH 2/2] Update parser.go --- parser.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/parser.go b/parser.go index e0fac00..5ba715b 100644 --- a/parser.go +++ b/parser.go @@ -715,7 +715,7 @@ Returns: */ func Delete(data []byte, keys ...string) []byte { - return delete(false, data, keys) + return delete(false, data, keys...) } /* @@ -727,7 +727,7 @@ Returns: */ func DeleteOnOrig(data []byte, keys ...string) []byte { - return delete(true, data, keys) + return delete(true, data, keys...) } func delete(flag bool, data []byte, keys ...string) []byte {