From d8cf3901d3160e56b7f78700ee16a47aa5f4dd6c Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Tue, 27 Oct 2009 13:55:25 +0100
Subject: [PATCH] added doc/codingStyleGuide.org for central revision

---
 doc/codingStyleGuide.org | 275 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 275 insertions(+)
 create mode 100644 doc/codingStyleGuide.org

diff --git a/doc/codingStyleGuide.org b/doc/codingStyleGuide.org
new file mode 100644
index 00000000000..d9c5c3c9c66
--- /dev/null
+++ b/doc/codingStyleGuide.org
@@ -0,0 +1,275 @@
+#                            -*- mode: org; -*-
+#
+#+TITLE:                 OpenFOAM C++ style guide
+#+AUTHOR:                      OpenCFD Ltd.
+#+DATE:                       November 2009
+#+LINK:                  http://www.opencfd.co.uk
+#+OPTIONS: author:nil ^:{}
+
+* OpenFOAM C++ style guide
+
+*** General
+    + 80 character lines max
+    + The body of control statements (eg, if, else, while, etc).
+      always delineated with brace brackets
+
+    + stream output
+      << is always four characters after the start of the stream, so that the <<
+      symbols align, i.e.
+
+      Info<<
+      os  <<
+
+
+      so
+
+      WarningIn("className::functionName()")
+          << "Warning message"
+
+      NOT
+
+      WarningIn("className::functionName()")
+      << "Warning message"
+
+    + no unnecessary class section headers, i.e. remove
+
+      // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+      // Check
+
+      // Edit
+
+      // Write
+
+      if they contain nothing, even if planned for 'future use'
+
+    + class titles are centred
+
+     /*---------------------------------------------------------------------------*\
+                             Class exampleClass Declaration
+     \*---------------------------------------------------------------------------*/
+
+    NOT
+
+     /*---------------------------------------------------------------------------*\
+                    Class exampleClass Declaration
+     \*---------------------------------------------------------------------------*/
+
+*** .H Files
+    + header file spacing
+      Leave two empty lines between sections (as per functions in the .C file etc)
+
+    + use "//- Comment" comments in header file
+      + add descriptions to class data and functions
+    + destructor
+      If adding a comment to the destructor - use //- and code as a normal function:
+
+      //- Destructor
+      ~className();
+    + inline functions
+      Use inline functions where appropriate in a separate classNameI.H file.
+      Do not clutter up the header file with function bodies
+
+*** .C Files
+    + Do not open/close namespaces in a .C file
+      Fully scope the function name, i.e.
+
+      Foam::returnType Foam::className::functionName()
+
+      NOT
+
+      namespace Foam
+      {
+          ...
+
+          returnType className::functionName()
+
+          ...
+      }
+
+      EXCEPTION
+
+      When there are multiple levels of namespace, they may be used in the .C
+      file, i.e.
+
+      namespace Foam
+      {
+      namespace compressible
+      {
+      namespace RASModels
+      {
+
+          ...
+
+      } // End namespace RASModels
+      } // End namespace compressible
+      } // End namespace Foam
+
+    + Use two empty lines between functions
+
+*** Coding Practise
+    + passing data as arguments or return
+      Pass label and scalar as copy, anything bigger by reference
+    + const
+      Use everywhere it is applicable.
+    + variable initialisation using "="
+
+      const className& variableName = otherClass.data();
+
+      NOT
+
+      const className& variableName(otherClass.data());
+
+    + virtual functions
+      If a class is virtual - make all derived classes virtual.
+
+*** Conditional Statements
+    if (condition)
+    {
+        code;
+    }
+
+    OR
+
+    if
+    (
+       long condition
+    )
+    {
+        code;
+    }
+
+    NOT (no space between "if" and "(")
+
+    if(condition)
+    {
+        code;
+    }
+
+*** `for' Loops
+    for (i = 0; i < maxI; i++)
+    {
+        code;
+    }
+
+    OR
+
+    for
+    (
+        i = 0;
+        i < maxI;
+        i++
+    )
+    {
+        code;
+    }
+
+    NOT (no space between "for" and "(")
+
+    for(i = 0; i < maxI; i++)
+    {
+        code;
+    }
+
+*** `forAll' loops
+    like for loops, but
+
+    forAll(
+
+    NOT
+
+    forAll (
+
+*** Splitting Over Multiple Lines
+   + splitting return type and function name
+     + split initially after the function return type and left align
+
+     + do not put "const" onto it's own line - use a split to keep it with the
+       function name and arguments.
+
+     so:
+
+     const Foam::longReturnTypeName&
+     Foam::longClassName::longFunctionName const
+
+     NOT
+
+     const Foam::longReturnTypeName&
+         Foam::longClassName::longFunctionName const
+
+     NOR
+
+     const Foam::longReturnTypeName& Foam::longClassName::longFunctionName
+     const
+
+     NOR
+
+     const Foam::longReturnTypeName& Foam::longClassName::
+     longFunctionName const
+
+
+     + if need to split again, split at the function name (leaving behind the
+         preceding scoping "::"'s), and again, left align, i.e.
+
+       const Foam::longReturnTypeName&
+       Foam::veryveryveryverylongClassName::
+       veryveryveryverylongFunctionName const
+
+   + splitting long lines at an "="
+
+     Indent after split
+
+     variableName =
+         longClassName.longFunctionName(longArgument);
+
+     OR (where necessary)
+
+     variableName =
+         longClassName.longFunctionName
+         (
+             longArgument1,
+             longArgument2
+         );
+
+     NOT
+
+     variableName =
+     longClassName.longFunctionName(longArgument);
+
+     NOR
+
+     variableName = longClassName.longFunctionName
+     (
+         longArgument1,
+         longArgument2
+     );
+
+*** Maths and Logic
+    + operator spacing
+      + a + b, a - b
+      + a*b, a/b
+      + a & b, a ^ b
+      + a = b, a != b
+      + a < b, a > b, a >= b, a <= b
+      + a || b, a && b
+
+    + splitting formulae over several lines
+      Split and indent as per "splitting long lines at an "=""
+      with the operator on the lower line.  Align operator so that first
+      variable, function or bracket on the next line is 4 spaces indented i.e.
+
+      variableName =
+          a*(a + b)
+        - exp(c/d)
+         *(k + t)
+
+    + splitting logical tests over several lines
+
+      indent operator so that the next variable to test is aligned with the
+      four space indentation, i.e.
+
+      if
+      (
+          a == true
+       && b == c
+      )
-- 
GitLab