Although the majority of the library has been written by me, I'm always open to contributions from other people. There are always a number of features and enhancements that either I'd like to see, or have been suggested by other users, but I only have a finite amount of time to give.
I accept contributions both big and small; If you have an idea for a funky non-standard container that you think would complement the library, then let me know. If you just want to add an enhancement to an existing class, tell me about that too.
This is a very friendly project and I'm not going to start shouting at you if I see issues with your idea or code. If there is a problem we can have a dialog about what I think should change. Feel free to argue your case.
I am the dictator of what goes in to the ETL (but I see myself as a very benevolent dictator).
There are a number of jobs outstanding at the time of writing that could usefully be taken up whole, or in part, by someone else.
____________________________________________________________________________________________________
GitHub
If you wish to create a pull request to the ETL repository on GitHub then create your changes in a feature or hotfix branch that is based on master. When you think you have completed your modifications then raise a pull request.
If the change is in relation to an issue, prefix the issue number to the branch name.
#123-fix-foobar-algorithm
____________________________________________________________________________________________________
Project Style
I don't want to be any sort of style Nazi, but there are a few design rules that I ask you to try to adhere to.
Define the file id in file_error_numbers.h
#define ETL_STACK_FILE_ID "33"
____________________________________________________________________________________________________
Unit Tests
Every class or function that is in the library must be unit tested. Do not submit your code unless you have a full set of tests that exercise as much of the functionality as you can possibly think of. Make sure that you cover all of the corner cases.
There is a project file for VS2022 for C++14, 17, 20, and bash scripts that run the tests for C++11, 14, 17, 20 under Linux with GCC and Clang.
____________________________________________________________________________________________________
Bash Scripts
There are some bash scripts to test the ETL under Linux.
These scripts are run from the test directory.
____________________________________________________________________________________________________
run-tests.sh
Runs the set of unit tests with various options and compilers.
Syntax : ./runtests.sh <C++ Standard> <Optimisation> <Threads> <Sanitizer> <Compiler>
C++ Standard : 11, 14, 17 or 20 (mandatory argument)
Optimisation : 0, 1, 2 or 3. Default = 0
Threads : Number of threads to use. Default = 4
Sanitizer : s enables sanitizer checks, n disables. Default disabled
Compiler : gcc or clang. Default All compilers
____________________________________________________________________________________________________
run-syntax-checks.sh
Runs the set of header files through the compilers to test syntax correctness.
Syntax : ./runtests.sh <C++ Standard> <Threads>
C++ Standard : a, 03, 11, 14, 17 or 20. a = All standards
Threads : Number of threads to use. Default = 4
Compiler : gcc or clang. Default All compilers
____________________________________________________________________________________________________
Pull Requests
If you are adding or modifying a feature, add new unit tests that test that feature.
If you are fixing a bug, add a unit test that fails before the bug fix is implemented.
Do not initiate a pull request until all of the units tests pass.