From 821abae7517eecb499b23550ea485c842af24f83 Mon Sep 17 00:00:00 2001 From: Ben Bredesen Date: Mon, 6 Mar 2023 11:54:40 -0600 Subject: [PATCH] issue #3, add val sort by name, mod sort by val --- def/bitmask_type.go | 2 +- def/enum_type.go | 2 +- def/external_type.go | 2 +- def/handle_type.go | 2 +- def/registry_base.go | 21 +++++++++++++++++---- main.go | 22 +++++++++++++++++----- 6 files changed, 38 insertions(+), 13 deletions(-) diff --git a/def/bitmask_type.go b/def/bitmask_type.go index 31354fb..7a37761 100644 --- a/def/bitmask_type.go +++ b/def/bitmask_type.go @@ -38,7 +38,7 @@ func (t *bitmaskType) Resolve(tr TypeRegistry, vr ValueRegistry) *IncludeSet { func (t *bitmaskType) PrintPublicDeclaration(w io.Writer) { t.internalType.PrintPublicDeclaration(w) - sort.Sort(byValue(t.values)) + sort.Sort(ByValue(t.values)) if len(t.values) > 0 { fmt.Fprint(w, "const (\n") diff --git a/def/enum_type.go b/def/enum_type.go index c5b258e..c512028 100644 --- a/def/enum_type.go +++ b/def/enum_type.go @@ -44,7 +44,7 @@ func (t *enumType) PrintPublicDeclaration(w io.Writer) { t.internalType.PrintPublicDeclaration(w) } - sort.Sort(byValue(t.values)) + sort.Sort(ByValue(t.values)) if len(t.values) > 0 { fmt.Fprint(w, "const (\n") diff --git a/def/external_type.go b/def/external_type.go index b63cba0..a34b1fe 100644 --- a/def/external_type.go +++ b/def/external_type.go @@ -146,7 +146,7 @@ func (t *externalType) Resolve(tr TypeRegistry, vr ValueRegistry) *IncludeSet { // PrintPublicDeclaration is for external types just needs to print constants func (t *externalType) PrintPublicDeclaration(w io.Writer) { - sort.Sort(byValue(t.values)) + sort.Sort(ByValue(t.values)) if len(t.values) > 0 { fmt.Fprint(w, "const (\n") diff --git a/def/handle_type.go b/def/handle_type.go index 5dbafb2..ac47aab 100644 --- a/def/handle_type.go +++ b/def/handle_type.go @@ -32,7 +32,7 @@ func (t *handleType) Resolve(tr TypeRegistry, vr ValueRegistry) *IncludeSet { func (t *handleType) PrintPublicDeclaration(w io.Writer) { t.internalType.PrintPublicDeclaration(w) - sort.Sort(byValue(t.values)) + sort.Sort(ByValue(t.values)) if len(t.values) > 0 { fmt.Fprint(w, "const (\n") diff --git a/def/registry_base.go b/def/registry_base.go index ec9a747..9b1745f 100644 --- a/def/registry_base.go +++ b/def/registry_base.go @@ -171,12 +171,12 @@ type ValueDefiner interface { IsCore() bool } -type byValue []ValueDefiner +type ByValue []ValueDefiner // TODO: also sort by bitmask values and aliases -func (a byValue) Len() int { return len(a) } -func (a byValue) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byValue) Less(i, j int) bool { +func (a ByValue) Len() int { return len(a) } +func (a ByValue) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a ByValue) Less(i, j int) bool { iNum, err1 := strconv.Atoi(a[i].ValueString()) jNum, err2 := strconv.Atoi(a[j].ValueString()) if err1 == nil && err2 == nil { @@ -185,6 +185,19 @@ func (a byValue) Less(i, j int) bool { return a[i].ValueString() < a[j].ValueString() } +type ByValuePublicName []ValueDefiner // add for cleanup/issue-3 + +func (a ByValuePublicName) Len() int { return len(a) } +func (a ByValuePublicName) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a ByValuePublicName) Less(i, j int) bool { + iNum, err1 := strconv.Atoi(a[i].PublicName()) + jNum, err2 := strconv.Atoi(a[j].PublicName()) + if err1 == nil && err2 == nil { + return iNum < jNum + } + return a[i].PublicName() < a[j].PublicName() +} + func WriteStringerCommands(w io.Writer, defs []TypeDefiner, cat TypeCategory, filenameBase string) { typesPerCallLimit := 32 diff --git a/main.go b/main.go index 9a8e103..c52d029 100644 --- a/main.go +++ b/main.go @@ -370,19 +370,31 @@ func printTypes(w io.Writer, types []def.TypeDefiner, vals map[string]def.ValueR } func printLooseValues(w io.Writer, valsByTypeName map[string]def.ValueRegistry) { + // sort and refactored for cleanup/issue-3 for k, vr := range valsByTypeName { - fmt.Fprintf(w, "// Platform-specific values for %s\n", k) + // Values will be sorted by const name for extension names/spec versions, and by value for typed consts + allValues := make([]def.ValueDefiner, 0, len(vr)) + for _, val := range vr { + allValues = append(allValues, val) + } + + if k == "" { + fmt.Fprint(w, "// Extension names and versions\n") + // Drop the values into a slice and sort by the const name + sort.Sort(def.ByValuePublicName(allValues)) + } else { + fmt.Fprintf(w, "// Platform-specific values for %s\n", k) + sort.Sort(def.ByValue(allValues)) + } + fmt.Fprintf(w, "const (\n") - i := 0 - for _, val := range vr { + for _, val := range allValues { val.PrintPublicDeclaration(w) - i++ } fmt.Fprintf(w, ")\n\n") } - } func copyStaticFiles() {