Overview
--------

- General/utility files/classes:

misc.h
vec.h
mat.h
poi.h
lssolve.h
slicedtask.h

- The game of Hex
  
hexmark.h
hexfield.h
hexboard.h
hexmove.h
hexgamestate.h
hexgame.h
hexmatch.h
hexplayer.h

- AI

carrier.h
group.h
subgame.h
connector.h
conductance.h
sixplayer.h

- GUI
asyncplayer.h
khexwidget.h
ksix.h

Explanation of statuses and semi-threading
------------------------------------------

While the computer is thinking the GUI should still function properly.
To achieve this goal one can use threading, split the background task
(in this case thinking) into small chunks or keep processing events
by directly calling kapp->processEvents() every once in a while.

Threading - which seems to be the cleanest solution - introduces more
dependencies either on phtreads or qt-mt. To keep portability problems
away phtreads were not used. QT-MT was not used because as of KDE2.2
some distributions do not include these libraries by default and almost
none of the KDE programs use it.

Splitting the background task into small chunks (and keeping the state
between two chunks!) is very hard to do in this particular case.

So, with the two other choices out that leaves us with calling
kapp->processEvents() periodically from the background task. While
it may seem a simple solution it does introduce problems when a
new HexMatch is to be created and the from current one
kapp->processEvents() was called. If HexMatch is just deleted we are
likely to end up with a SIGSEGV when control from processEvents() returns
to the deleted HexMatch. Similar problems exists when the player that is
thinking (and calling processEvents()) is changed/deleted.

Working around these problems complicates class KSix quite a bit.


Rationale behind resistance values
----------------------------------

By definition, vulnerable points of a subgame are the points where
a play by the opponent defeats the connection.

The resistance value of a path between the two edges approximates the number of
vulnerable points in the path.

1) Edge to edge
    1
  B---B

  Number of vulnerable points: 0, 0, 0
  Resitance: 1

2) Edge to edge with a stop
    1   1
  B---B---B
 
  Number of vulnerable points: 0, 1, 0
  Resitance: 2

  We can assume that the carriers of the two connections have at least one
  common point, because otherwise the connections could be joined and
  we would have a direct edge to edge connection as well.

3)
    1   1
  B---E---B

  Number of vulnerable points: 1, 0, 1
  Resitance: 2

  The empty field is vulnerable.
  There might be other vulnerable points if the carriers have common points.

4)
    1   2   1
  B---E---E---B

  Number of vulnerable points: 2, 0, 2
  Resitance: 4

  The empty fields are vulnerable.
  There might be other vulnerable points if the carriers have common points.

5)
    1   1   1   1
  B---E---B---E---B

  Number of vulnerable points: 2, 1, 2
  Resitance: 4

  The empty fields are vulnerable.
  There might be other vulnerable points if the carriers have common points.

