/**
 \page overview Overview
 \section mod_overview Overview

  The purpose of the Empire module is to manage information related to the overall
  state of each Empire in a FreeOrion game.  Information handled by the Empire module
  will include: 
	- All planets, and fleets that are owned by the Empire.
	- Entries currently in the empire's sitrep 
	- An empire's accumulated research, and a set of
    	 all technological advancements they currently possess.
	- A list of star systems the empire has explored.

  And, In later revisions:
	- racial advantages
	- diplomatic status
	- whatever else they decide to make us add... :)

  The Empire module is also responsible for managing "global" data such as
    - the technology database (a set of all possible technological advancements),
    - ship designs (in future revisions)


 \section classes Major Classes

 The Empire class will be the most fundamental class to the empire module.  It encapsulates
 the state of a single empire at any point during the game.  Empires are created and managed
 by EmpireManager objects.  Other modules which need to manipulate Empire objects must
 first obtain a pointer to the object from an EmpireManager.

 Other FreeOrion modules will interact with the Empire module through the EmpireManager class
 (actually, through one of the subclasses of EmpireManager, ServerEmpire and ClientEmpire).
 
 EmpireManager is the base class for the manager, and supports methods for 
   iterating across the set of empires, and obtaining pointers to empires based
   on their unique numeric ID (which is supplied by ServerEmpire at the time
   the empire is created).
 
 ServerEmpire is the server version of the empire manager, and supports methods
   for creating new empires, and generating XML updates for transmission to
   clients between turns.  (These updates contain a set of changes which the
   client must make to itself to keep it in sync with the server).
   
 ClientEmpire is the client version of the empire manager, and supports methods
   for handling the updates which ServerEmpire generates.
 

 A similar object manager pattern is used for technology items.  
 The TechLevel class is used to represent a particular technological advancement (such as a new ship type), and it is created and managed by a TechManager
 object.  
 
 The TechManager represents a technology database, and supports methods to create
 TechLevels from an external file, and lookup TechLevels based on their numeric
 identifier.  For Version 0.1, the TechManager creates hardcoded TechLevels, but in later versions it will load an external file to obtain the set of technologies which exist in the game.

*/



/**
  \page history Revision History
  \section doc Documentation Revisions
  - 5-15-2003	Initial posting of code and documentation.
  - 5-15-2003	Added DoxyGen groups to header files.
  - 5-26-2003	Cleaned up some of the method documentation so its easier to read and more descriptive.
			(there is still much to be done)
		Added links to important external documents.
  - 6-23-2003   Documentation update/cleanup.
  \section code Code Revisions
  - 5-26-2003	Initial Code Release Committed to CVS
  - 6-23-2003   Nearly all methods implemented and partially tested.  
               EmpireManager::UpdateEmpireStatus() changed so it does not create empires.
               THIS IS NOT REFLECTED IN THE IDS!!!
  - 6-29-2003   Removed Sitrep Update methods from Empire managers.  Sitrep is now
                transmitted each turn with the empire update.
                Added list of ship designs to Empire class.
                Added overload to Empire::XMLEncode() method which encodes an
                empire from the perspective of another.  (Used for turn updates
                to transmit info which the client has access to).
  - 7-12-2003   Changed the empire update methods, removed the diffing and merging
                 since this is now being done in a centralized place.  Added
                 fleet ID ranges to the empire object.
*/


/**
 \page docs Documentation
 External documents will be linked here.
 
 \section gen General

 \htmlonly

 <a href="http://www.freeorion.org/index.php?module=Static_Docs&type=user&func=view&f=programming/codestandards.html">
 FreeOrion Coding Standards
 </a>

 \endhtmlonly


 \section 01 Version

 \htmlonly

 <a href="http://us.f1.yahoofs.com/users/f7aaeadc/bc/freeorion/FreeOrion+Interface+Design+Specification.htm?bcw1o0.A.Y.mmjpn">
 Version 0.1 Interface Specification
 </a>
 
 <br>
 
 <a href="http://us.f1.yahoofs.com/users/f7aaeadc/bc/freeorion/FreeOrion+HLD+html.htm?bc2swk.AjWGzpqCp">
 Version 0.1 High Level Design
 </a>
 
 \endhtmlonly


*/

/**
 \page tools Build Instructions
 The standard FreeOrion toolset is required to build the Empire module.
 This includes the following: 
   - The gcc compiler, version 3.0 or higher
   - Expat 1.95.5
   - Boost 1.30.0
   - log4cpp 0.2.7
   - any others I may have missed.  (Please jump in people)

 It is also assumed that the build environment is set up with the same
 lib/include paths as the Makefiles and .dev files in the FreeOrion CVS repository.
*/

/**
 \page issues Problems and Open Issues
 \section statics Static Members
 There is a const string EmpireManager::EMPIRE_UPDATE_TAG, which is a static member of 
 class EmpireManager.  This string is used in the ClientEmpireManager constructor,
 and has caused access violations in my tests, in cases where a ClientEmpireManager
 is declared as a static object.  
 
 To avoid this problem, empire managers should be declared as stack or heap
 dynamic objects to ensure that all static members are initialized prior to their creation.
 
 The EmpireManager::UpdateEmpireStatus() method does not work as described in tbe IDS.
 (It will not create new Empires).
*/



/** \mainpage Empire Documentation
   - \ref overview
   - \ref history
   - \ref docs
   - \ref tools
   - \ref issues

 
  This is the central documentation nexus for the Empire Module.  The Empire module
  is a component of the FreeOrion project (see http://www.FreeOrion.org ).
  Documentation and updates of interest to the Empire team will be posted here.   
  
  
  I'm sorry there are so many annoying Empire hyperlinks, but I can't figure
  out how to get Doxygen to not make links unless I use that verbatim thingie
  and that makes things ugly.
  

*/
