Visualizando todo grafo com anzograph
This commit is contained in:
40
backend_go/predicate_dict.go
Normal file
40
backend_go/predicate_dict.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package main
|
||||
|
||||
type PredicateDict struct {
|
||||
idByIRI map[string]uint32
|
||||
iriByID []string
|
||||
}
|
||||
|
||||
func NewPredicateDict(predicates []string) *PredicateDict {
|
||||
idByIRI := make(map[string]uint32, len(predicates))
|
||||
iriByID := make([]string, 0, len(predicates))
|
||||
for _, iri := range predicates {
|
||||
if iri == "" {
|
||||
continue
|
||||
}
|
||||
if _, ok := idByIRI[iri]; ok {
|
||||
continue
|
||||
}
|
||||
id := uint32(len(iriByID))
|
||||
idByIRI[iri] = id
|
||||
iriByID = append(iriByID, iri)
|
||||
}
|
||||
return &PredicateDict{idByIRI: idByIRI, iriByID: iriByID}
|
||||
}
|
||||
|
||||
func (d *PredicateDict) GetOrAdd(iri string) (uint32, bool) {
|
||||
if iri == "" {
|
||||
return 0, false
|
||||
}
|
||||
if id, ok := d.idByIRI[iri]; ok {
|
||||
return id, true
|
||||
}
|
||||
id := uint32(len(d.iriByID))
|
||||
d.idByIRI[iri] = id
|
||||
d.iriByID = append(d.iriByID, iri)
|
||||
return id, true
|
||||
}
|
||||
|
||||
func (d *PredicateDict) IRIs() []string {
|
||||
return d.iriByID
|
||||
}
|
||||
Reference in New Issue
Block a user