/
sort.go
127 lines (117 loc) · 2.61 KB
/
sort.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Copyright 2018 Martin Bertschler.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package memory
import (
"errors"
"fmt"
"github.com/mbertschler/bunny/pkg/data/stored"
)
func sortArrayOld(arr []int, old, new int) ([]int, error) {
max := len(arr)
if !(old < max && old >= 0 &&
new < max && new >= 0) {
return arr, errors.New(fmt.Sprintln(
"invalid sorting from", old, "to", new, "max", max))
}
el := arr[old]
arr = append(arr[:old], arr[old+1:]...)
in := make([]int, len(arr))
copy(in, arr)
return append(append(arr[:new], el), in[new:]...), nil
}
func findInArray(in []int, search int) (int, bool) {
for i := range in {
if in[i] == search {
return i, true
}
}
return 0, false
}
func findInThingArray(in []stored.ThingID, search stored.ThingID) (int, bool) {
for i := range in {
if in[i] == search {
return i, true
}
}
return 0, false
}
func deleteFromArray(in []int, idx int) []int {
out := []int{}
for i, el := range in {
if i != idx {
out = append(out, el)
}
}
return out
}
func deleteFromThingArray(in []stored.ThingID, idx int) []stored.ThingID {
out := []stored.ThingID{}
for i, el := range in {
if i != idx {
out = append(out, el)
}
}
return out
}
func sortArray(in []int, old, new int) ([]int, error) {
if old == new {
return in, nil
}
max := len(in)
if !(old < max && old >= 0 &&
new < max && new >= 0) {
return in, errors.New(fmt.Sprintln(
"invalid sorting from", old, "to", new, "max", max))
}
out := make([]int, len(in))
i, j := 0, 0
for j < max {
if j == new {
out[j] = in[old]
j++
continue
}
if i != old {
out[j] = in[i]
j++
}
i++
}
return out, nil
}
func sortThingArray(in []stored.ThingID, old, new int) ([]stored.ThingID, error) {
if old == new {
return in, nil
}
max := len(in)
if !(old < max && old >= 0 &&
new < max && new >= 0) {
return in, errors.New(fmt.Sprintln(
"invalid sorting from", old, "to", new, "max", max))
}
out := make([]stored.ThingID, len(in))
i, j := 0, 0
for j < max {
if j == new {
out[j] = in[old]
j++
continue
}
if i != old {
out[j] = in[i]
j++
}
i++
}
return out, nil
}