obstetrics.dart 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import 'dart:math' as math;
  2. import 'package:fis_measure/configs/patient.dart';
  3. import 'package:fis_measure/interfaces/enums/species.dart';
  4. import 'package:fis_measure/utils/number.dart';
  5. class ObstetricsFormulas {
  6. ObstetricsFormulas._();
  7. static final IObstetricsFormulaStrategy _singleton =
  8. GlobalPatientConfig.speciesType != SpeciesType.mouseGeneral
  9. ? BaseObstetricsFormulas()
  10. : AnimalsObstetricsFormulas();
  11. static double gsMean(double d1, double d2, double d3) =>
  12. _singleton.gsMean(d1, d2, d3);
  13. static double gsMax(double d1, double d2, double d3) =>
  14. _singleton.gsMax(d1, d2, d3);
  15. }
  16. abstract class IObstetricsFormulaStrategy {
  17. double gsMean(double d1, double d2, double d3);
  18. double gsMax(double d1, double d2, double d3);
  19. }
  20. class BaseObstetricsFormulas implements IObstetricsFormulaStrategy {
  21. /// (D1 + D2 + D3)/3.0
  22. ///
  23. /// return Unit cm
  24. ///
  25. /// [d1] Unit cm
  26. ///
  27. /// [d2] Unit cm
  28. ///
  29. /// [d3] Unit cm
  30. @override
  31. double gsMean(double d1, double d2, double d3) {
  32. double mean = double.nan;
  33. if (!NumUtil.almostEquals(d1, 0) &&
  34. !NumUtil.almostEquals(d2, 0) &&
  35. !NumUtil.almostEquals(d3, 0)) {
  36. mean = (d1 + d2 + d3) / 3;
  37. }
  38. return mean;
  39. }
  40. ///Max(D1, D2, D3)
  41. @override
  42. double gsMax(double d1, double d2, double d3) {
  43. double max = double.nan;
  44. if (!(NumUtil.almostEquals(d1, 0) &&
  45. NumUtil.almostEquals(d2, 0) &&
  46. NumUtil.almostEquals(d3, 0))) {
  47. max = math.max(d1, math.max(d2, d3));
  48. }
  49. return max;
  50. }
  51. }
  52. class AnimalsObstetricsFormulas extends BaseObstetricsFormulas {}