Files
obitools4/pkg/obitax/inner.go

50 lines
1.1 KiB
Go
Raw Normal View History

2024-11-08 09:48:16 +01:00
package obitax
import "sync"
// InnerString is a struct that holds a map of strings and a read-write lock for concurrent access.
// The index map is used to store key-value pairs of strings.
type InnerString struct {
2024-11-14 19:10:23 +01:00
index map[string]*string
2024-11-08 09:48:16 +01:00
lock sync.RWMutex
}
// NewInnerString creates a new instance of InnerString.
// The lock is set to false.
func NewInnerString() *InnerString {
return &InnerString{
2024-11-14 19:10:23 +01:00
index: make(map[string]*string),
2024-11-08 09:48:16 +01:00
}
}
// Innerize stores the given value in the index map if it is not already present.
// It returns the value associated with the key, which is either the newly stored value
// or the existing value if it was already present in the map.
//
// Parameters:
// - value: The string value to be stored in the index map.
//
// Returns:
// - The string value associated with the key.
2024-11-14 19:10:23 +01:00
func (i *InnerString) Innerize(value string) *string {
2024-11-08 09:48:16 +01:00
i.lock.Lock()
defer i.lock.Unlock()
s, ok := i.index[value]
if !ok {
2024-11-14 19:10:23 +01:00
s = &value
i.index[value] = s
2024-11-08 09:48:16 +01:00
}
return s
}
func (i *InnerString) Slice() []string {
rep := make([]string, len(i.index))
j := 0
for _, v := range i.index {
2024-11-14 19:10:23 +01:00
rep[j] = *v
2024-11-08 09:48:16 +01:00
j++
}
return rep
}