The purpose of this repository is to act as a template and guide for the project structure which this project will adhere to. The project subscribes to the Google C++ Style Guide, available at: https://google.github.io/styleguide/cppguide.html and the repository additionally provides a guiding hand in following this coding standard. It is important to note however that this repository is not exhaustive nor is it kept up to date, always refer to: https://google.github.io/styleguide/cppguide.html for accurate information. The second source for this project, in situations which the first does not cover or is found ambigious, is: https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
- src: contains all source files (.cc) and their respective (private) header files (.h) (these are meant for internal use and are not meant for distribution to the public).
- include: contains all "public interface" headers, all the headers that are for public (external) consumption. (Will probably not be used).
- lib: contains all library files. (Will probably not be used).
- tests: contains all test files (unit tests, integration tests, etc).
- CMakeLists.txt: used to generate a Makefile (build system-independent).
- Makefile: used to compile all the code and get executable code (provided by the CMake file).
- build: all files generated by compilation should be here.
- docs: folder for documentation files.
- README.md: (the file you are currently viewing) should provide general project overview, contributors, stakeholders, contact information, dependencies and requirements, sponsors, instructions of how to use/install the project.
- .gitignore: files/directories that should be ignored are build, Makefile, generated.
- Please favor always using longer name for clarity rather than using unclear accronyms.
- File names: all lowercase and use _ for word seperation. C++ files end with .cc and headers with .h. Filenames should be very specific.
- Directory: all lowercase and use - for word seperation.
- All types including classes, struct, enums, type aliases, type templates, concept names: start with capital letter and have capital letter at the begining of each word.
- Variables: all lower case with _ for word seperation.
- See remaning in .cc and .h files.
The followng libraries must not be used:
- <ratio>
- <cfenv> and <fenv.h>
- <filesystem>
- <coroutine>
- Do not use any C++20 modules.
Check https://google.github.io/styleguide/cppguide.html for the libraries from Boost library collection which are allowed.