hibiscus/CODINGSTYLE.md

2 KiB

Hibis Coding Standards

CXX Language

Use C++17 as the C++ standard. Hibis should compile under all major compilers.

Structure

Each module of the game engine should be kept within their specific folders. E.g.:

  • Core
  • Renderer/(renderer name) If statically linking third party libraries are absolutely required, they must be placed in a folder called external in the repository root.

Formatting

Files need to end with a new line.
Indenting should be done using hard tabs (the tab character) rather than spaces.
New lines should be after { with the exception of class/struct construction which has no newlines at all.
There should be one class per file.

Includes

#include uses must go in the following order (with each section seperated by an extra newline):

#include <system-header>

// From Hibis
#include <hibis-header>

// Use header in current dir
#include "relative-header"

.. should be avoided within "relative" headers in the event it causes issues for packagers.
Include guards should be handled via #pragma once.

Variables

Variables should be camelCase and be named to make it obvious what their purpose is.
Variables should be prefixed with specific chars depending on where the variable is.

  • Member Variable - Prefix with m
  • Global Variable - Prefix with g
  • Static Variable - Prefix with s Example:
const int gAmountOfTimesISuccessfullyWriteGoodVariableNames = 0;

class ExampleClass final {
public:
	ExampleClass() {}
	~ExampleClass() {}

	// dont ask
	void hmmmTimeToScream() {
		std::cout << "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa" << std::endl;
	}
private:
	std::string mMyName = "Example Class";
}

Classes

If a class is not going to be used/intended to be used for polymorphism, mark it as a final class.
Base classes should make all functions virtual to allow for functions to be overriden.
Simple set/get functions should be inside of the header file on a single line.
Class names should be in PascalCase and be obvious what their purpose is.