The Glest Wiki
Advertisement

These conventions only apply to new code. Don't spend lots of time modifying existing, working code.

Setters/Mutators

should be in the form of:

void setMyAttribute(type v) {myAttribute = v;}

as opposed to

void setMyAttribute(type myAttribute) {this->myAttribute = myAttribute;}

SVN Repository

  • The organisational style is described as 'feature branches' at http://svnbook.red-bean.com/en/1.5/svn.branchmerge.commonpatterns.html
  • If you add a new text file, be sure to run "svn propset svn:eol-style native file file file". replace "file" with your actual file names ( seeEOL-STYLE ) but not for msvc project files.
  • Data files should have svn:executable property set. It has no effect on windows but on *nix systems and cygwin, it sets the executable bit.
  • To checkout a branch, copy your trunk and do a switch to avoid re-downloading the large data folder.
  • To gain write access for the first time you will need to show an admin the code you want to commit.

Code Organisation

  • Don't create 'objects of convenience'. It creates tight coupling which makes it harder to maintain.

    Example:
    Unit = noun
    Update = verb
    "UnitUpdater" = noun + verb + 'er'

    The 'er' makes the whole thing a noun again, but it's artificial... there shouldn't be a 'UnitUpdater', we have a 'Unit', and it has an 'update' method.
    (adapted from Silnarm http://glest.org/glest_board/index.php?topic=4448.msg27291#msg27291 )


Platform Support

Glest officially supports Linux (through Jam build) and Windows (through MS VC++). When writing code try to keep this in mind.

Debug #defines

For the DEBUG code, we decided on a DEBUG_AREA_SUBAREA type system (where _SUBAREA is optional). For general code use _DEBUG as normal. They can be defined in the config or in a header file.

Example:

General stuff in DEBUG_GUI, and more specific ( or in particular, time consuming asserting functions ) in something more specific


Style

  • Use tabs instead of spaces for indentation.
  • Try to stay consistent with surrounding code.

Example

class ClassName {
public:
    ClassName( int param );
    /*
     * doxygon comments
     */
    void function( int param1, int param2, int param3 );
};

void ClassName::ClassName( int param )

    : super()
    , variable( param ) {

    doSomething();
}

if ( conditiontest ) {
    int x = 1, y = 2, z;
    z = x + y;
    ClassName test( z );
    test.function( x, y, z );
}

Advertisement