ref: b46eba214daa9a6ede179ed543033b0f3485ec2e
dir: /commitgraph/read/position.go/
package read
import (
"fmt"
"codeberg.org/lindenii/furgit/internal/intconv"
)
// Position identifies one commit record by layer and row index.
type Position struct {
Graph uint32
Index uint32
}
func (reader *Reader) globalToPosition(global uint32) (Position, error) {
for i := range reader.layers {
layer := &reader.layers[i]
from := layer.globalFrom
to := from + layer.numCommits
if global >= from && global < to {
graph, err := intconv.IntToUint32(i)
if err != nil {
return Position{}, err
}
return Position{
Graph: graph,
Index: global - from,
}, nil
}
}
return Position{}, &MalformedError{
Path: "commit-graph",
Reason: fmt.Sprintf("parent global position out of range: %d", global),
}
}