private int chainLength()

in prototype/dispatch/order-dispatcher/src/main/java/com/aws/proto/dispatching/domain/planningentity/v1/PlanningVisit.java [270:300]


    private int chainLength() {
        if (previousVisitOrDriver == null) {
            throw new IllegalStateException("This method must not be called when the previousTripOrVehicle is not initialized yet.");
        }

        VisitOrDriver current = this;
        int chainLength = 0;

        // D <- V1 <- [V2] <- V3 <- V4 <- null
        // V4.previousVisitOrDriver == V3 --->
        // ...
        // V1.previousTripOrVehicle == D ---> V1.getPlanningVehicle == V1.previousTripOrVehicle

        // count following visits (until next == null)
        while (current.getNextPlanningVisit() != null) {
            current = current.getNextPlanningVisit();
            chainLength++;
        }

        // reset current pointer to this
        current = this;

        // count previous visits (until prev == driver)
        while (current != null && current.getPlanningDriver() != current) {
            // --> typeof(prev) == PlanningVisit
            current = ((PlanningVisit) current).previousVisitOrDriver;
            chainLength++;
        }

        return chainLength;
    }