mirror of
https://github.com/Open-Argon/argon-v3.git
synced 2025-12-06 08:56:07 +00:00
fix broken sort function
This commit is contained in:
@@ -452,10 +452,10 @@ func Map(m anymap) ArObject {
|
|||||||
mutex.RLock()
|
mutex.RLock()
|
||||||
keys := []any{}
|
keys := []any{}
|
||||||
for k := range m {
|
for k := range m {
|
||||||
keys = append(keys, k)
|
keys = append(keys, AnyToArValid(k))
|
||||||
}
|
}
|
||||||
mutex.RUnlock()
|
mutex.RUnlock()
|
||||||
return keys, ArErr{}
|
return ArArray(keys), ArErr{}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
obj.obj["__Boolean__"] = builtinFunc{
|
obj.obj["__Boolean__"] = builtinFunc{
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
type keyCache map[any]any
|
|
||||||
|
|
||||||
func quickSort(list []any, getKey func(any) (any, ArErr)) ([]any, ArErr) {
|
func quickSort(list []any, getKey func(any) (any, ArErr)) ([]any, ArErr) {
|
||||||
if len(list) <= 1 {
|
if len(list) <= 1 {
|
||||||
return list, ArErr{}
|
return list, ArErr{}
|
||||||
@@ -15,21 +13,19 @@ func quickSort(list []any, getKey func(any) (any, ArErr)) ([]any, ArErr) {
|
|||||||
var left []any
|
var left []any
|
||||||
var right []any
|
var right []any
|
||||||
|
|
||||||
var cache = make(keyCache)
|
|
||||||
|
|
||||||
for _, v := range list[1:] {
|
for _, v := range list[1:] {
|
||||||
val, err := getkeyCache(getKey, v, cache)
|
val, err := getkeyCache(getKey, v)
|
||||||
if err.EXISTS {
|
if err.EXISTS {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
pivotval, err := getkeyCache(getKey, pivot, cache)
|
pivotval, err := getkeyCache(getKey, pivot)
|
||||||
if err.EXISTS {
|
if err.EXISTS {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
comp, comperr := compare(val, pivotval)
|
comp, comperr := compare(val, pivotval)
|
||||||
if comperr != nil {
|
if comperr != nil {
|
||||||
return nil, ArErr{
|
return nil, ArErr{
|
||||||
TYPE: "TypeError",
|
TYPE: "Runtime Error",
|
||||||
message: comperr.Error(),
|
message: comperr.Error(),
|
||||||
EXISTS: true,
|
EXISTS: true,
|
||||||
}
|
}
|
||||||
@@ -53,16 +49,11 @@ func quickSort(list []any, getKey func(any) (any, ArErr)) ([]any, ArErr) {
|
|||||||
return append(append(left, pivot), right...), ArErr{}
|
return append(append(left, pivot), right...), ArErr{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getkeyCache(getKey func(any) (any, ArErr), index any, cache keyCache) (any, ArErr) {
|
func getkeyCache(getKey func(any) (any, ArErr), key any) (any, ArErr) {
|
||||||
key := ArValidToAny(index)
|
val, err := getKey(key)
|
||||||
if cacheval, ok := cache[key]; ok {
|
|
||||||
return cacheval, ArErr{}
|
|
||||||
}
|
|
||||||
val, err := getKey(index)
|
|
||||||
if err.EXISTS {
|
if err.EXISTS {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
cache[key] = val
|
|
||||||
return val, ArErr{}
|
return val, ArErr{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user