refactored data-types to reduce plugin sizes
This commit is contained in:
+24
-22
@@ -7,6 +7,8 @@ package expr
|
||||
import (
|
||||
"git.portale-stac.it/go-pkg/expr/kern"
|
||||
"git.portale-stac.it/go-pkg/expr/scan"
|
||||
"git.portale-stac.it/go-pkg/expr/types/array"
|
||||
"git.portale-stac.it/go-pkg/expr/types/list"
|
||||
)
|
||||
|
||||
//-------- prepend term
|
||||
@@ -32,33 +34,33 @@ func newAppendTerm(tk *scan.Token) (inst *scan.Term) {
|
||||
}
|
||||
|
||||
func prependToList(opTerm *scan.Term, leftValue, rightValue any) (result any, err error) {
|
||||
if list, ok := rightValue.(*kern.ListType); ok {
|
||||
if a, ok := rightValue.(*array.ListType); ok {
|
||||
var it kern.Iterator
|
||||
if it, ok = leftValue.(kern.Iterator); !ok {
|
||||
it = NewFormalIterator(leftValue)
|
||||
}
|
||||
|
||||
ls := kern.NewLinkedList()
|
||||
ls := list.NewLinkedList()
|
||||
ls.SeqPushBack(it)
|
||||
|
||||
newList := kern.ListType(nil)
|
||||
if newSize := len(*list) + int(ls.Len()); newSize > cap(*list) {
|
||||
newList = make([]any, 0, newSize)
|
||||
newArray := array.ListType(nil)
|
||||
if newSize := len(*a) + int(ls.Len()); newSize > cap(*a) {
|
||||
newArray = make([]any, 0, newSize)
|
||||
for node := ls.FirstNode(); node != nil; node = node.Next() {
|
||||
newList = append(newList, node.Data())
|
||||
newArray = append(newArray, node.Data())
|
||||
}
|
||||
}
|
||||
for _, item := range *list {
|
||||
newList = append(newList, item)
|
||||
for _, item := range *a {
|
||||
newArray = append(newArray, item)
|
||||
}
|
||||
result = &newList
|
||||
} else if list, ok := rightValue.(*kern.LinkedList); ok {
|
||||
result = &newArray
|
||||
} else if ll, ok := rightValue.(*list.LinkedList); ok {
|
||||
var it kern.Iterator
|
||||
if it, ok = leftValue.(kern.Iterator); !ok {
|
||||
it = NewFormalIterator(leftValue)
|
||||
}
|
||||
|
||||
result = list.SeqPushBack(it)
|
||||
result = ll.SeqPushBack(it)
|
||||
} else {
|
||||
err = opTerm.ErrIncompatibleTypes(leftValue, rightValue)
|
||||
}
|
||||
@@ -77,33 +79,33 @@ func evalPrepend(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
|
||||
}
|
||||
|
||||
func appendToList(opTerm *scan.Term, leftValue, rightValue any) (result any, err error) {
|
||||
if list, ok := leftValue.(*kern.ListType); ok {
|
||||
if a, ok := leftValue.(*array.ListType); ok {
|
||||
var it kern.Iterator
|
||||
if it, ok = rightValue.(kern.Iterator); !ok {
|
||||
it = NewFormalIterator(rightValue)
|
||||
}
|
||||
|
||||
ls := kern.NewLinkedList()
|
||||
ls := list.NewLinkedList()
|
||||
ls.SeqPushBack(it)
|
||||
|
||||
newList := *list
|
||||
if newSize := len(*list) + int(ls.Len()); newSize > cap(*list) {
|
||||
newList = make([]any, 0, newSize)
|
||||
for _, item := range *list {
|
||||
newList = append(newList, item)
|
||||
newArray := *a
|
||||
if newSize := len(*a) + int(ls.Len()); newSize > cap(*a) {
|
||||
newArray = make([]any, 0, newSize)
|
||||
for _, item := range *a {
|
||||
newArray = append(newArray, item)
|
||||
}
|
||||
}
|
||||
for node := ls.FirstNode(); node != nil; node = node.Next() {
|
||||
newList = append(newList, node.Data())
|
||||
newArray = append(newArray, node.Data())
|
||||
}
|
||||
result = &newList
|
||||
} else if list, ok := leftValue.(*kern.LinkedList); ok {
|
||||
result = &newArray
|
||||
} else if ll, ok := leftValue.(*list.LinkedList); ok {
|
||||
var it kern.Iterator
|
||||
if it, ok = rightValue.(kern.Iterator); !ok {
|
||||
it = NewFormalIterator(rightValue)
|
||||
}
|
||||
|
||||
result = list.SeqPushBack(it)
|
||||
result = ll.SeqPushBack(it)
|
||||
} else {
|
||||
err = opTerm.ErrIncompatibleTypes(leftValue, rightValue)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user