VCG Library Coding Guide

Naming Rules

Class names with first letter Uppercase and internal uppercase to separate compound words.

Function members of classes follow the same rule.

Example:

Point3f

{

public:

ScalarType &V(const int i);

}

Public Variable members has the first letter lowercase and internal uppercase to separate compound words.

Example:


Private Variable members has an underscore as first char and the first letter lowercase and internal uppercase to separate compound words.

Example:

Point3f

{

private:

ScalarType _v[3];

}

Class Template Arguments all capitalized and with names remembering where they have been defined.

TypeDefs used for templated Class arguments just like Class Names, but ending with “Type”

Example:

Point3f::ScalarType

Header Files

Header filenames and folders are always fully lower case. Compound names are separated by '_'.

Example:

#include<vcg/space/point3.h>

Each file of the library has to include all the files that it requires. A include file should relies on the files included by its include files. Example: in vcg/space/box3.h:


#include<vcg/math/base.h> // not necessary becouse included by point3.h

#include<vcg/space/point3.h>


In Class definitions place prototypes all together before the inline or templated implementations.


Editing Rules

Tabs are equivalent to two spaces.

There are no strict rules for the placement of '{' or indenting.

Constructors and casting

All basic classes (point3, box3 ecc) must have null constructors. Non null constructors can be added in debug versions.

Implicit casting is disallowed. Write a member Import function for casting from different integral types and a static Construct to build an object from different a integral type.


Example:

Point3f pf(1.0f,0.0f,0.0f);

Point3d pd=Point3f::Construct(pf);

pf.Import(pd);