Post-1.0.10 changes
* Do better input stream checking.
* Fix infinite loop in GetInternalReferences() and GetExternalReferences().

Changes for version 1.0.10 (Released 2011-04-08)
* Fix infinite loop and bad iterator comparison in FunctionCall::SameAs().
* Fix memory leak in FunctionCall::eval().
* Fix ClassAd::GetInternalReferences() and ClassAd::GetExternalReferences()
  when provided ExprTree is in a different scope than the local ad.

Changes for version 1.0.9 (Released 2010-08-23)
* Fix interval() function to omit leading zeros and spaces.
* Allow semicolons to separate function arguments when
  _useOldClassAdSemantics is true.
* Don't recognize octal or hex literals when _useOldClassAdSemantics is true.
* Parse negative numbers as such, rather than as negated positive numbers.
* When parsing integers larger than 32 bits, use INT_MAX and INT_MIN
  rather than truncating to 32 bits.
* Fix Literal::MakeRelTime(time_t), which used random data to construct a
  time when given a non-negative value.

Changes for version 1.0.8 (Released 2010-06-10)
* Set a version (1.0.0) on the .so (thanks Steve Traylen)
* Updated ClassAdLibraryVersion to 1.0.8 (was 1.0.4)

Changes for version 1.0.7 (Released 2010-05-26)
* Fix parsing of strings containing characters with negative ASCII values.
* Stop escaping '?' in strings when unparsing.
* Added _useOldClassAdSemantics, which makes expression evaluation behave
  more like the old ClassAds implementation. Meant for use in Condor only.

Changes for version 1.0.6 (Released 2010-02-25)
* Fixed bug in MatchClassAd::OptimizeAdForMatchmaking() that broke
  references to the right ad from the left ad.
* Fixed bug in FlattenAndInline() that caused all function calls to fail.
* Added short-circuiting for &&, ||, and ?: operators.
* Added symmetricMatch(), rightMatchesLeft(), and leftMatchesRight()
  methods to MatchClassAd.
* Fixed bug that caused ClassAdParser to drop the character immediately
  following the old ClassAd =!= operator.
* Added ClassAd::alternateScope, which allows optional mimicking of old
  ClassAd evaluation semantics for use in Condor.

Changes for version 1.0.5 (Released 2010-02-09)
* Significant performance optimizations. This includes restoring use of
  the non-standard STL hash_map.
* When unparsing to old ClassAd format, print reals with the same
  precision as in old ClassAds.
* Fixed a bug in GetInternalReferences() that would return an incomplete
  list if an external reference was encountered.
* Fixed a bug in function substr() that could return the wrong substring
  when a negative length was provided.
* Make the single argument to function random() optional, as documented.
* Fixed a bug in function ifThenElse() that caused evaluation to fail if
  the first argument was a real.
* Fixed a bug in several functions that caused evaluation to fail if the
  wrong number or type of arguments was provided.

Changes for version 1.0.4 (Release 2009-10-05)
* Added eval() function to be consistent with "old" classad library used
  by Condor.
* Fixed problem with calculating timezone offsets.  This problem caused
  the library checks to fail in the British timezone.
* Made code changes to ease transition from "old" to "new" classad library
  in Condor.
* Fixed problems in absTime() and relTime() that could cause undefined
  behavior on malformed input strings.

Changes for version 1.0.3 (Released 2009-03-10)
* Fixed name of ClassAd function strcmp() to be case-insensitive, like all
  other function names. The function's behavior was and continues to be
  a case-sensitive comparison of two strings.
* Removed usage of non-standard STL types hash_map and slist.
* Fixed a bad gcc version check.
* Updated Windows build files.
* Added #include <cstring> to build on gcc 3.4.x.
* Some source files renamed due to Windows build limitations.
* Removed CLASSAD_DISTRIBUTION build symbol.

Changes for version 1.0.2 (Released 2009-01-30)
* Added #include <string.h> to build on gcc 3.4.x.

Changes for version 1.0.1 (Released 2008-12-1)
  - Added ClassAd functions from old classads: ifThenElse(), regexps(), and
    interval().
  - Fixed some minor compilation problems under OS X 10.5.
  - Source files renamed to conform to scheme for rest of condor source
    (.C --> .cpp).

Changes for version 1.0rc5  (Released 2008-03-17)
* The WANT_NAMESPACES define is now WANT_CLASSAD_NAMESPACE
* New warning flags were added to the distribution build
 - A number of minor changes were made to eliminate warnings
  + shadowed variables, possible uninitialized variables
* Fixed an apparent leak (valgrind found) in attrref.C:426, leaking attrRef
* Updated the build_external script for building as a Condor external
* Updated classads.spec to be Fedora compliant
* configure.ac now removes all rpath junk from libtool
 - a side-effect is the need to set LD_LIBRARY_PATH=.libs
   if you want to run the compiled programs before they are installed
* memory leak in fnCall.C:regex_helper fixed (PCRE only issue)
* Fixed printing of escaped characters in strings when printing in old-classad
  mode.
* Fixed evaluation of attribute reference applied to lists.

Changes for version 1.0rc1
* Build now uses autotools, and has the following changes:
  - The --lib-name option no longer exists
  - The SWIG interface isn't compiled (previously it was never
    installed)
  - The --prefix <dir> option is now --prefix=DIR
  - The --use-pcre <dir> option is now --with-pcre=DIR
  - The --use-stlport <dir> option no longer exists
  - The --use-explicit-templates option is now
    --enable-explicit-templates, and really should not be used
  - configure no longer creates a classad_features.h
  - The --enable-shlib option has been removed, it is compiled
    whenever available. Also, the _sh suffix is no longer used
  - configure detects DLOPEN and will not compile shlib if it is not
    available
  - Note: Makefile.am should not be edited, edit Makefile.am.m4
    instead
* Header files are now installed in a classad/ directory, either
  #include <classad/*.h> or add an appropriate -I to your build
* All ClassAd structures/classes are now placed in the "classad"
  namespace if namespaces are requested

Changes for version 0.9.9: (released 15-Jun-2007)

* Fixed a crash when a ClassAd has more than one attribute and an
  attribute other than the first has an && with no second expression.

* ClassAds with multiple semicolons in a row used to cause a parse
  error because an empty expression was not allowed. They are now
  allowed. 

Changes for version 0.9.8: (released 14-Jun-2006)

* The build now uses implicit template instantiation by
  default. Explicit template instantiation is still available by providing the
  --use-explicit-templates option to configure.

* Added support for compiling with stlport (known to work with stlport5.0RC6).

* Added SWIG interface for Perl.

* Fixed segmentation fault that occured when evaluating lists that are
  not within a ClassAd. 

* Added a ClassAdCollection::GetView() function. In combination with
  the existing view iterators, you can now iterate over an entire
  view, including the "root" view. 

* Some missing "virtual" keywords were added for virtual destructors

* A bunch of -Wuninitialized warnings were corrected.

* regexprMember has been added.

* The subscript operator now returns error instead of undefined if the
  argument is out of bounds.

* -0.0 is now handled correctly. 

* You can now do math with booleans. True is 1, False is 0. This lets
  us do things like:

  Rank = ((other.mips > 4000)*3) + ((other.ram > 1000)*2) +
         (other.disk>1400)

  This is frequently done in Condor, and we need this functionality in
  order to be backwards compatible. 

Changes for version 0.9.7: (released 28-Oct-2004) 

* The ClassAd tarball (and corresponding directory within the tarball)
  that is downloaded has changed it's format from
  classads_<version>.tar.gz to classads-version.tar.gz. This allows
  the ClassAd library to be used more easily in Condor--I hope it
  doesn't cause anyone problems.

* The name of the classad library now depends on the compile time
  options. There are four possible names:

  Name               | Classad Namespace? | Shared Library Functions?
  -------------------+--------------------+---------------------------
  libclassad.a       |       No           |            No
  libclassad_ns.a    |       Yes          |            No
  libclassad_sh.a    |       No           |            YES
  libclassad_sh_ns.a |       Yes          |            Yes

  If you don't want these names, you can use the --libname argument to
  configure. To get the old behavior, you would have:

    configure --lib-name libclassad.a

* We are gradually improving the C++ API documentation. Early results
  can be seen at:

  http://www.cs.wisc.edu/condor/classad/c++doc/

* The ClassAd library now defines a CLASSAD_EXCEPT macro instead of
  using EXCEPT. This avoids a conflict with Condor. 

Changes for version 0.9.6:  (released 07-Oct-2004)
* Can optionally use PCRE for the regexp() ClassAd function. On Unix,
  specify --use-pcre <dir>. We have tested with PCRE 4.5 and 5.0. 

* Added ClassAd functions: splitTime(), formatTime(), and random()

* Added ClassAd functions strcmp() and stricmp().

* Renamed the little used function isMember to identicalMember().

* Fixed bugs in the internal representation of times.

* Added classad_functional_tester, which is a significantly better
  than the old test_classads. 

* Added classad_unit_tester, which does lower-level tests than
  classad_functional_tester. This test program is incomplete, but well
  on its way. 

* Remove test_classads.

* Added classad_version program, which reports the version. 

* Fixed bugs in ExprList that were exposed by classad_unit_tester

* Fixed ClassAd functions real() and string() to work correctly. 

* Fixed bugs in XML parsing.

* Fixed a bug where the parser would choke on any input ending in a quotation
  mark because the lexer wasn't consuming the entire string token.

* Fixed a bug where the lexer would choke on any string ending in a backslash.
  Now it will only choke if the string ends in an odd number of backslashes. 

* Fixed bug that sometimes caused Flatten() to return an expression
  with a bad pointer.

* operator<<() now takes any ExprTree instead of just a ClassAd.

* Fixed a bug in the configure script that caused inappropriate
  parsing of arguments.

* Fixed numerous little bugs.

Changes for version 0.9.5: 
* Fixed a bug in printing parenthesized expressions with minimal
  parentheses. (It used to print garbage in some cases.)

* Identifiers can be quoted with almost anything between the
  quotes. This means you can have a ClassAd like:

  [
    A = 3;
   'B' = 4;
   'C&* X"' = 5; 
  ]

Unquoted identifiers must still begin with an alphabetic character or
underscore and be followed by alpanumeric characters or underscores. 

* Time representation has changed. Absolute times are represented in
  ISO8601 format. Absolute and relative times looks like function
  calls now:

  [
     birthday = abstime("1972-02-23:08:04:13-0600");
     jobtime  = reltime("2+13:15:36"); 
  ]

  The relative time is days + hours : minutes : seconds. See the
  online manual for more details. 

* The XML output is different in the following ways:

  - The <n> (number) tag has been replaced by <i> (integer) and <r>
    (real) tags. Real numbers are always represented as described
    below.

  - <at> is now absolute time, and <rt> is relative time. Between the
    tags, they are identical to the above representation. 

* Real number representation has been changed a bit. When real numbers
  are printed, they are printed with a fixed number of digits of
  precision. They look like: 4.500000000000000E+00. If you need to
  refer to "not a number", infinity, or negative infinity, you can do
  it like:

     nan               = real("NaN");
     infinity          = real("INF");
     negative_infinity = real("-INF");

* We now compile on gcc 3.2.x and 3.3.x, in addition to other versions
  of gcc.

* Various bug fixes, particularly in the XML output.

* ClassAd::MakeClassAd is now static (it's a factory method) and now
  works. It didn't work before. 

* Miscellaneous bug fixes.

Changes for version 0.9.4: (release 21-Nov-2002)
* Added user-defined functions

* New parsing functions to allow input from different input types: C
  and C++ strings, streams, and files.

* Fixed some parsing bugs that could cause segfaults.

* Fixed a bug in evaluating function calls that could cause sefaults.

* Fixed bug in XML parsing that could cause problems for parsing empty
  strings, like <s></s>.

* Fixed error in evaluating lists. 

Changes for version 0.9.3: (released 1-Aug-2002)
* Made the standalone library compile with gcc 2.95.3, 2.96, and
  3.0.x. 

* You can define WANT_NAMESPACES, and the ClassAd library will be
  defined within the "classad" namespace now.

* Fixed a bug in views that could cause view members to be
  inadvertently erased. (bool ViewMemberLT::operator() was incorrect.)

* The ClassAd functions member and ismember switched the order of 
  parameters, and now match the documentation: the list argument
  is now second.

* bool EvaluateAttr(const string& attrName, Value &result) was declared
  in classad.h, but not defined. It now is. 

* Made IsStringValue() a bit safer in value.h

* There is a simple << operator for ClassAds now.

* New STL-like iterators for ClassAds and Collections. 

Changes for version 0.9.2: (released 12-Feb-2002)
* Setting the view info no longer loses the view name or parent
  view name.
* There is now a configure script to assist with building.

Changes for version 0.9.1:
* Fixed usage of va_end in debug.C
* Removed token after #endif
* Flushing of ClassAd collection logs was accidentally turned off, and
  is now turned back on.
* Fixed bug in ClassAd::Copy() where the parent scope wasn't being set
  properly. 

