import 'dart:math' as math; import 'package:fis_measure/configs/patient.dart'; import 'package:fis_measure/interfaces/enums/species.dart'; import 'package:fis_measure/utils/number.dart'; class ObstetricsFormulas { ObstetricsFormulas._(); static final IObstetricsFormulaStrategy _singleton = GlobalPatientConfig.speciesType == SpeciesType.mouse ? BaseObstetricsFormulas() : AnimalsObstetricsFormulas(); static double gsMean(double d1, double d2, double d3) => _singleton.gsMean(d1, d2, d3); static double gsMax(double d1, double d2, double d3) => _singleton.gsMax(d1, d2, d3); } abstract class IObstetricsFormulaStrategy { double gsMean(double d1, double d2, double d3); double gsMax(double d1, double d2, double d3); } class BaseObstetricsFormulas implements IObstetricsFormulaStrategy { /// (D1 + D2 + D3)/3.0 /// /// return Unit cm /// /// [d1] Unit cm /// /// [d2] Unit cm /// /// [d3] Unit cm @override double gsMean(double d1, double d2, double d3) { double mean = double.nan; if (!NumUtil.almostEquals(d1, 0) && !NumUtil.almostEquals(d2, 0) && !NumUtil.almostEquals(d3, 0)) { mean = (d1 + d2 + d3) / 3; } return mean; } ///Max(D1, D2, D3) @override double gsMax(double d1, double d2, double d3) { double max = double.nan; if (!(NumUtil.almostEquals(d1, 0) && NumUtil.almostEquals(d2, 0) && NumUtil.almostEquals(d3, 0))) { max = math.max(d1, math.max(d2, d3)); } return max; } } class AnimalsObstetricsFormulas extends BaseObstetricsFormulas {}