{{lastupdated_at}} by {{lastupdated_by}} {{>toc}} h1. Naming conventions Strict naming conventions should be followed throughout GammaLib to make the library coherent, easy to use, and non-conflicting with other packages. h2. Classes GammaLib classes *shall* start with an upper case @G@, followed by a human understandable name of which the first letter is in upper case. Examples are
GEnergy
GModels
GEventBin
Derived classes names *should* be built by prepending a specification attribute to the base class name, e.g.
GEvent => GEventBin
GFitsImage => GFitsImageDouble
h2. Functions GammaLib functions names *should* be as close as possible to functions names used commonly in C++. For example, to take the sine of every element of a GammaLib vector, the @sin@ name is used:
GVector elements;
...
GVector sin_of_elements = gammalib::sin(elements);
This implies that GammaLib functions need to live in a proper namespace. The GammaLib namespace for functions is @gammalib@. h2. Global variables Global variables in GammaLib *should* start with @g_@. The rest of the name should be as descriptive and specific as possible. h2. Constants Constants used throughout GammaLib *shall* also be placed in the @gammalib@ namespace. h2. Using namespaces To avoid naming conflicts, GammaLib *shall* never use internally any @using@ directive, but *shall* always put the namespace in front of the function or constant.