Pomerol 2.0 Roadmap
===================

Here is a list of questions to be answered and tasks to be completed before the
`v2.0-devel` branch can be merged into `master`.

- [ ] Make a single unit test (`GF4siteTest`) fully compile and give
      correct results for the single-particle Green's function.

- [ ] Discuss the proposed overhaul of the input layer API using the ported
      unit test as a proof of concept. Make adjustments to the API as needed.

- [ ] Port the remaining parts of `libpomerol` (`TwoParticleGF`,
      `Vertex4`, `Susceptibility`, `EnsembleAverage`) to the new API.

- [ ] Rework (remove?) the `Lattice` class and turn `LatticePresets` into a
      namespace. The preset functions should probably just return
      `libcommute::expression` objects.

- [ ] Decide what to do about the `ENABLE_SAVE_PLAINTEXT` macro.

- [ ] Decide whether we want to stick with include guards or to switch to
      `#pragma once`.

- [ ] Replace GoogleTest with [Catch2](https://github.com/catchorg/Catch2).

- [ ] Port the rest of the unit tests and programs.

- [ ] Clean up the code by removing unused functions, typedefs and macros.

- [ ] Ensure that all necessary (and only necessary) includes are present and
      are listed in the right order.

- [ ] Modernize C++ code:

    * Use smart pointers instead of raw pointers to fix memory leaks;
    * Change type alias syntax from `typedef` to `using`;
    * Use `auto` instead of lengthy type expressions (iterators and alike);
    * Revise all exception types;
    * Fix other problems detected by `clang-tidy` and `cppcheck`.

- [ ] Add missing Doxygen comments and update the outdated ones.

- [ ] Adopt `clang-format`, devise a configuration file for it and reformat
      sources.

- [ ] Add GPL headers to the source files.

- [ ] Decide whether we want to require *libcommute* as an external
      dependency, or to bundle in to the sources / add it as a git submodule.

Add a roadmap to Pomerol 2.0
Add a roadmap to Pomerol 2.0
