********
* BUGS *
********

  o Sometimes it seems the viewer rotates light source as well.  If it
    does, it should stop doing it.  In any case, initial centring can
    be improved; geometry.xml is an example where this currently goes
    wrong.  Furthermore, the viewer should probably have its own
    subdirectory.

    The light source probably SHOULD rotate with the camera <=> light
    source and camera are always in the same position.

  o Potential space waste in SpeciesTable?  Do all compartments really
    have the same SpeciesTable layout?

  o Does PBC really work after transformation?  Check the cylinder-PBC
    issue, as warned about in the documentation (David?).  At any
    rate, the PBC implementation can be made more general, by just
    finding the last subvolume of the primitive in the negative PBC
    direction, preferably by some "binary" search.

  o Negative simulation durations, either in terms of time or
    iterations, should probably be taken to mean infinite simulation
    duration.


********
* TODO *
********

  o Copy constructor should imply assignment operator.  Clean out all
    unnecessary (trivial) implementations.

  o Error checking in geometry building.  Specifically in the case of
    accidental zero dimensional geometries.

  o Introduce object orientation in ReactionNode.  Optimisations
    should be possible in ReactionNode, ReactionTable hashing,
    multithread in system.  See libsbml src/TestReadFromFile5.cpp for
    an example.

  o Logging, templating and valarrays in linalg module.  Actually,
    import new linalg module once finished, or remove in favour of
    external module.

  o Finish Gtkmm/GTK+ support.

  o Verify standard conformance a la Stroustrup.  Compile without
    warnings with gcc, icc, alpha, Irix, Solaris, OSF, OSX.

  o Check up the pow(10, ...) versus pow((double)10.0, ...) issue
    (Solaris?)

  o Do something about those annoyingly long constant definitions.

  o Sort out the include file mess.  See libsbml for an example.

  o Should the fromSBML() functions be private?  Maybe a factory
    design pattern would be even better?

  o Sort out the "definition.h" and "mesord.H" mess.

  o Rename "Visualiser" files to "Viewer".  The viewer should probably
    live in its own directory.

  o Remove string comparisons for identifiers.

  o Store subvolumes in contiguous memory.


*****************
* DOCUMENTATION *
*****************

  o Emphasise that SBML is not supposed to be hand-written.  One
    should rely on external tools for model description.

  o Note that the cube is the only platonic solid that can be used to
    generate a tessellation of space (see MathWorld).

  o Developers should probably update their dependant libraries, as
    well as the autoconf-archive every now and then.

  o Perhaps the PDF documentation should be included in the binary
    distribution?

  o Check copyright notices in the documentation.

  o Style:

    o The importance of proper guards in header files (#ifndef
      ... #define)
 
    o What is it going to be: "method" or "function"?  Stroustrup
      seems to prefer function, except in virtual cases: "A virtual
      member function is sometimes called a method."

    o According to Stroustrup C++ style for references "my_type& foo"
      is preferred over C-style "my_type &foo".  The same goes for
      pointers.


*********
* IDEAS *
*********

  o It would be interesting to measure performance with and without
    the optimisations.  More generally, a profiling investigation
    would probably be helpful to discover the performance bottlenecks.

  o A scrap queue.  Subvolumes that are modified but not first in the
    queue and also not resorted yet.

  o Parallelisation idea for shared memory (i.e. not MPI, etc): Create
    thread pool with one sorting thread and one simulation thread.
    Then:

    while (simulating) {
      * Execute event in next subvolume
      * Simulation thread waits for sorting thread to complete
      * If one of the affected subvolumes will be placed at the head
        of the queue, swap with the head first
      * Sorting thread resorts the possibly swapped subvolumes in
        parallel with the simulation thread
    }

    Note that every thread will need its own PRNG!


*****************
* MISCELLANEOUS *
*****************

   o Apply for the OpenGL logo.

   o Apply for OpenSource logo.
