func getPlatformStringsAddFunction(c *config.Config, info fileInfo, cgoTags tagLine) func(sb *platformStringsBuilder, ss ...string) {
	isOSSpecific, isArchSpecific := isOSArchSpecific(info, cgoTags)

	switch {
	case !isOSSpecific && !isArchSpecific:
		if checkConstraints(c, "", "", info.goos, info.goarch, info.tags, cgoTags) {
			return func(sb *platformStringsBuilder, ss ...string) {
				for _, s := range ss {
					sb.addGenericString(s)
				}
			}
		}

	case isOSSpecific && !isArchSpecific:
		var osMatch []string
		for _, os := range rule.KnownOSs {
			if checkConstraints(c, os, "", info.goos, info.goarch, info.tags, cgoTags) {
				osMatch = append(osMatch, os)
			}
		}
		if len(osMatch) > 0 {
			return func(sb *platformStringsBuilder, ss ...string) {
				for _, s := range ss {
					sb.addOSString(s, osMatch)
				}
			}
		}

	case !isOSSpecific && isArchSpecific:
		var archMatch []string
		for _, arch := range rule.KnownArchs {
			if checkConstraints(c, "", arch, info.goos, info.goarch, info.tags, cgoTags) {
				archMatch = append(archMatch, arch)
			}
		}
		if len(archMatch) > 0 {
			return func(sb *platformStringsBuilder, ss ...string) {
				for _, s := range ss {
					sb.addArchString(s, archMatch)
				}
			}
		}

	default:
		var platformMatch []rule.Platform
		for _, platform := range rule.KnownPlatforms {
			if checkConstraints(c, platform.OS, platform.Arch, info.goos, info.goarch, info.tags, cgoTags) {
				platformMatch = append(platformMatch, platform)
			}
		}
		if len(platformMatch) > 0 {
			return func(sb *platformStringsBuilder, ss ...string) {
				for _, s := range ss {
					sb.addPlatformString(s, platformMatch)
				}
			}
		}
	}

	return func(_ *platformStringsBuilder, _ ...string) {}
}
func getPlatformStringsAddFunction(c *config.Config, info fileInfo, cgoTags tagLine) func(sb *platformStringsBuilder, ss ...string) {
	isOSSpecific, isArchSpecific := isOSArchSpecific(info, cgoTags)

	switch {
	case !isOSSpecific && !isArchSpecific:
		if checkConstraints(c, "", "", info.goos, info.goarch, info.tags, cgoTags) {
			return func(sb *platformStringsBuilder, ss ...string) {
				for _, s := range ss {
					sb.addGenericString(s)
				}
			}
		}

	case isOSSpecific && !isArchSpecific:
		var osMatch []string
		for _, os := range rule.KnownOSs {
			if checkConstraints(c, os, "", info.goos, info.goarch, info.tags, cgoTags) {
				osMatch = append(osMatch, os)
			}
		}
		if len(osMatch) > 0 {
			return func(sb *platformStringsBuilder, ss ...string) {
				for _, s := range ss {
					sb.addOSString(s, osMatch)
				}
			}
		}

	case !isOSSpecific && isArchSpecific:
		var archMatch []string
		for _, arch := range rule.KnownArchs {
			if checkConstraints(c, "", arch, info.goos, info.goarch, info.tags, cgoTags) {
				archMatch = append(archMatch, arch)
			}
		}
		if len(archMatch) > 0 {
			return func(sb *platformStringsBuilder, ss ...string) {
				for _, s := range ss {
					sb.addArchString(s, archMatch)
				}
			}
		}

	default:
		var platformMatch []rule.Platform
		for _, platform := range rule.KnownPlatforms {
			if checkConstraints(c, platform.OS, platform.Arch, info.goos, info.goarch, info.tags, cgoTags) {
				platformMatch = append(platformMatch, platform)
			}
		}
		if len(platformMatch) > 0 {
			return func(sb *platformStringsBuilder, ss ...string) {
				for _, s := range ss {
					sb.addPlatformString(s, platformMatch)
				}
			}
		}
	}

	return func(_ *platformStringsBuilder, _ ...string) {}
}
func getPlatformStringsAddFunction ( c * config . Config , info fileInfo , cgoTags tagLine ) func ( sb * platformStringsBuilder , ss ... string ) { isOSSpecific , isArchSpecific := isOSArchSpecific ( info , cgoTags ) switch { case ! isOSSpecific && ! isArchSpecific : if checkConstraints ( c , " " , " " , info . goos , info . goarch , info . tags , cgoTags ) { return func ( sb * platformStringsBuilder , ss ... string ) { for _ , s := range ss { sb . addGenericString ( s ) } } } case isOSSpecific && ! isArchSpecific : var osMatch [ ] string for _ , os := range rule . KnownOSs { if checkConstraints ( c , os , " " , info . goos , info . goarch , info . tags , cgoTags ) { osMatch = append ( osMatch , os ) } } if len ( osMatch ) > 0 { return func ( sb * platformStringsBuilder , ss ... string ) { for _ , s := range ss { sb . addOSString ( s , osMatch ) } } } case ! isOSSpecific && isArchSpecific : var archMatch [ ] string for _ , arch := range rule . KnownArchs { if checkConstraints ( c , " " , arch , info . goos , info . goarch , info . tags , cgoTags ) { archMatch = append ( archMatch , arch ) } } if len ( archMatch ) > 0 { return func ( sb * platformStringsBuilder , ss ... string ) { for _ , s := range ss { sb . addArchString ( s , archMatch ) } } } default : var platformMatch [ ] rule . Platform for _ , platform := range rule . KnownPlatforms { if checkConstraints ( c , platform . OS , platform . Arch , info . goos , info . goarch , info . tags , cgoTags ) { platformMatch = append ( platformMatch , platform ) } } if len ( platformMatch ) > 0 { return func ( sb * platformStringsBuilder , ss ... string ) { for _ , s := range ss { sb . addPlatformString ( s , platformMatch ) } } } } return func ( _ * platformStringsBuilder , _ ... string ) { } }
// getPlatformStringsAddFunction returns a function used to add strings to
// a *platformStringsBuilder under the same set of constraints. This is a
// performance optimization to avoid evaluating constraints repeatedly.
getPlatformStringsAddFunction returns a function used to add strings to a * platformStringsBuilder under the same set of constraints . This is a performance optimization to avoid evaluating constraints repeatedly .