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.
|
||||
func (cs *safe) GetAsString(name string, fallback string) StringOption {
|
||||
valid := GetValidityFlag()
|
||||
valid := getValidityFlag()
|
||||
option, valueCache := getValueCache(name, nil, OptTypeString)
|
||||
value := fallback
|
||||
if valueCache != nil {
|
||||
|
@ -23,7 +23,7 @@ func (cs *safe) GetAsString(name string, fallback string) StringOption {
|
|||
lock.Lock()
|
||||
defer lock.Unlock()
|
||||
if !valid.IsSet() {
|
||||
valid = GetValidityFlag()
|
||||
valid = getValidityFlag()
|
||||
option, valueCache = getValueCache(name, option, OptTypeString)
|
||||
if valueCache != nil {
|
||||
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.
|
||||
func (cs *safe) GetAsStringArray(name string, fallback []string) StringArrayOption {
|
||||
valid := GetValidityFlag()
|
||||
valid := getValidityFlag()
|
||||
option, valueCache := getValueCache(name, nil, OptTypeStringArray)
|
||||
value := fallback
|
||||
if valueCache != nil {
|
||||
|
@ -49,7 +49,7 @@ func (cs *safe) GetAsStringArray(name string, fallback []string) StringArrayOpti
|
|||
lock.Lock()
|
||||
defer lock.Unlock()
|
||||
if !valid.IsSet() {
|
||||
valid = GetValidityFlag()
|
||||
valid = getValidityFlag()
|
||||
option, valueCache = getValueCache(name, option, OptTypeStringArray)
|
||||
if valueCache != nil {
|
||||
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.
|
||||
func (cs *safe) GetAsInt(name string, fallback int64) IntOption {
|
||||
valid := GetValidityFlag()
|
||||
valid := getValidityFlag()
|
||||
option, valueCache := getValueCache(name, nil, OptTypeInt)
|
||||
value := fallback
|
||||
if valueCache != nil {
|
||||
|
@ -75,7 +75,7 @@ func (cs *safe) GetAsInt(name string, fallback int64) IntOption {
|
|||
lock.Lock()
|
||||
defer lock.Unlock()
|
||||
if !valid.IsSet() {
|
||||
valid = GetValidityFlag()
|
||||
valid = getValidityFlag()
|
||||
option, valueCache = getValueCache(name, option, OptTypeInt)
|
||||
if valueCache != nil {
|
||||
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.
|
||||
func (cs *safe) GetAsBool(name string, fallback bool) BoolOption {
|
||||
valid := GetValidityFlag()
|
||||
valid := getValidityFlag()
|
||||
option, valueCache := getValueCache(name, nil, OptTypeBool)
|
||||
value := fallback
|
||||
if valueCache != nil {
|
||||
|
@ -101,7 +101,7 @@ func (cs *safe) GetAsBool(name string, fallback bool) BoolOption {
|
|||
lock.Lock()
|
||||
defer lock.Unlock()
|
||||
if !valid.IsSet() {
|
||||
valid = GetValidityFlag()
|
||||
valid = getValidityFlag()
|
||||
option, valueCache = getValueCache(name, option, OptTypeBool)
|
||||
if valueCache != nil {
|
||||
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.
|
||||
func GetAsString(name string, fallback string) StringOption {
|
||||
valid := GetValidityFlag()
|
||||
valid := getValidityFlag()
|
||||
option, valueCache := getValueCache(name, nil, OptTypeString)
|
||||
value := fallback
|
||||
if valueCache != nil {
|
||||
|
@ -61,7 +61,7 @@ func GetAsString(name string, fallback string) StringOption {
|
|||
|
||||
return func() string {
|
||||
if !valid.IsSet() {
|
||||
valid = GetValidityFlag()
|
||||
valid = getValidityFlag()
|
||||
option, valueCache = getValueCache(name, option, OptTypeString)
|
||||
if valueCache != nil {
|
||||
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.
|
||||
func GetAsStringArray(name string, fallback []string) StringArrayOption {
|
||||
valid := GetValidityFlag()
|
||||
valid := getValidityFlag()
|
||||
option, valueCache := getValueCache(name, nil, OptTypeStringArray)
|
||||
value := fallback
|
||||
if valueCache != nil {
|
||||
|
@ -84,7 +84,7 @@ func GetAsStringArray(name string, fallback []string) StringArrayOption {
|
|||
|
||||
return func() []string {
|
||||
if !valid.IsSet() {
|
||||
valid = GetValidityFlag()
|
||||
valid = getValidityFlag()
|
||||
option, valueCache = getValueCache(name, option, OptTypeStringArray)
|
||||
if valueCache != nil {
|
||||
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.
|
||||
func GetAsInt(name string, fallback int64) IntOption {
|
||||
valid := GetValidityFlag()
|
||||
valid := getValidityFlag()
|
||||
option, valueCache := getValueCache(name, nil, OptTypeInt)
|
||||
value := fallback
|
||||
if valueCache != nil {
|
||||
|
@ -107,7 +107,7 @@ func GetAsInt(name string, fallback int64) IntOption {
|
|||
|
||||
return func() int64 {
|
||||
if !valid.IsSet() {
|
||||
valid = GetValidityFlag()
|
||||
valid = getValidityFlag()
|
||||
option, valueCache = getValueCache(name, option, OptTypeInt)
|
||||
if valueCache != nil {
|
||||
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.
|
||||
func GetAsBool(name string, fallback bool) BoolOption {
|
||||
valid := GetValidityFlag()
|
||||
valid := getValidityFlag()
|
||||
option, valueCache := getValueCache(name, nil, OptTypeBool)
|
||||
value := fallback
|
||||
if valueCache != nil {
|
||||
|
@ -130,7 +130,7 @@ func GetAsBool(name string, fallback bool) BoolOption {
|
|||
|
||||
return func() bool {
|
||||
if !valid.IsSet() {
|
||||
valid = GetValidityFlag()
|
||||
valid = getValidityFlag()
|
||||
option, valueCache = getValueCache(name, option, OptTypeBool)
|
||||
if valueCache != nil {
|
||||
value = valueCache.boolVal
|
||||
|
|
|
@ -19,8 +19,8 @@ var (
|
|||
validityFlagLock sync.RWMutex
|
||||
)
|
||||
|
||||
// GetValidityFlag returns a flag that signifies if the configuration has been changed. This flag must not be changed, only read.
|
||||
func GetValidityFlag() *abool.AtomicBool {
|
||||
// getValidityFlag returns a flag that signifies if the configuration has been changed. This flag must not be changed, only read.
|
||||
func getValidityFlag() *abool.AtomicBool {
|
||||
validityFlagLock.RLock()
|
||||
defer validityFlagLock.RUnlock()
|
||||
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