- Use the Stroustrup C++ standards to write ISO C++.  All C++ header
  files end in .hh, all C++ source files end in .cc.  Follow the
  guidelines from Effective C++.

- All macro names are in all uppercase.  All other identifiers are in
  all lowercase.  Words are separated by underscores.

- Doxygen is used for API documentation.

- CppUnit is used for writing unit tests.  All unit tests are in the
  src/tests directory.

- SCons is used for building.

- Everything appears in the 'dns_analyzer' namespace.

- Opening braces appear at the same line as the opening statement
  keyword, except if the line becomes too long (more than 80
  characters).  In this case the opening brace appears on a line by
  itself directly under the opening statement keyword.

- Even single statements are enclosed in braces if they are part of
  another statement:

- When breaking up a long expression the operator appears on the start
  of the next line.

- An allocated resource should always be deallocated at the same layer
  in the software.  If a class allocates a resource it is also
  responsible for deallocating the same resource.

- Values passed by pointer/reference to a function must be valid for
  the entire function call.

- Values passed by pointer to a constructor must be valid for the
  entire lifetime of the constructed object.  The destructor must not
  deallocate the pointer!  Values passed by reference only need to be
  valid for the lifetime of the constructor unless otherwise
  documented.

- Private member variables always have a leading underscore in the
  name.

- There should be no public and protected member variables.  Use
  accessor functions.

- Use 'const' religiously.


Samples:

if (condition) {
    single-statement
} else {
    stmt_1
    ...
    stmt_n
}

if (part1 || (part2
              && part3))
{
    ...
}

do {
    ...
} while (condition);
