Alien’s Coding Style

Naming

  • CamelCase for c++ objects

  • underscore_separator_and_no_capital for filenames

C++

Alien is (at the moment) a C++ library. We follow directives of Arcane, mainly:
  • C++14 code

  • Avoid passing parameters by reference (specially it is forbidden for all Array classes).

File Organization

Alien consists in different modules:
  • core

  • movesemantic

  • refsemantic

Modules are located in the src directory and each module is organized following this directory structure:
  • alien directory, that mimics header hierarchy and contains both header files and source files

  • tests directory, that contains unit tests for this module.

.
├── CMake
├── docker             # Contains docker images for CI and development
├── docs               # Documentation and examples   ├── sphinx   # This Sphinx documentation   └── tutorial # Alien's tutorial
├── framework          # Arccon and Arccore for embedded build   ├── arccon   # Arccon   ├── arccore  # Arccore   └── CMake    # CMake glue for find_package to work with embedded
├── plugins            # Alien's backend   ├── hypre
│   └── petsc
└── src                # Alien's sources
   ├── core            # Alien core module
      ├── alien # Sources for `core` module
      └── tests # Unit tests for `core` module
   ├── movesemantic    # `move` API
      ├── alien # Sources for `move` API
      └── tests # Unit tests for `move`
   ├── refsemantic     # `ref` API
      ├── alien # Sources for `ref` API
      └── tests # Unit tests for `ref`
   └── test_framework  # Unit test framework