mirror of
https://github.com/safing/portbase
synced 2025-09-01 01:59:48 +00:00
Add validity flag for out of package usage.
This commit is contained in:
parent
e349fb4f5b
commit
bff3f5a1dd
4 changed files with 48 additions and 18 deletions
|
@ -11,7 +11,7 @@ var (
|
||||||
|
|
||||||
// GetAsString returns a function that returns the wanted string with high performance.
|
// GetAsString returns a function that returns the wanted string with high performance.
|
||||||
func (cs *safe) GetAsString(name string, fallback string) StringOption {
|
func (cs *safe) GetAsString(name string, fallback string) StringOption {
|
||||||
valid := GetValidityFlag()
|
valid := getValidityFlag()
|
||||||
option, valueCache := getValueCache(name, nil, OptTypeString)
|
option, valueCache := getValueCache(name, nil, OptTypeString)
|
||||||
value := fallback
|
value := fallback
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
|
@ -23,7 +23,7 @@ func (cs *safe) GetAsString(name string, fallback string) StringOption {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if !valid.IsSet() {
|
if !valid.IsSet() {
|
||||||
valid = GetValidityFlag()
|
valid = getValidityFlag()
|
||||||
option, valueCache = getValueCache(name, option, OptTypeString)
|
option, valueCache = getValueCache(name, option, OptTypeString)
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
value = valueCache.stringVal
|
value = valueCache.stringVal
|
||||||
|
@ -37,7 +37,7 @@ func (cs *safe) GetAsString(name string, fallback string) StringOption {
|
||||||
|
|
||||||
// GetAsStringArray returns a function that returns the wanted string with high performance.
|
// GetAsStringArray returns a function that returns the wanted string with high performance.
|
||||||
func (cs *safe) GetAsStringArray(name string, fallback []string) StringArrayOption {
|
func (cs *safe) GetAsStringArray(name string, fallback []string) StringArrayOption {
|
||||||
valid := GetValidityFlag()
|
valid := getValidityFlag()
|
||||||
option, valueCache := getValueCache(name, nil, OptTypeStringArray)
|
option, valueCache := getValueCache(name, nil, OptTypeStringArray)
|
||||||
value := fallback
|
value := fallback
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
|
@ -49,7 +49,7 @@ func (cs *safe) GetAsStringArray(name string, fallback []string) StringArrayOpti
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if !valid.IsSet() {
|
if !valid.IsSet() {
|
||||||
valid = GetValidityFlag()
|
valid = getValidityFlag()
|
||||||
option, valueCache = getValueCache(name, option, OptTypeStringArray)
|
option, valueCache = getValueCache(name, option, OptTypeStringArray)
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
value = valueCache.stringArrayVal
|
value = valueCache.stringArrayVal
|
||||||
|
@ -63,7 +63,7 @@ func (cs *safe) GetAsStringArray(name string, fallback []string) StringArrayOpti
|
||||||
|
|
||||||
// GetAsInt returns a function that returns the wanted int with high performance.
|
// GetAsInt returns a function that returns the wanted int with high performance.
|
||||||
func (cs *safe) GetAsInt(name string, fallback int64) IntOption {
|
func (cs *safe) GetAsInt(name string, fallback int64) IntOption {
|
||||||
valid := GetValidityFlag()
|
valid := getValidityFlag()
|
||||||
option, valueCache := getValueCache(name, nil, OptTypeInt)
|
option, valueCache := getValueCache(name, nil, OptTypeInt)
|
||||||
value := fallback
|
value := fallback
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
|
@ -75,7 +75,7 @@ func (cs *safe) GetAsInt(name string, fallback int64) IntOption {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if !valid.IsSet() {
|
if !valid.IsSet() {
|
||||||
valid = GetValidityFlag()
|
valid = getValidityFlag()
|
||||||
option, valueCache = getValueCache(name, option, OptTypeInt)
|
option, valueCache = getValueCache(name, option, OptTypeInt)
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
value = valueCache.intVal
|
value = valueCache.intVal
|
||||||
|
@ -89,7 +89,7 @@ func (cs *safe) GetAsInt(name string, fallback int64) IntOption {
|
||||||
|
|
||||||
// GetAsBool returns a function that returns the wanted int with high performance.
|
// GetAsBool returns a function that returns the wanted int with high performance.
|
||||||
func (cs *safe) GetAsBool(name string, fallback bool) BoolOption {
|
func (cs *safe) GetAsBool(name string, fallback bool) BoolOption {
|
||||||
valid := GetValidityFlag()
|
valid := getValidityFlag()
|
||||||
option, valueCache := getValueCache(name, nil, OptTypeBool)
|
option, valueCache := getValueCache(name, nil, OptTypeBool)
|
||||||
value := fallback
|
value := fallback
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
|
@ -101,7 +101,7 @@ func (cs *safe) GetAsBool(name string, fallback bool) BoolOption {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
defer lock.Unlock()
|
defer lock.Unlock()
|
||||||
if !valid.IsSet() {
|
if !valid.IsSet() {
|
||||||
valid = GetValidityFlag()
|
valid = getValidityFlag()
|
||||||
option, valueCache = getValueCache(name, option, OptTypeBool)
|
option, valueCache = getValueCache(name, option, OptTypeBool)
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
value = valueCache.boolVal
|
value = valueCache.boolVal
|
||||||
|
|
|
@ -52,7 +52,7 @@ func getValueCache(name string, option *Option, requestedType uint8) (*Option, *
|
||||||
|
|
||||||
// GetAsString returns a function that returns the wanted string with high performance.
|
// GetAsString returns a function that returns the wanted string with high performance.
|
||||||
func GetAsString(name string, fallback string) StringOption {
|
func GetAsString(name string, fallback string) StringOption {
|
||||||
valid := GetValidityFlag()
|
valid := getValidityFlag()
|
||||||
option, valueCache := getValueCache(name, nil, OptTypeString)
|
option, valueCache := getValueCache(name, nil, OptTypeString)
|
||||||
value := fallback
|
value := fallback
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
|
@ -61,7 +61,7 @@ func GetAsString(name string, fallback string) StringOption {
|
||||||
|
|
||||||
return func() string {
|
return func() string {
|
||||||
if !valid.IsSet() {
|
if !valid.IsSet() {
|
||||||
valid = GetValidityFlag()
|
valid = getValidityFlag()
|
||||||
option, valueCache = getValueCache(name, option, OptTypeString)
|
option, valueCache = getValueCache(name, option, OptTypeString)
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
value = valueCache.stringVal
|
value = valueCache.stringVal
|
||||||
|
@ -75,7 +75,7 @@ func GetAsString(name string, fallback string) StringOption {
|
||||||
|
|
||||||
// GetAsStringArray returns a function that returns the wanted string with high performance.
|
// GetAsStringArray returns a function that returns the wanted string with high performance.
|
||||||
func GetAsStringArray(name string, fallback []string) StringArrayOption {
|
func GetAsStringArray(name string, fallback []string) StringArrayOption {
|
||||||
valid := GetValidityFlag()
|
valid := getValidityFlag()
|
||||||
option, valueCache := getValueCache(name, nil, OptTypeStringArray)
|
option, valueCache := getValueCache(name, nil, OptTypeStringArray)
|
||||||
value := fallback
|
value := fallback
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
|
@ -84,7 +84,7 @@ func GetAsStringArray(name string, fallback []string) StringArrayOption {
|
||||||
|
|
||||||
return func() []string {
|
return func() []string {
|
||||||
if !valid.IsSet() {
|
if !valid.IsSet() {
|
||||||
valid = GetValidityFlag()
|
valid = getValidityFlag()
|
||||||
option, valueCache = getValueCache(name, option, OptTypeStringArray)
|
option, valueCache = getValueCache(name, option, OptTypeStringArray)
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
value = valueCache.stringArrayVal
|
value = valueCache.stringArrayVal
|
||||||
|
@ -98,7 +98,7 @@ func GetAsStringArray(name string, fallback []string) StringArrayOption {
|
||||||
|
|
||||||
// GetAsInt returns a function that returns the wanted int with high performance.
|
// GetAsInt returns a function that returns the wanted int with high performance.
|
||||||
func GetAsInt(name string, fallback int64) IntOption {
|
func GetAsInt(name string, fallback int64) IntOption {
|
||||||
valid := GetValidityFlag()
|
valid := getValidityFlag()
|
||||||
option, valueCache := getValueCache(name, nil, OptTypeInt)
|
option, valueCache := getValueCache(name, nil, OptTypeInt)
|
||||||
value := fallback
|
value := fallback
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
|
@ -107,7 +107,7 @@ func GetAsInt(name string, fallback int64) IntOption {
|
||||||
|
|
||||||
return func() int64 {
|
return func() int64 {
|
||||||
if !valid.IsSet() {
|
if !valid.IsSet() {
|
||||||
valid = GetValidityFlag()
|
valid = getValidityFlag()
|
||||||
option, valueCache = getValueCache(name, option, OptTypeInt)
|
option, valueCache = getValueCache(name, option, OptTypeInt)
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
value = valueCache.intVal
|
value = valueCache.intVal
|
||||||
|
@ -121,7 +121,7 @@ func GetAsInt(name string, fallback int64) IntOption {
|
||||||
|
|
||||||
// GetAsBool returns a function that returns the wanted int with high performance.
|
// GetAsBool returns a function that returns the wanted int with high performance.
|
||||||
func GetAsBool(name string, fallback bool) BoolOption {
|
func GetAsBool(name string, fallback bool) BoolOption {
|
||||||
valid := GetValidityFlag()
|
valid := getValidityFlag()
|
||||||
option, valueCache := getValueCache(name, nil, OptTypeBool)
|
option, valueCache := getValueCache(name, nil, OptTypeBool)
|
||||||
value := fallback
|
value := fallback
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
|
@ -130,7 +130,7 @@ func GetAsBool(name string, fallback bool) BoolOption {
|
||||||
|
|
||||||
return func() bool {
|
return func() bool {
|
||||||
if !valid.IsSet() {
|
if !valid.IsSet() {
|
||||||
valid = GetValidityFlag()
|
valid = getValidityFlag()
|
||||||
option, valueCache = getValueCache(name, option, OptTypeBool)
|
option, valueCache = getValueCache(name, option, OptTypeBool)
|
||||||
if valueCache != nil {
|
if valueCache != nil {
|
||||||
value = valueCache.boolVal
|
value = valueCache.boolVal
|
||||||
|
|
|
@ -19,8 +19,8 @@ var (
|
||||||
validityFlagLock sync.RWMutex
|
validityFlagLock sync.RWMutex
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetValidityFlag returns a flag that signifies if the configuration has been changed. This flag must not be changed, only read.
|
// getValidityFlag returns a flag that signifies if the configuration has been changed. This flag must not be changed, only read.
|
||||||
func GetValidityFlag() *abool.AtomicBool {
|
func getValidityFlag() *abool.AtomicBool {
|
||||||
validityFlagLock.RLock()
|
validityFlagLock.RLock()
|
||||||
defer validityFlagLock.RUnlock()
|
defer validityFlagLock.RUnlock()
|
||||||
return validityFlag
|
return validityFlag
|
||||||
|
|
30
config/validity.go
Normal file
30
config/validity.go
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/tevino/abool"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ValidityFlag is a flag that signifies if the configuration has been changed. It is not safe for concurrent use.
|
||||||
|
type ValidityFlag struct {
|
||||||
|
flag *abool.AtomicBool
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewValidityFlag returns a flag that signifies if the configuration has been changed.
|
||||||
|
func NewValidityFlag() *ValidityFlag {
|
||||||
|
vf := &ValidityFlag{}
|
||||||
|
vf.Refresh()
|
||||||
|
return vf
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsValid returns if the configuration is still valid.
|
||||||
|
func (vf *ValidityFlag) IsValid() bool {
|
||||||
|
return vf.flag.IsSet()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh refreshes the flag and makes it reusable.
|
||||||
|
func (vf *ValidityFlag) Refresh() {
|
||||||
|
validityFlagLock.RLock()
|
||||||
|
defer validityFlagLock.RUnlock()
|
||||||
|
|
||||||
|
vf.flag = validityFlag
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue