-
Notifications
You must be signed in to change notification settings - Fork 13
/
CODINGSTYLE
84 lines (66 loc) · 4.17 KB
/
CODINGSTYLE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
@page codingstyle Coding style
LHAPDF C++ CODING STYLE
=======================
A short guide for developers and patch suppliers on the C++ coding style used in
LHAPDF >= 6.
- The basic style is the ["one true brace style"](http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS).
The exception is for constructors with initialisation lists, in which case the
function body should be opened by a brace on its own on a new line, rather
than the brace trailing the init list entries.
- Indent! The standard indent size in the current code is two spaces. Do not
indent with tab characters.
- Infix operators like = (assignment), logical comparators (==, !=, >, <, >=,
etc.), + and -, and all arithmetic modifying operators (+=, -=, *=, /=) should
be separated from their arguments on either side by a single space. Spaces are
cheap, the time taken to decipher hyper-compressed code is not! The * and /
operators should be padded like this if it aids readability, but not
otherwise: it is useful to visually distinguish addition of terms from the
multiplications/divisions which compose them.
- The parenthetical condition statement of an "if", "for", "while", etc. block
should be separated from the "if" etc. keyword and from the opening brace of
the block by one space. The contents of the parenthesis should not be
space-padded, however, unless it is necessary for clarity (the same applies to
function arguments). For example, "if (foo > bar) { ...". Again, spaces are
cheap: use them.
- Braces are encouraged around all but the most trivial control blocks: if you
cannot put the one-line block content on the *same* line as the block
condition statement, or if there is any visual ambiguity about which lines are
in the block body, add braces.
- if-statement and exception continuations should normally be on the same line
as the delimiting braces in 1TBS fashion, e.g. "} else {", "} else if (foo !=
bar) {", etc.
- All code should be in the LHAPDF namespace. In .cc files, unnamed namespaces
should be used to hide implementation detail functions from public/ABI view.
- Class names are in CamelCase format, and method and function names in
lowerCamelCase. In the class names "PDF" is always kept fully capitalised,
while in method and function names it may appear as "pdf" or "Pdf" depending
on context: try to be consistent with the "local environment". Private or
protected members, or more generally any API element not designed for public
use should start with a leading underscore, cf. _implementationDetail.
- Separate blocks within functions by a blank line, separate functions by two
blank lines, and separate class definitions by 3 blank lines. Two blank lines
of separation should be left between the main LHAPDF namespace opening and
closing braces and the first and last code lines in the namespace. These are
just guidelines: if more lines of separation than these nominals are needed
for visual clearance of distinct code elements, add more: blank lines are also
pretty cheap, but don't go crazy or you'll hardly be able to fit any lines of
active code on your screen!
- Use the specialised LHAPDF exceptions from LHAPDF/Exceptions.h. Exceptions
should be used rather than asserts unless there is absolutely no way that the
tested condition could happen other than a bug in the system: the user should
be able to catch their own errors.
- We don't rely on external libraries for core functionality. Get a feel for
what is available in the LHAPDF/Utils.h header: do not reinvent the wheel.
- "Flavour" is spelt the American way, "flavor" in all places in the code, for
definiteness.
- Use comments! Describe what sections of not-immediately-clear code do in as
clear and concise a way as possible, preferably on one line. In header files
use Doxygen /// comments and operators with an @ delimiter (particularly "@todo")
to describe the meanings of classes, methods, their arguments, etc. While writing
code it's often best to leave some details until later -- mark these with a
"@todo" operator and a description of the missing feature: these will be collected
into a helpful list by Doxygen.
- If in doubt, ask!
THANKS FOR READING :-)
*/