Maintainer C++ Formatting Suggestions
*************************************

Some consistency and readability to C++ source code in the MP4v2 project
is desired. Every coder has different styles, uses different tools, but
we need to find some common ground when possible. So please consider this
document when creating and editing code.

When in doubt, general suggestions are as follows:

    - format for good readability.
    - format in a similar fashion as the file you are editing.
    - format code generally no wider than 119 columns.
    - format code with 4-space indents (no hard-tabs!)
    - the wider an identifier's scope is, the more descriptive it's name
      should be (and generally longer). Short identifiers for local scopes
      and loops are perfectly acceptable.
    - make liberal use of TODO comments as necessary. Following the
      pattern of marking *who* placed the TODO with a hyphen followed
      by your initials or shortname. ie: TODO-XY; note this does not
      imply the person who marked takes responsibility for the task.
    - move pointer 'astericks' and reference 'ampersands' towards type


EXAMPLE IF/ELSE
---------------

if( true )
    doit();

if( (a == 1) && (b == 2) ) {
    doit();
    doit();
}
else if( true && /* really long multi-line stuff
    another long line
    another line */ )
{
    doit();
}


EXAMPLE FUNCTION DELCARATIONS
-----------------------------

void processFoo( );
bool processFoo( const char* name = 0 );
bool processFoo( const string& name );


EXAMPLE FUNCTION DEFINITIONS
-----------------------------

void
processFoo()
{
    doit();
}

bool
processFoo( const char* name = 0 )
{
    doit();
    return thing != true; // no need for parenthesis
}

bool
processFoo( const string& name )
{
    doit();
    return (thing != true) || (another == false); // parens help readability
}


EXAMPLE CLASS DECL
------------------

class Foo
{
public:
    Foo( int value );
    virtual ~Foo();

    int  get( );
    void set( int value );

protected:
    virtual void doit() = 0;

private:
    int _value;

public:
    const int defaultValue;

public:
    static void foo();
};
