/** @file RELEASE_NOTES.TXT
This file gives a high level overview of recent changes.

Revision 1.28

- This is likely to be the last release of the monolithic dlr_libs
  package.  Subsequent releases are planned to package each library
  separately, making it easier for users to pick and choose what they
  want.
- This release fixes a bug in
  dlr::linearAlgebra::linearSolveInPlace().  If you use this function
  for non-symmetric problems, then your code will be affected.  Also,
  linearSolveInPlace() no longer returns by reference the LU
  decomposition of its matrix argument.  Please note that the
  documentation has always warned that this feature may change.
- Several updates to (unstable) dlrComputerVision.
- Cleaned up code in dlrUtilities/imageIO.h, and Added code to check
  and adjust byte order when writing 16 bit PPMs.
- Significant updates to dlr::utilities::lockFile.
- Added a fledgling dlrGeometry library.
- Other documentation changes, bugfixes, and minor updates.

Revision 1.27

- Cleaned up Visual Studio build and added VC++ projects to build unit
  tests, and upgraded to VC++ 2005.  Note that not all tests currently
  pass under VC++.  We're correcting this bit by bit.  Most of the 
  failures so far appear to be related to poorly designed tests and 
  non-standard iostreams behavior.
- Updated dlrTest to allow automatic execution of tests using a
  pre-written main function in libdlrTestAutoMain, and modified the
  unit test suite to use this feature.
- Reworked all convolution-like functions (dlr::numeric::convolve*(),
  dlr::computerVision::filter2D()), added another template parameter,
  and marked their interfaces as unstable.
- Reworked handling of conditions in dlrThread::Monitor and its
  friends.
- Renamed dlr::thread::DataQueue to dlr::thread::BroadcastQueue (but left
  a DataQueue class wrapper so as not to break existing code.
- Added new class dlrThread::DistributionQueue for times when all of
  the machinery of BroadcastQueue is not necessary.
- Added missing constructors in DLR_DECLARE_EXCEPTION_TYPE macro.  The
  lack of these constructors was preventing derivation of new exception
  classes from subclasses of dlr::exception.
- Cleaned up namespace usage, moved each library into its own
  namespace, and provided "using" declarations in namespace dlr so as
  (hopefully) not to break existing code.
- Added getFunctor() method to Transform?D, which should ease working
  with STL style algorithms.
- Added empty() method to Array?D, and added row iterators to Array2D.
- Added new file, geometry2D.h, which currently only contains the
  function bilaterate().
- Updated documentation slightly.
- Other enhancements and bugfixes.

Revision 1.26

- Considerable rework in dlrComputerVision, including revamped pixel types
  which no longer require that compilers don't pad C structures, and a
  few new capabilities.
- Added a new class dlrUtilities/FrequencyGoverner to allow easy
  control of loop execution speeds.
- Updated dlrCommon/OptionParser to throw an exception when an
  unrecognized option value is requested by application code.
- Reworked dlrCommon/byteOrder.h to match more types.
- Other minor bugfixes, updates, and enhancements.

Revision 1.25

- Added some new operator==() implementations for Array?D in dlrNumeric.
- Added functions allTrue(), someTrue(), etc. to dlrNumeric/utilities.h
  for testing arrays of bools
- Added dlrNumeric/convolve.h to support 1D convolution and correlation.
- Added dlrNumeric/sampledFunctions.h to support stock functions such as
  Gaussians, Hamming windows, etc.  Currently only 1D Gaussians
  are implemented.
- Added an implementation of Horn's method for registering 3D ponits
  to dlrNumeric.
- Added solveQuadratic() function to dlrNumeric/utilities.h.
- Added new (still unstable) Stencil2D class to dlrNumeric.
- Added Levenberg-Marquardt nonlinear least-squares optimization to 
  dlrOptimization.
- Added DLR_DECLARE_EXCEPTION_TYPE macro to make it easier to declare
  dlr::Exception subclasses in user code.
- Added CompileTimestamp class to dlrCommon.  This makes it easy to figure
  out when your code was compiled.
- Added subsample() function to dlrComputerVision/utilities.h.

Revision 1.24

- Added RGBA and BGRA pixel formats to dlrComputerVision.
- Added OptionParser class in dlrUtilities for handling command line
  arguments.
- Added LockFile class in dlrUtilities for creating and deleting lockfiles.
  This class is currently only available in the Linux build.
- Added isExistingPath() and isRegularFile() functions to dlrUtilities/path.h.
- Added more flexibility to wrapString() in dlrUtilities/stringManipulation.h.
- Added maxSplit parameter to splitString() in 
  dlrUtilities/stringManipulation.h.
- Added StaticArray1D class in dlrNumeric.  Please note that this class is 
  a work in progress, and will change significantly in the future.
- Added argsort() function to dlrNumeric/utilities.h.
- Corrected omissions which may have made OptimizerNelderMead uncompilable 
  under some circumstances.
- Minor updates to improve usefulness of dlrTest output.
- Updated VC++ build files.
- Other minor code cleanup.

Revision 1.23

- Updated VC++ project and solution files to eliminate warnings during
  compilation.  Also added missing files to dlrUtilities.vcproj.
- Continued updates to dlrComputerVision library, including more pixel
  types, basic morphological operations, edge detection, a naive snake
  implementation, and more.  This library is still pretty cumbersome,
  and is likely to change significantly.  Use this code at your own
  risk.
- Added Index2D, Polynomial and BSpline classes to dlrNumeric.
- Minor updates to dlrCommon to avoid getting stomped on by macros
  defined in other libraries.
- Other minor updates and bugfixes, including correcting an indexing
  bug in dlrNumeric/bilinearInterpolator (!).

Revision 1.22

WARNING: In this release, I updated the VC++ project and solution
  files.  This involved upgrading to Visual Studio .NET 2003, which is
  the only version I had available.  If you've been building using an
  older version of Visual Studio, this probably breaks your build,
  since older versions are unlikely to open the more recent Visual
  Studio .sln and .proj files.

- Updated README.TXT file.  Now it's harder to read, but it has a lot more
  information, and formats nicely in Doxygen output.
- Updated .vcproj and .sln files for building under Visual Studio.
- Added new library dlrThread.  This library is still unstable, but it
  may be useful in its current state.  The DataQueue and Monitor
  classes are unlikely to change their interfaces very much.
- Changed the name of library dlrImageProcessing to dlrComputerVision
  and added a bunch of new code.  This library is still pretty
  cumbersome, and will continue to change a lot.
- Updated documentation significantly.
- Added (nearly empty) dlrStochastics library.
- Added code to dlrCommon for handling endian-ness.
- Added joinString() and wrapString() routines to
  dlrUtilities/stringManipulation.h
- Minor fixes, additions, and updates.

Revision 1.21

NOTE: This release still needs testing on Windows.  Please contact
      dlr@cs.cmu.edu if you download it and have trouble building.

- Minor continuing work on dlrImageProcessing and dlrClassification libraries.
  NOTE: These two libraries are not yet ready for public use!!
- Added skeleton of dlrThreads library.
  NOTE: This library is not yet ready for public use!!
- Added linearLeastSquares() function to dlrLinearAlgebra which solves
  general linear least squares problems.
- Reworked routines dlrLinearAlgebra slightly for better portability
  and speed.
- Added two new routines to dlrUtilities/stringManipulation.h: joinString 
  and wrapString().
- Added some time routines (getCurrentTime(), preciseSleep()) to
  dlrPortability.
- Minor bugfixes and updates, including several fixes to dlrNumeric test 
  suite.
- Updates to permit building with g++-4.0, g++-4.1.

Revision 1.20 

NOTE: This release still needs testing on Windows.  Please contact
      dlr@cs.cmu.edu if you download it and have trouble building.

- Updated handling of exception traces to be thread-safe.
- Added scripts subdirectory, and a python script to instrument
  source code for exception trace generation.
- Added the beginnings of a test suite in dlrCommon.
- Changed the name of the internal variable of the END_TRACEABLE macro
  so that it is less likely to collide with variable names in the calling
  context.
- Added the beginnings of a test suite for dlrImageProcessing.
- Removed unneeded convenience functions in dlrImageProcessing.
- Added code to dlrImageProcessing/imageIO.cpp to handle comments in
  PGM headers.
- Corrected code which reads plain PGMs so it reads the correct numerical
  values from the image file.
- Added dlrNumeric/bilinearInterpolator.h.
- Added stream input and output operators for Transform2D.
- Added invert() methods to Transform2D and Transform3D classes.
- Added minimal tests for Transform2D and Transform3D.
- Minor portability updates.


Revision 1.19
- Added single argument constructor to build Image instances from Array2D
  instances.
- Added function writePGM8() to dlrImageProcessing.
- Added splitPath() function to dlrPortability and dlrUtilities.
- Added tests for joinPath() and splitPath().
- Updated joinPath() to handle empty arguments.
- Updated code in isDirectory() to compile under windows.

Revision 1.18
- Added dlrImageProcessing library.
- Updated code in dlrCommon/types.h to include 8-bit ints and 
  small unsigned ints.
- Added include of cstdlib in dlrNumeric/utilities.h
- Replaced call to llabs(), due to reports of it not being available on
  Windows.
- Added filesystem.cpp and filesystem.h to dlrPortability, and made
  dlrUtilities/path.cpp code simply dispatch to the new dlrPortability
  code.
- Added isDirectory() function in dlrPortability/filesystem.h.
- Changed dlrUtilities/imageIO.h to use binary mode when reading/writing 
  a raw pgm/ppm file.
- Added isDirectory() function to dlrUtilities/path.h.
- Added recursiveListDirectory() function to dlrUtilities/path.h.
- Updated some tests.

Revision 1.17
- Added dlrCommon/types.h to manage integer precision, etc. on 64-bit
  architectures.
- Updated all calls into lapack library to use explicit precision so as to
  allow running on 64-bit architectures.
- Corrected parameter name in Triple copy constructor.
- Corrected typo in eigenvectorsSymmetric(): "," -> "||".
- Added pseudoinverse() function to dlrLinearAlgebra.
- Added sanity check in singularValues() to handle apparent bug in
  lapack.
- Minor updates and documentation changes.

Revision 1.16
- Changed eigenV*() functions to be spelled eigenv*().
- Updated documentation slightly.

Revision 1.15
- Added functions to dlrLinearAlgebra for computing eigenvalues and
  eigenvectors of symmetric matrices.
- Added function to dlrLinearAlgebra for computing SVD.
- Added absFunctor template specializations for float, long double,
  int, long int, and long long int.
- Minor optimizations in Array2D.
- Added a few tests.
- Several bug fixes & portability fixes.

**/
