diff --git a/projectnetwork.go b/projectnetwork.go index 13559ea..0f5c655 100644 --- a/projectnetwork.go +++ b/projectnetwork.go @@ -78,29 +78,30 @@ func (g *projectNetwork) backwardPass(toposort []*activity) { // setEarlyTimes sets the early times for an activity func (g *projectNetwork) setEarlyTimes(a *activity) { - es := 0.0 predecessors := g.To(a.ID()) for predecessors.Next() { p := predecessors.Node().(*activity) - es = math.Max(es, p.earlyFinish) + if a.earlyStart < p.earlyFinish { + a.earlyStart = p.earlyFinish + } } - a.earlyStart = es a.earlyFinish = a.earlyStart + a.duration } // setLateTimes sets the late times for an activity func (g *projectNetwork) setLateTimes(a *activity) { - lf := math.Inf(1) + a.lateFinish = math.Inf(1) successors := g.From(a.ID()) for successors.Next() { s := successors.Node().(*activity) - lf = math.Min(lf, s.lateStart) + if a.lateFinish > s.lateStart { + a.lateFinish = s.lateStart + } } - if lf == math.Inf(1) { - lf = a.earlyFinish + if a.lateFinish == math.Inf(1) { + a.lateFinish = a.earlyFinish } - a.lateFinish = lf a.lateStart = a.lateFinish - a.duration a.slack = a.lateFinish - a.earlyFinish }