diff --git a/codego/core/utils/utils.go b/codego/core/utils/utils.go index b4fa4cf..7b5bb8a 100644 --- a/codego/core/utils/utils.go +++ b/codego/core/utils/utils.go @@ -1,23 +1,39 @@ package utils import ( + "encoding/json" + "log" "sort" "strings" ) /* ---------------------------------------------------------------- * - * EXPORTS + * METHODS: json * ---------------------------------------------------------------- */ -func StrListContains(list []string, x string) bool { - for _, obj := range list { - if obj == x { - return true - } +func JsonToArrayOfStrings(s string, value *[]string) { + var err error + err = json.Unmarshal([]byte(s), &value) + if err != nil { + panic(err) } - return false } +/* ---------------------------------------------------------------- * + * METHODS: conversion + * ---------------------------------------------------------------- */ + +func BoolToInt(cond bool) int { + if cond { + return 1 + } + return 0 +} + +/* ---------------------------------------------------------------- * + * METHODS: for integer lists + * ---------------------------------------------------------------- */ + func Min2(x int, y int) int { if x <= y { return x @@ -32,6 +48,49 @@ func Max2(x int, y int) int { return y } +func MinList(x []int) int { + var val int + if len(x) == 0 { + log.Fatal("Cannot compute the maximum of an empty array.") + return 0 + } + val = x[0] + for i, val_ := range x { + if i > 0 { + val = Min2(val, val_) + } + } + return val +} + +func MaxList(x []int) int { + var val int + if len(x) == 0 { + log.Fatal("Cannot compute the maximum of an empty array.") + return 0 + } + val = x[0] + for i, val_ := range x { + if i > 0 { + val = Max2(val, val_) + } + } + return val +} + +/* ---------------------------------------------------------------- * + * METHODS: for string lists + * ---------------------------------------------------------------- */ + +func StrListContains(list []string, x string) bool { + for _, obj := range list { + if obj == x { + return true + } + } + return false +} + func SortStrings(list *[]string) { sort.Slice(*list, func(i int, j int) bool { u := strings.ToLower((*list)[i]) @@ -68,6 +127,7 @@ func UnionStrings2(list1 []string, list2 []string) []string { return list } +// assumes that listTo contains no duplicates func UnionStringsTo(listTo *[]string, listFrom []string) { var mark = make(map[string]bool) for _, item := range listFrom { @@ -82,3 +142,11 @@ func UnionStringsTo(listTo *[]string, listFrom []string) { } } } + +func UnionStringsList(lists [][]string) []string { + var list = []string{} + for _, list_ := range lists { + UnionStringsTo(&list, list_) + } + return list +}