Reworked init method of KGPZ

This commit is contained in:
Simon Martens
2025-01-10 01:14:54 +01:00
parent b65da464bb
commit 54ce05a67c
4 changed files with 73 additions and 86 deletions

View File

@@ -8,8 +8,9 @@ import (
)
type Resolver[T XMLItem] struct {
index map[string]map[string][]Resolved[T] // Map[typeName][refID] -> []*T
mu sync.RWMutex // Synchronization for thread safety
// INFO: map[type][ID]
index map[string]map[string][]Resolved[T]
mu sync.RWMutex
}
func NewResolver[T XMLItem]() *Resolver[T] {

View File

@@ -60,8 +60,8 @@ func NewXMLProvider[T XMLItem]() *XMLProvider[T] {
func (p *XMLProvider[T]) Prepare() {
p.mu.Lock()
defer p.mu.Unlock()
// INFO: We take 1000 here as to not reallocate the memory as mutch.
p.Array = make([]T, 0, 1000)
p.Array = make([]T, 0, len(p.Array))
p.Resolver.Clear()
}
@@ -72,8 +72,6 @@ func (p *XMLProvider[T]) Serialize(dataholder XMLRootElement[T], path string, la
return err
}
p.mu.Lock()
defer p.mu.Unlock()
newItems := dataholder.Children()
for _, item := range newItems {
@@ -86,6 +84,8 @@ func (p *XMLProvider[T]) Serialize(dataholder XMLRootElement[T], path string, la
p.addResolvable(item)
}
p.mu.Lock()
defer p.mu.Unlock()
p.Array = append(p.Array, newItems...)
return nil
}
@@ -94,9 +94,6 @@ func (p *XMLProvider[T]) Serialize(dataholder XMLRootElement[T], path string, la
// It deletes all items that have not been parsed in the last commit,
// and whose filepath has not been marked as failed.
func (p *XMLProvider[T]) Cleanup(latest ParseMeta) {
p.mu.Lock()
defer p.mu.Unlock()
todelete := make([]string, 0)
toappend := make([]*T, 0)
p.Infos.Range(func(key, value interface{}) bool {
@@ -122,6 +119,8 @@ func (p *XMLProvider[T]) Cleanup(latest ParseMeta) {
p.Items.Delete(key)
}
p.mu.Lock()
defer p.mu.Unlock()
for _, item := range toappend {
p.Array = append(p.Array, *item)
p.addResolvable(*item)