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 always fully lower case. Compound names are separated by '_'.

Example:

   #include<vcg/space/point3.h>

Each include file must begin with the standard legal disclamier/license intestation and report in the first line of history the $LOG$ cvs string.

The following automatically ge\nerated history can be, from time to time, compressed/shortened.

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 because included by point3.h

   #include<vcg/space/point3.h>  

In Class definitions place all the 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);