diff --git a/docs/CODE_STYLE.md b/docs/CODE_STYLE.md new file mode 100644 index 0000000..e30fc6c --- /dev/null +++ b/docs/CODE_STYLE.md @@ -0,0 +1,33 @@ +# Naming + +## Functions + +Functions (and methods) use `PascalCase`. +Functions (but not methods) exposed in headers additionally use the prefix `rt`: `rtLoadResource`. + +## Types + +Types (including C++ clases) use `snake_case`. +Types exposed in header files use the prefix `rt_`: `rt_aio_handle`. +This is often also done for "private" types in C/C++ files, but there it is not mandatory. + +## Variables + +Variables use `snake_case`. +Global variables use the prefix `g_`, while file-scope global variables use a single underscore as their prefix `_`. +Member variables of C++ classes (but not plain-old data C structs) use the prefix `m_`. + +## Macros + +Macros use `ALL_UPPER_CASE` with the `RT_` prefix. +This is also used for enum options. + +## API and Interface Structs + +API structs (like `rt_render_backend_api`) are collections of function pointers, +without any "object pointer" containing wrapped state. +They use the suffix `_api`. + +Interface structs (like `rt_render_device_i`) also contain function pointers, +and additionally an "object pointer", usually called `o`, that points to some +stateful object. The function pointers in the interface usually take this object as their first parameter.