Read this carefully before working on Atlas-C++.

I   On writing templates:

 - put the declaration for the template class X in X.h
 - put the definitions for the template class X in X_impl.h
 - put any instantiations of X in X.cpp (or X.cc?), e.g.:
     template class X<int>;

This avoids duplicated instantiations and speeds up compile time.
Note that this doesn't apply for absolutely all classes. If unsure,
talk to somebody who knows more about templates.

II  On filenames:

In 0.4.0, C++ implementation filenames will end in .cc.
In 0.4.x, this may change to .cpp.

In 0.4.x:
 - files will have CapitalisedFilenames.extension
 - headers will end in .h

In 0.5.x and up:
 - C++ implementation filenames will end in .cpp
 - headers will end in .h
 - files may be lower cased. This is up to debate.

III On member names:

In 0.4.x member function names will be CapitalisedNames(). There are no
restrictions to the naming of member variables.
In 0.5.x member functions will be lowerThenUpperCased(). Member
variables will be prefixed with m_, and also be lowerThenUpperCased.
-------e.g.
0.4.x: class Budgie { void CleanFeathers(); Feather* dirty_feathers; };
0.5.x: class Budgie { void cleanFeathers(); Feather* m_dirtyFeathers; };
-----------

IV  On ChangeLog entries:

Write a change log entry for every change you check in. Make sure you
use standard ChangeLog format. Look in the current ChangeLog for
examples of this.

V   On CVS:

There shall be the following tags:
 atlas-cpp-x_y_z: Represents Atlas-C++ version x.y.z
   WARNING: Do not check out with one of these tags and then commit!
            Any versions tagged as this are to STAY EXACTLY THE SAME.
 atlas-cpp-stable: Represents the current "stable" branch of
  Atlas-C++, i.e. versions that being with x.y where y is even. If you
  are doing work on the stable Atlas-C++ version, make sure you check
  out with this tag only! Don't use a tag called atlas-cpp-x_y_z.
  Once an official release is made, it shall be tagged as
  atlas-cpp-x_y_z where x_y_z represents the version number. Then that
  tag shall not be touched, further development shall continue with
  the atlas-cpp-stable tag.
 HEAD: the default tag, indicates the unstable branch. The same holds
  as for atlas-cpp-stable. Once this becomes stable, do the following:
   - fetch atlas-cpp-stable. Tag it as atlas-cpp-x_y where x_y
     corresponds with major version x.y.
   - fetch HEAD. Tag it as atlas-stable.
   - Tag a release, if necessary.

VI  On review and ownership:

Stefanus du Toit and Michael Day are no longer directly incolved with the
WorldForge project on a day to day basis, so ownership and maintenance
of this code has been handed over to Al Riddoch.

Due to the importance of Atlas-C++ to the WorldForge project, changes are
strictly controlled. Please contact Al Riddoch on irc, where he is known
as alriddoch, via the WorldForge mailing lists, or via direct email
as alriddoch@zepler.org before starting any development, and before
commiting any changes. This does not affect your right to modify the code
as described in the LGPL (see COPYING).

VII On namespaces:

Each subdirectory should use its own namespace for classes it contains,
and package the object files in a library file associated with
this namespace. namespaces are hierarchical following the directory
hierarchy, and everything exists with the Atlas namespace.

From 0.5.x onwards, the "using namespace ..." directive should never be used
is it increases the likelyhood on namespace pollution, and slows down compile
times. Use is also discouraged in programs which use Atlas-C++, and 
in any C++ program. No additional use should be made of the
"using namespace ..." directive should be made in branch before 0.5.x, and
its use may be phased out in these branches eventually.

Written by Stefanus Du Toit <sjdutoit@uwaterloo.ca> on 2001-01-14.
Added to by Alistair Riddoch <alriddoch@zepler.org> on 2001-05-11.
Last updated by Alistair Riddoch <alriddoch@zepler.org> on 2001-05-11.

