Coding style

Everything in wreport/*.h is considered public API, but everything in subdirectories should be considered private implementation details.

No headers in wreport/*.h can include headers in subdirectories. wreport/tests.h is the only exception, to include the test framework from utils/tests.h

The public API is supposed to be API and ABI stable. Implementation details are removed as much as possible from headers to make this easier.

Unit tests are collected in files *-test.cc which generally correspond to the module they are testing. The unit testing framework is contained inside wreport, and comes from https://github.com/spanezz/wobble

Documentation is automatically generated by doxygen.

C++ use tries to follow a "Do Not Call Up That Which You Cannot Put Down" rule of avoiding to use language features and abstraction layers unless they are really needed or make code significantly simpler.

Errors are reported through exceptions (see error.h). RAII is used (see for example wreport::notes::Collect) to simplify programming and ensure proper resource handling also in case of errors.

Memory management responsibilities are made obvious by the use of:

- references and const pointers, which implicitly deny pointer ownership transfer;
- std::unique_ptr to explictly mark ownership transfer (see wreport::Var::seta());
- documentation for all other cases.

Dependencies are kept to a bare minimum for ease of deploying.

The code is migrating from tab-indent to 4-spaces indent. To preserve useful diffs across VCS version, old code has not been reformatted, and gets reformatted only as code is otherwise modified.