From 8fe63cca536dd88025f3bde2075c1b1747c3d5fe Mon Sep 17 00:00:00 2001 From: PhasicFlow <113092888+PhasicFlow@users.noreply.github.com> Date: Mon, 24 Mar 2025 14:45:05 +0330 Subject: [PATCH] Create codingStyle.md --- doc/mdDocs/codingStyle.md | 111 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 doc/mdDocs/codingStyle.md diff --git a/doc/mdDocs/codingStyle.md b/doc/mdDocs/codingStyle.md new file mode 100644 index 00000000..0bc3cf69 --- /dev/null +++ b/doc/mdDocs/codingStyle.md @@ -0,0 +1,111 @@ +# PhasicFlow Coding Style Guidelines +This document outlines the coding style guidelines for the PhasicFlow codebase. +Adhering to these guidelines ensures consistency, readability, and maintainability of the project. +## 1. FormattingIndentation: +* Use 4 spaces for every logical level and block. +* Line Spacing: Leave two empty lines between sections (e.g., between functions in a .cpp file, between class members). + +## 2. Naming ConventionsGeneral Naming: +* All names should start with lowercase letters, except for special names (e.g., Ergun, Hertz). +* Macro names start with Upper case or all the letters are in UPPER case. +* Compound Names: For compound names, the first word starts with a lowercase letter, and subsequent words start with an uppercase letter (e.g., boundaryBase, motionModel). + +## 3. File Structure +* Header Files: Use the .hpp extension for header files. +* Source Files: Use the .cpp extension for source files. +* Header and Source File Headers: All header and source files must include a standardized header that describes the project's intention and licensing information. +* File Naming: Header and source file names should correspond to the class they contain. Aim for one class per file. +* Inline Functions: Place inline functions in a separate classNameI.hpp file to avoid cluttering the main header file. + +## 4. Class DesignClass Member Order: +* Private members and methods +* Private static members and methods +* Public methods +* Public static methods +* Enumerations and Nested Classes: Declare enumerations and nested classes before all class members and methods. +* Special Functions: Each class must explicitly define all special functions:Constructor, Copy constructor and assignment operator, Move constructor and assignment operator +* Destructor: Each class must have an explicit destructor declaration:`~className() = default`; or `~className();` +* Interface classes or classes with virtual methods must have a virtual destructor. +* Virtual Method Overrides: When implementing a `virtual` method from a base class in a derived class, use the `override` keyword. The same applies to derived class destructors. +## 5. NamespacesOfficial Namespace: +The official namespace for the codebase is pFlow. All entities should be defined within this namespace. + +### Example File Structure +``` +src/ +├── componentName1/ +│ ├── componentName1.hpp +│ ├── componentName1.cpp +│ ├── componentName1I.hpp +│ └── ... +└── componentName2/ + ├── componentName2.hpp + ├── componentName2.cpp + └── ... +``` +### Example Class Structure +```C++ +namespace pFlow +{ + +class MyClass +{ +public: + enum class MyEnum + { + Value1, + Value2 + }; + + class NestedClass + { + // ... + }; + +private: + int privateMember_; + + void privateMethod(); + + + static int privateStaticMember_; + + static void privateStaticMethod(); + +public: + + MyClass(); + + MyClass(const MyClass& other); + + MyClass(MyClass&& other); + + MyClass& operator=(const MyClass& other); + + MyClass& operator=(MyClass&& other); + + ~MyClass(); + + + void publicMethod(); + + static void publicStaticMethod(); + +}; + +// assuming base class has virtual methods +class DerivedClass +: + public BaseClass +{ +public: + + ... + + ~DerivedClass() override; + + void virtualMethod() override; +}; + +} // namespace pFlow +```