changeset 3114:c68cef0346b7

Display Available Fairway Depths: Introduced type to re-use code from Available Fairway Depths vs. LNWL.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 28 Apr 2019 15:26:14 +0200
parents b7673a704b0a
children 524bc6545b20
files pkg/controllers/bottlenecks.go
diffstat 1 files changed, 24 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/controllers/bottlenecks.go	Fri Apr 26 11:44:05 2019 +0200
+++ b/pkg/controllers/bottlenecks.go	Sun Apr 28 15:26:14 2019 +0200
@@ -91,11 +91,20 @@
 		depth int
 		value int
 	}
+
+	availMeasurements []availMeasurement
 )
 
-func classifyAvailMeasurements(
+func (measurement *availMeasurement) getDepth() float64 {
+	return float64(measurement.depth)
+}
+
+func (measurement *availMeasurement) getValue() float64 {
+	return float64(measurement.value)
+}
+
+func (measurements availMeasurements) classifyAvailMeasurements(
 	from, to time.Time,
-	measurements []availMeasurement,
 	classes []referenceValue,
 	access func(*availMeasurement) float64,
 ) []time.Duration {
@@ -108,6 +117,12 @@
 	//var invalid time.Duration
 	result := make([]time.Duration, len(classes)+1)
 
+	if len(measurements) == 0 ||
+		to.Before(measurements[0].when) ||
+		from.After(measurements[len(measurements)-1].when) {
+		return result
+	}
+
 	cvs := make([]classValues, len(classes))
 
 	classify := func(v func(float64) (time.Time, common.ValueRangeKind)) {
@@ -336,7 +351,7 @@
 		}
 	}
 
-	loadDepthValues := func() ([]availMeasurement, error) {
+	loadDepthValues := func() (availMeasurements, error) {
 
 		rows, err := conn.QueryContext(
 			ctx, selectAvailableDepthSQL, bn, los, from, to)
@@ -345,7 +360,7 @@
 		}
 		defer rows.Close()
 
-		var ms []availMeasurement
+		var ms availMeasurements
 
 		for rows.Next() {
 			var m availMeasurement
@@ -363,7 +378,7 @@
 		return ms, nil
 	}
 
-	var ms []availMeasurement
+	var ms availMeasurements
 	if ms, err = loadDepthValues(); err != nil {
 		return
 	}
@@ -376,11 +391,10 @@
 		return
 	}
 
-	lnwl := classifyAvailMeasurements(
+	lnwl := ms.classifyAvailMeasurements(
 		from, to,
-		ms,
 		lnwlRefs,
-		func(m *availMeasurement) float64 { return float64(m.value) },
+		(*availMeasurement).getValue,
 	)
 
 	afdRefs := []referenceValue{
@@ -389,11 +403,10 @@
 		{2, 250},
 	}
 
-	afd := classifyAvailMeasurements(
+	afd := ms.classifyAvailMeasurements(
 		from, to,
-		ms,
 		afdRefs,
-		func(m *availMeasurement) float64 { return float64(m.depth) },
+		(*availMeasurement).getDepth,
 	)
 
 	lnwlPercents := durationsToPercentage(from, to, lnwl)