summaryrefslogtreecommitdiff
path: root/src/aapl/ChangeLog
blob: 483ad825f71d8095a610650b586997fe89f0e37c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
Aapl 2.14 - March 17, 2006
==========================
 -Added a transfer function to the double list. This function should supersede
  the use of shallowCopy + abandon. In the by-value list the destination list
  is emptied first.
 -Added a transfer function to the Avl tree.
 -All double lists and Avl trees now implement deep copies in the
  operator=(...) functions and copy constructors. Previously only the by-value
  versions of these structures would do deep copies.
 -Removed the deep and shallow copy functions from the double lists and Avl
  trees. These structures should now be consistent accross all variants except
  for the fact that the by-value versions delete elements in destructors and
  when overwriting and the others simply abandon their elements (which may not
  be allocated on the stack).
 
Aapl 2.13 - Jan 25, 2006
========================
 -The vector and binary search table constructors that set an initial amount
  of allocation have been removed. They have been replaced with constructors
  that insert initial values, which is a more common task and is a more
  intuitive use for contructors.
 -Removed the String class. Better to use the stl string class. Aapl::String
  does not provide any real advantage over the STL version. Aapl::String has
  not been heavily tested and does not have very much functionality.
 -Removed the "tiny" versions of templates. These templates had functionality
  reduced in the interest of reducing compiled binary size. These templates
  did not find any real world use, nor were they heavily tested.
 -Removed the "simple" versions of vectors. These should be implemented as
  template specializations, not new classes. May be brought back as such in
  the future.
 -Added vinsert and vremove routines for accessing the insert and remove of
  the underlying vector of binary search tables. Previously, these were
  accessed by prefixing the insert call with the vector base class name,
  however this method is somewhat inconvenient, because it either requires all
  the template arguments to be given or an additional typedef to be made.
  Prefixing the call with the letter v is simpler.

Aapl 2.12 - May 15, 2005
========================
 -Documentation updates to trees, lists, compare classes, binary search tables
  and various other places.
 -Added iterator documentation and example.
 -Added proper includes for all examples, which now all compile.
 -Table comparisons now properly inherit the CompareT class, enabling table
  comparisons to call non-static element compare classes.
 -Removed the Deque structure. This structure was never used, incomplete and
  poorly tested. In most problems for which it is a candidate (large
  collections of objects in sequential ordering that are not required to be in
  contiguous memory), a simple replacement can easily be implemented with a
  small amount of code. Rather than be allowed to go unused and unmaintained,
  it is removed.
 -In the AvlTreeEl structures for Maps and Sets, getKey can be const.
 -Removed the non-standard malloc include.

Aapl 2.11 - May 30, 2004
========================
 -Moved from ints to longs for most integer values to get 64 bit numbers on 64
  bit machines. Fixes alignment problems on 64 bit machines.
 -Added AvliBasic, the linked version of the basic tree where the entire
  element is the key.
 -Updated documentation.

Aapl 2.10 -- Feb 5, 2004
========================
 -Fixes for two-stage lookup. Compiles with gcc-3.4
  Details at http://gcc.gnu.org/onlinedocs/gcc/Name-lookup.html#Name%20lookup
 -Fixed wrong Vector::Iter::pos() routines.
 -FsmGraph code removed from aapl, as an increasing amount of diverse
  specialization is required in applications. No longer feels like a general
  purpose template.

Aapl 2.9 -- Dec 8, 2003
=======================
 -Rewrote Deque to look and behave more like the rest of Aapl. Split it into
  Deque and DequeSimp. Deque supports complex classes with constructors and
  destructors. DequeSimp is for simple classes that can be coppied with
  memcpy.  Wrote stress tests for both.
 -SVector::makeRawSpaceFor fixed to detach from the vector when the current
  storage is shared. This affected SBstTable::insert() routines and caused
  them to modify shared data, instead of behaving like copy on write as they
  should.
 -Tiny templates renamed to be consistent with the non-tiny templates. The
  tiny versions now only have a T prepended to the name, the second character
  is no longer lowercased. This changes Tavl* to TAvl*, TdList* to TDList* and
  TsVect* to TSVect*.
 -Removed AvlPmap, AvlPset, AvliPmap, and AvliPset. Rationale is that these
  are too application specific. They require a pointer as the key (not
  anything that dereferences the pointer) and so do not generalize very well.
  Due to their lack of generality, they belong in application code.  They
  allowed a savings in code size when many instantiations were necessary,
  however, the savings was only slightly better than TAvlTree.
 -Test programs split into stress tests and non stress tests. All stress tests
  run indefinitely as long as they don't encounter an error condition, in
  which case they terminate by an assertion failure. They can be given a time
  limit to run for by specifying the number of seconds on the command line.
 -FsmGraph given repetition operators for repeating a machine n times.
 -Concatenation operator accepts an optional list of states to draw the epsilon
  transition instead of the from graph's final state set.
 -Useless shared table header template parameter removed.
  
Aapl 2.8.2 -- Aug 18, 2003
==========================
 -AvlSet::Iter and DListVal::Iter data access operators (*, ->) now return the
  node in the tree, rather than value. This is to make all iterator behaviour
  consistent: return the element.  This also allows for O(1) statements like
  tree.detach( iter );
 -DList and DListMel and Avl trees that are not sets or maps no longer do a
  deep copy in the copy constructor and assignement operator. This is to stay
  consistent with the fact that these lists and trees are not responsible for
  managing the memory of the elements they contain.
 -Table compare split into static and non-static versions. Default is the
  static version, which compiles out the 'this' pointer. If an item compare
  requires access to class data, the CmpTableNs can be used.
 -The user's Fsm class is now required as a template parameter to FsmTrans,
  FsmState and FsmGraph.
 -All callbacks moved into FsmGraph class to allow the access of user data in
  FsmGraph.
 -Added callbacks for state creation and destruction to FsmGraph.
 -EpsilonOp now takes a list of fsms to draw ops to. Allows the merging in of
  several machines using only a single invocation of the NFA to DFA algorithm.
 -FsmKeyOps is now expected to be a base class of the derived fsm class (ie a
  sibling of FsmGraph).
 -In transition lists are encapsulated in a class with an iterator.
 -Unused leavingFsm parameter to starOp and concatOp removed.
 -Fixed documentation building warnings.
 -Documented iterator classes.

Aapl 2.8.1 -- Jun 11, 2003
==========================
 -All iterator endpoint test functions have been renamed.
        Iter::more()    -> Iter::lte()
        Iter::done()    -> Iter::end()
        Iter::revMore() -> Iter::gtb()
        Iter::revDone() -> Iter::beg()
  The rationale is that it is not obvious that more() and done() are direction
  specific. It is more clear that lte() (less than end) needs to be changed to
  gtb() (greater than beginning) when reversing the direction of a traversal.
 -All avl tree element classes have been renamed to make element names
  consistent.
        AvlNode      -> AvlTreeEl
        AvliNode     -> AvliTreeEl
        AvlMapNode   -> AvlMapEl
        AvliMapNode  -> AvliMapEl
        AvlSetNode   -> AvlSetEl
        AvliSetNode  -> AvliSetEl
        TavlNode     -> TavlTreeEl
        TavliNode    -> TavliTreeEl
        TavlMapNode  -> TavlMapEl
        TavliMapNode -> TavliMapEl
        TavlSetNode  -> TavlSetEl
        TavliSetNode -> TavliSetEl
        AvlPmapNode  -> AvlPmapEl
        AvliPmapNode -> AvliPmapEl
        AvlPsetNode  -> AvlPsetEl
        AvliPsetNode -> AvliPsetEl
        FsmSDNode    -> StateDictEl
        AvlTree::nodeCount  -> AvlTree::treeSize
 -All binary search table and avl tree classes now inherit from the compare
  class. This allows the compare function to be non-static and for it make use
  of state that is common to the data structure.
 -BstTable(int allocLen) no longer uses Vector::setAsNew and therefore Element
  does not require Element() constructor.

Aapl 2.8.0 -- Jan 5, 2003
=========================
 -Switched to the LGPL.
 -Added get() to String class. Returns the data ptr.
 -Added operator<<(ostream &, String&). Previously relied on the implicit
  cast to char* which did not work all the time.
 -Iterators renamed and rewritten. The new style for checking if the iterator
  is done is to call more() or done() if moving forwards and revMore() or
  revDone() if moving backwards. Iterators now have first() and last() calls
  for checking if the iterator is on the first and last element. The next()
  and prev() calls now return the next and previous. THEY NO LONGER MOVE THE
  ITERATOR FORWARD OR BACKWARDS. Increment() and decrement() are now available
  for moving the iterator.
 -Various fixes for the intel C++ compiler.
 -Shared vector table header renamed from TabHead to STabHead.
 -Started Tiny DList, Tiny VectSimp, Tiny SVectSimp, and Tiny AvlTree. These
  classes reduce final executable size by reusing core code across
  instantiations with different types. They can be used identically to the
  non-tiny counterpart if only iterators are used for accesing the structure.
  The catch is that the underlying data structures have generic pointers that
  are not directly usable without casting.

Aapl 2.7.0 -- Dec 20, 2002
==========================
 -DoubleList::length -> DoubleList::listLen and added length() function. This
  is to keep consistent with vectors and strings.
 -Sorting routines now inherit from the compare class and use a non-static
  compare routine. This lets the compare have state. This will likely be
  extended to all structures that use a compare class.
 -Constructor added to string that does sprintf style formatting.
 -Routines added to string for setting from a char*, len pair.
 -Table class (used by vector) member length changed to tabLen and the
  the length() const routine added. This makes SVector a more easy substitute
  for Vector. Previously the length member was an int in Vector and a function
  call in SVector. Now it is a function in both.
 -String::str -> String::data and String::getLen() -> String::length() to make
  access of string data consistent with access of table data.
 -Binary search tweaked to use a shift in place of a divide.
 -FsmGraph code from rlfsm moved back into Aapl and Reglang FSM terminated.
  Now that the graph code has been separted from the priority and action code,
  the base template is leaner and more generalized. It now fits well in Aapl
  as a generic programming construct. Also, rlfsm was not enjoying much
  exposure and no sense in letting the fsmgraph code fight for itself. The
  relevant fsmgraph changes since the split at 2.5.0 follow:
 -Support of arbitrary key types for graph completed.
 -Dramatic performance improvements in basic fsm operations. Kleen star,
  union, and concatenation do not require a walk of all states and can go very
  fast when there is no overlap between the machines.
 -Fsm Range transitions implemented. Can now efficiently specify machines that
  span very large ranges.
 -More efficient partition based fsm minimization implemented. Algorithm is
  similar to Hopcroft's minimization algorithm.
 -Fsm Graph split into base code that implements FSM operations, NFA-DFA
  conversion and minimization and a superclass that implements priority and
  action setting. Allows the base code to be easily reused for other
  applications that require different state and transition properties. The
  superclass is left as user code in Ragel and is not included in Aapl.
 -Can now have various classes of named entry points in an fsm graph for
  maintaining entry other than the start state. This is useful for making
  actions that jump into or call various named locations in the machine.
 -Various bugs in fsm graph code fixed.

Aapl 2.6.0 -- Nov 4, 2002
=========================
 -Added AvlPmap, AvlPset, AvliPmap and AvliPset classes. These are
  instantiations of AvlMap and AvlSet with void* types and a small inline
  wrapper interface for doing type conversions. If many different maps are
  used for storing integers or pointers then these classes can cut down on
  code bloat.
 -Added AvlTree::remove, which will detach and delete elements from the tree.
 -Removed set, unSet and isSet from AvlTree. These functions are redundant and
  clutter the interface.
  insert/remove/find functionality just for convenience. Prefer to remove them
  than to clutter the interface with inconsistently named functions.
 -Fixed the return type of BstTable::removeMulti. It should be an int (not
  bool) because it returns the number of items removed.
 -Added SVector and SVectSimp: implicitly shared copy-on-write vectors.
 -Added ResizeCtLin: Identical to ResizeLin, except the step is specified at
  compile time using a template argument.
 -Removed deepCopy from the classes that by default behave as a deep copy.
  Found the duplicate function to make it confusing as to how the structure's
  operator= behaves.
 -File rename of shrstr to astring, to make it easier to find.
 -BsTable renamed to BstTable to stay consistenty named with the other Bst
  classes. Also renamed the file from bstable.h to bsttable.h for consistency.
 -Compare class routines are now Compare::compare (used to be
  Compare::Compare). This is to keep with the lowercase function name
  convention.
 -Added the insertion of whole elements to BsTable and BstMap (already exists
  for BstMap).
 -Added the insertion of entire other tables to BsTable, BstMap and BstSet.
 -The getKey function for binary search table must now be const as well as the
  existing requirement of returning a const object. This was needed for the
  insertion of whole elements so the requirement was made for all
  insert/remove/find routines in order to stay consistent.
 -Removed set, unSet and isSet from BstSet. These functions duplicated the
  insert/remove/find functionality just for convenience. Prefer to remove them
  than to clutter the interface with inconsistently named functions.

Aapl 2.5.4 -- Sept 20, 2002
===========================
 -All of Aapl is now in the Aapl:: namespace, which is disabled by default. It
  can be turned on by defining #define AAPL_NAMESPACE.
 -Mergesort uses only memcpy to move data around, instead of the inconsistent
  use of the = operator. Classes that are sorted have no way of knowing that
  they are being moved around in mem.
 -Implemented QuickSort, BubbleSort and Insertion Sort.
 -QuickSort uses InsertSort when the array being sorted is small.
 -MergeSort uses BubbleSort when the array be sorted is small.
 -Implemented an implicitly shared string class.

Aapl 2.5.3 -- Aug 17, 2002
==========================
 -Much work done on the user documentation.
 -AvlMap and AvlSet destructors now delete all elements. The idea is that
  these classes manage memory on behalf of the user, so cleanup. Also, a deep
  copy will cause the existing contents to be deleted. The remaining avl trees
  do not assume ownership of element and thus do not delete anything.

Aapl 2.5.2 -- Aug 14, 2002
==========================
 -Bug fixed in Vector::replace. When overwriting data without overwriting up
  to the end of the vector or extending it, the vector would shrink in size.
  This is because the tableLength was getting set to the end of the overwrite
  region in every case.
 -Bug fixed in empty and abandon of Avli* trees. They now clear the list head
  and tail pointers.
 -shallowCopy, deepCopy and the = operator were added to double list, vector,
  and avl tree. The = operator implements the deep copy functionality.
 -The Vector class was heavily rewritten. The purpose of the rewrite is to
  have a vector that does not require the class that it contains to have a
  default constructor. In many cases adding a default constructor violates the
  design of a class. A class should not be required to have a default
  constructor just because it is going into a vector. To have this feature,
  the new vector differs from the old vector in a few ways. If the vector is
  instructed to add elements off the end of the vector then undefined
  behaviour results. The new vector will not implictly create new items.
  Also, new items cannot be added to the list by giving a null data pointer.
  Instead insertNew, appendNew, etc. can be used.
 -DListVal destructor now deletes all elements. The reasoning is that DListVal
  manages elements and so it should clean up after itself.
 -remove routines added to double list classes. They are the same as detach
  except they also delete elements.
 -Default down resize of ResizeRunTime fixed: now is Exponential as is the up
  resizing.

Aapl 2.5.1 -- Aug 9, 2002
=========================
 -Class and function descriptions from doc/*.txt moved to source code in
  doxygen format.
 -Iterators slimmed down in anticipation of the more coplicated iterator for
  avltree. Iterators now provide basic moving forward and backward and looking
  at current value. Looking ahead and moving ahead by more than one space is no
  longer supported.
 -Assignment operator of all iterators now return a reference to this.
 -Implemented iterator for avl tree (non Avli* trees). The iterator can be
  started on either end and can move forwards or backwards. Does not support
  trees larger than 32 element in height (should be sufficient).

Aapl 2.5.0 -- Jun 22, 2002
==========================
 -Doxygen docs started.
 -ExpnResize -> ResizeExpn, ConstResize -> ResizeConst, LinResize -> ResizeLin
  Name changes that will keep a lexographically sorted list of classes in good
  order.
 -StrCmp -> CmpStr, OrdCmp -> CmpOrd, TableCmp -> CmpTable for same reason as
  above.
 -BstTable fixed so that Resize class is passed to underlying vector.
 -Pdp Endianness support removed as it is untested. Don't have a pdp endian
  machine on which to test.
 -cc file extension changed to cpp for better portability.

 ******** Aapl split out into three libs: Aapl, Autil, Reglang FSM ***********

  Aapl is: A generic programming template library. Aapl is an alternative to
  the STL. It currently contains Linked List, Avl Tree, Vector, Binary Search
  Table, Double Ended Queue, Merge Sort.

  Autil is: A library of simple utility classes that are easy to come by.
  Autil contains paramater parser, byte ordering facilities, character
  classes.

  Reglang FSM is: A template library of algorithms and data structures for
  compiling state machines from regular languages.

Aapl 2.4.1 -- May 4, 2002
=========================
 -Fixed automatic dependencies, were not working correctly.
 -C++ standards compliant I/O and namespaces.

Aapl 2.4.0 -- May 3, 2002
=========================
 -Vector now uses malloc, realloc and free so the performance gain of
  of using realloc over new, memcpy, delete in resizing can be realized.
 -Buffer Renamed to VectSimp. The name buffer is way overused and brings
  preconceptions with it. VectSimp now has the same functionality as vector.
  It is a 'flavour' of vector. The main difference is that is does not use
  copy constructors/destructors. It uses memcpy to put data in and as a result
  can go much faster.  The idea is that it is used on 'simple data'.
 -The type of resizing that vector uses is no longer controlled by including
  different files and using different names (ie, VectorC no longer exists).
  The old style (last seen in v1.1.2) of using a template parameter has been
  resurrected. It was previously removed because it caused very long symbol
  names. That problem has been fixed by making the class that goes into that
  template parameter not a template. It is a normal class and as such will
  cause symbol names to increase a constant amount. The old way was the class
  was a template taking type T so that essentially doubled the length of the
  symbol.  The purpose of this change is to eliminate the many files required
  to have all the different resizing types. Any class that inherits from
  vector needs to have many flavours in order to support the different
  resizing types and that gets ugly. Providing resizing options to the bstable
  classes would require 30 files.
 -Default step for linear resizing is changed from 10 to 256.
 -FsmGraph structure supports Default transitions. Default transitions can be
  used in place of newing up a transition for every char in the alphabet in
  order to get the 'dot' and 'dot star' fsms. It is incredibly more efficient
  and will make large integer alphabets feasible.
 -The conversion from FsmGraph to FsmMachine is now moved into a class called 
  FsmBuild.
 -FsmMachine no longer stores transition indices as a linear chunk. Now
  stores key, index pairs. This will facilitate using FsmMachine with very
  large alphabets because large index tables will not be allocated.  when there
  is great variation in transition keys.
 -FsmMachine stores only offsets, no pointers.
 -Aapl assert is removed in favour of using system assert. Can't see a reason
  to duplicate system include.
 -Lowercased the interface to BsTable.
 -Makefiles use automatic dependencies.
 -AvlTree interface was lowercased/consolodated.
 -Large switches at the top of *common.h files were removed. The defines were
  put into the files that include the common files.
 -BsTable interface was lowercased/consolodated.
 -BstSet replaces VectSet.
 -Configure script allows you to specify what objects to build using the
  --enable-src option
 -AvlTree verification is moved out of the main tree and into the test cases.

Aapl 2.3.1 -- March 25, 2002
============================
 -Fixed errors in the event loop with respect to unregistering.
 -Added Signal handling to event loop.
 -Breaking out of event loop is now much cleaner. 
 -Added CONTENTS file.
 -Removed trivial class File. I think most would rather code this kind
  of stuff on their own, or use a more featureful library.
 -Removed Data base class. Again, kind of trivial. Better left to the user.
 -DList::detach{Front,End} -> DList::detach{First,Last}. This change was
  made in order to be more consistent with the iterator convention of
  using first, last, sfirst, slast.
 -Wrote documentation for double list.

Aapl 2.3.0 -- March 19, 2002
============================
 IMPORTANT: This release marks the beginning of a major change in the
 naming conventions. Previously, naming conventions had function names
 starting with an upper case. The member functions will slowly be changed
 to start with a lower case. Some functions names will also be changed
 to follow the conventions in doc/conventions.txt. Vector and DList have
 already been changed.

 These changes are being made to make aapl more compatible with existing
 template libraries and to provide a more consistent interface across
 the classes.

 -Vector and double list get iterators.
 -Fixed buffer. Restructuring vector broke it.
 -Lower cased names in vector.
 -Lower cased names in doublelist.
 -Vector::Overwrite -> Vector::replace
 -Vector::Delete -> Vector::remove
 -DList::AddEnd -> DoubleList::append()
 -DList::AddFront -> DoubleList::prepend()
 -DList::DeleteElements -> DoubleList::empty()
 -DList::EmptyList -> DoubleList::abandon()
 -Added DListVal, which is the 'by-value-type' double list that does
  not require a DListEl class to be defined.
 -Began conventions doc.
 -Rewrote the connection/selector code. It is now simpler and more generic.
  Docs on the way. The code is now in event.{h,cc}.  The select loop can
  reliably translate asyncronous signals into events in the event loop.
  However, code is not yet set up for processing the signal events.  The event
  loop handles signals using sigsetjmp/siglongjmp and avoides the classic unix
  select loop race condition with respect to signals.

Aapl 2.2.0 -- Feb 25, 2002
==========================
 -Added AvlSet. AvlSet is like AvlMap except you give only a key. It also has
  the set interface: Set, UnSet and IsSet that return boolean values and don't
  really care to speak about element in a tree.
 -Added walkable versions of avl tree. There is a walkable version of all
  existing trees. They are AvliTree, AvliMel, AvliMelKey, AvliMap, and AvliSet.
  Implemented by having the element inherit from DListEl and the tree inherit
  from DList. All operations on the tree remain O(log(N)). Maintaining the list
  pointers adds a constant amount of work.  Adds 8 bytes to each element (for a
  total of 24) and 12 bytes to the tree (for a total of 20).
 -Added a few more sections to docs for AvlTree

Aapl 2.1.0 -- Feb 22, 2002
==========================
 IMPORTANT: VectorC(int) no longer has the same meaning. Previously it set
 allocation length with no size. Now it sets size with no allocation so
 it is effectively useless as the table cannot grow it's allocation. It
 will assert fail. Use VectorC(int, int) instead. See Vector docs.

 -Further split Vector into all possible types of upresizing and down
  resizing. Existing Vectors remain unchanged except for constructor of
  VectorC. It is now possible to have a vector that up resizes linear and
  down exponential or up exponential and no down (constant), etc. Also
  added VectorR, which allows for runtime setting of how to resize.
 -Implemented a step for the linear vector. Now the following is true:
  If the sequence of size requests is linear, the number of resizes is
  also linear.
 -Wrote docs for Vector.

Aapl 2.0.0 -- Feb 17, 2002
==========================
 IMPORTANT: The 2.x.x version of Aapl is not backwards compatible with
 1.x.x version. Code that compiles against 1.x.x may not compile against
 2.x.x. The changes mostly amount to two things:

 1) Making data and function class member naming convetions consistent. All
 variables start with a lower case whereas functions, classes, constants
 and type names all start with an upper case.

 2) Shortening the symbols in resulting object code. Aapl classes achieved
 great versatility by providing many tempate parameters mostly with
 default values. Now this versatility is achieved by splitting the class
 up into many different classes, each with thier own 'flavour' of the data
 structure. This split is accomplished using preprocessor defines so there
 is no code duplication. Classes now have shorter names and only required
 template paramaters. This dramatically cuts down on long symbols and
 eliminates compiler warnings on platforms that restrict symbol lengths.

 -Made all data member names consistent with general coding style: constant
  identifiers start with upper case, variables (members too) start with lower.
 -Split up DoubleList into DList and DListMel. Goal is shorter
  symbol names by making two specialzed classes instead of one general class.
 -Split up AvlTree into 4 classes. Same goal as split of DoubleList.
  AvlTree now supports having multiple keys in the same object as well as
  multiple tree pointers. This means a single object can be in different
  trees that each use different keys.
 -General rearranging of code in fsmgraph and changing templates to result
  in shorter symbols. Try to keep symbol lengths < 255.
 -Split up Vector into 3 classes, one for each table type.
 -Split up VectorSet into 3 classes, one for each table type. Also renamed
  it to VectSet for conciseness.
 -Split up Binary Search table into 6 classes, one for each table type times
  regular bst table and bstmap. The bstmap has the template semantics of
  the old bstable. BsTable lets you give the whole object you want to put in
  the table in the same manner as vector and avltree.
 -Both AvlTree and BsTable use GetKey() functions in the element/element types.
  Previously they required that the key member be named 'key.' It can now
  be named anything, and it must be returned by GetKey.
 -Added copy constructor for AvlTree.
 -Added Avl test progs for the various flavours.
 -Started some real docs. Currently only AvlTree is documented.

Aapl 1.2.2 -- Feb 2, 2002
=========================
 -Started ChangeLog file.
 -Parser Gen is now gone from aapl. It is not generic reusable code. It now
  lives in Keller which will be released soon.

Aapl 1.2.1 -- Jan 29, 2002
==========================
 -Can choose between assertions that dump details of the assertion
  failure to the screen then segfault or just segfault using a define.
 -Bugfix in avltree insertion. Only showed up when re-using avl element.
  The insert routine was not nulling out appropriate pointers when adding
  a leaf element. Worked correctly when always newing up element (how avl tree
  is mostly used) as nulling out pointers is done by the element constructor.
 -File Buffer size up to 1K. Was at 10 bytes for debugging/testing purposes.
 -Transition count variables gone from fsm graph. Computing this is silly as
  the vectors that implement the out transitions 
 -Transition priorities routines in FSM Graph no longer operate as a 'delta'
  but instead as absolute.
 -Function keys are no long a duple, instead just one integer. Using two
  integers is overkill and not likely to be used. To acieve the same effect as
  a duple, break the bits of the single integer into multiple fields.
 -Allow the shifting of the priorities of start transitions to above some
  value. Useful before staring machines so that out transitions of a final
  state run before the transitions of the start state when going from a final
  state back into the machine.
 -Allow the clearing of transition functions.
 -Cleaned up FsmAttachStates: no longer reusing transitions when replacing,
  old trans are deleted and a new one is made. This eliminates the need for
  the ResetTransition routine.
 -When building machines, use max int and min int as the defaults for highIndex
  and lowIndex.
 -When building machines, transition 0 is always the error transition,
  no longer insert it into the transition list on demand.
 -When building machines, compute the global high and low index. Used by ragel.
 -Out priorities have a concept of being set vs not being set.
 -Concatenation and Star can now behave as if they do not cause leaving the fsm.
  Allows the user to turn off picking up of out transitions and out priorities.

Aapl 1.2 -- Aug 28, 2001
========================
 -Initial release.