From e0f39930452862d229cbcb3929b6e2bf96a26e79 Mon Sep 17 00:00:00 2001
From: Andrew Heather <>
Date: Fri, 20 May 2022 17:41:59 +0100
Subject: [PATCH] ENH: scalar - added readOrDefault(is, defaultValue) function

---
 src/OpenFOAM/primitives/Scalar/scalar/scalar.C | 18 ++++++++++++++++++
 src/OpenFOAM/primitives/Scalar/scalar/scalar.H |  6 ++++++
 2 files changed, 24 insertions(+)

diff --git a/src/OpenFOAM/primitives/Scalar/scalar/scalar.C b/src/OpenFOAM/primitives/Scalar/scalar/scalar.C
index 0038b1d6422..30b9127fc10 100644
--- a/src/OpenFOAM/primitives/Scalar/scalar/scalar.C
+++ b/src/OpenFOAM/primitives/Scalar/scalar/scalar.C
@@ -40,6 +40,24 @@ Foam::scalar Foam::readScalar(Istream& is)
 }
 
 
+Foam::scalar Foam::readScalarOrDefault(Istream& is, const scalar defaultValue)
+{
+    if (is.good())
+    {
+        token tok(is);
+
+        if (tok.isNumber())
+        {
+            return tok.scalarToken();
+        }
+
+        is.putBack(tok);
+    }
+
+    return defaultValue;
+}
+
+
 Foam::scalar Foam::readRawScalar(Istream& is)
 {
     scalar val(0);
diff --git a/src/OpenFOAM/primitives/Scalar/scalar/scalar.H b/src/OpenFOAM/primitives/Scalar/scalar/scalar.H
index 58bb002e981..cd5d1550433 100644
--- a/src/OpenFOAM/primitives/Scalar/scalar/scalar.H
+++ b/src/OpenFOAM/primitives/Scalar/scalar/scalar.H
@@ -103,6 +103,9 @@ namespace Foam
     //- Read scalar from stream.
     scalar readScalar(Istream& is);
 
+    //- Read scalar from stream if present or return default value
+    scalar readScalarOrDefault(Istream& is, const scalar defaultValue);
+
     //- Read raw scalar from binary stream.
     //  \note No internal check for binary vs ascii,
     //        the caller knows what they are doing
@@ -172,6 +175,9 @@ namespace Foam
     //- Read scalar from stream.
     scalar readScalar(Istream& is);
 
+    //- Read scalar from stream if present or return default value
+    scalar readScalarOrDefault(Istream& is, const scalar defaultValue);
+
     //- Read raw scalar from binary stream.
     //  \note No internal check for binary vs ascii,
     //        the caller knows what they are doing
-- 
GitLab