package rosa import ( "sync" "hakurei.app/internal/pkg" ) // PArtifact is a lazily-initialised [pkg.Artifact] preset. type PArtifact int const ( Autoconf PArtifact = iota Bash Busybox CMake Coreutils Diffutils Gettext Git Go KernelHeaders Libffi M4 Make Ninja Perl Patch Python Rsync Zlib // _presetEnd is the total number of presets and does not denote a preset. _presetEnd ) var ( // artifactsF is an array of functions for the result of [PArtifact]. artifactsF [_presetEnd]func(t Toolchain) pkg.Artifact // artifacts stores the result of artifactsF. artifacts [_toolchainEnd][len(artifactsF)]pkg.Artifact // artifactsOnce is for lazy initialisation of artifacts. artifactsOnce [_toolchainEnd][len(artifactsF)]sync.Once ) // Load returns the resulting [pkg.Artifact] of [PArtifact]. func (t Toolchain) Load(p PArtifact) pkg.Artifact { artifactsOnce[t][p].Do(func() { artifacts[t][p] = artifactsF[p](t) }) return artifacts[t][p] }