------------------------------------------------------------------------------
LEDA-3.5 
------------------------------------------------------------------------------

 - bug in point::angle(q,r) (now reports an error for degenerate inputs)

 - bug in ch_hash::insert (returned illegal pointer)

 - bug in segment::distance(point) fixed  and missing
   rat_segment::sqr_distance(rat_point) inserted

 - bug in operator>>(random_source&,integer&)

 - bug in vector::operator=  (assignment of zero-dimensional vector)

 - missing copy constructor and assignment operator for node/edge_map

 - param_types.h: declared some of the GenPtr variables as "volatile"

 - problems when including string.h before any other header file

 - bug in graph::del_edge(e) for hidden edge e (incorrect degree of source)  

 - bug in leda_copy (missing initialization in non-template versions)

 - bug in window::choice_item() (for fixed (6,7,8) numbers of strings)

 - bug in node_set  (missing copy constructor and assignment operator)

 - bug in polygon::unit() fixed

 - bug in MAXFLOW (in presence of zero capacity edges) fixed

 - bug in VORONOI (wrong edge labels)

 - bug in set<T> symdiff operator  (% and %=)

 - bug in list::move_to_rear

 - PLANAR replaced by PLANAR0

 - bug in circle output/input operators fixed 

 - bug in straight line embedding algorithms (did not work for n < 3) 

 - bug in skilist memory allocation on 64bit machines

 - PLANAR_MAP::split_edge(edge e, vtype x)
   tried to assign node info x to an edge  

 - missing initialization in "triangulated_planar_graph"

 - bug in k_heap (parent computation failed for root)

------------------------------------------------------------------------------
LEDA-3.4.1 
------------------------------------------------------------------------------

 New (beta) version of GraphWin (see .../src/graphwin/Changes)

 Bug in PLANAR_MAP constructors fixed

 Bug in random_planar_graph fixed

 Bug in Is_Biconnected fixed

 changed type of arguments in Is_...(G) (graph_misc.h) to "const graph&"

 name conflict with "mutex":  renamed mutex to leda_mutex

 _os2.c : Makefile fixed and missing bitmap operations added

 polygon/rat_polygon  several bugs (union,area,...)            FIXED

 graph::size(face) always returned 0                           FIXED

 graph::write() produced self-loops for undirected graphs      FIXED

 INT<cmp> name conflicts with MFC                              FIXED

 array<int>::sort(cmp)  ignored cmp function                   FIXED  

 graph::compute_faces() did not delete existing list of faces  FIXED

 list::rank()  did not work at all                             FIXED      

 window::string_item()  did not update string length           FIXED
                        now strings can bed edited using
                        mouse and cursor keys

------------------------------------------------------------------------------
LEDA-3.4-p1  (patch1) 
------------------------------------------------------------------------------

- work-around for hpc++ bug:

    new versions of rat_vector.h und _rat_vector.c
    (moved constructors into c-file)
    inserted some casts from integer to rational in _rational.c

- missing }*/ in bigfloat.h ( after todouble() ) inserted


- real.h
   made sign(real) inline


------------------------------------------------------------------------------
LEDA-3.4 (02.09.1996)
------------------------------------------------------------------------------

the following problems have been fixed:

- Color allocation problem

- memory problem in graph

- round for rationals

- rotation bug in rb_tree

- uninitialized memory

- missing constructors for p_queue and r_heap

- bug in k_heap for  k>2   

- shared libs for LINUX  

- Bug in hashing

- Bug in panel::int_item("...",x,1,1);  

- Bug in integer bitwise or                             

- Bug in line::perpendicular 

- Bug im sweep Algorihtmus

- Bug Tree Collection

- Bug when using colors without opening window

- problem with m_heap::print

- Iterators and g++ warnings


------------------------------------------------------------------------------
LEDA-3.3.1 (09.04.1996)
------------------------------------------------------------------------------

BUG: lconfig script 

FIX: replace in lines 104 and 107 of <LEDA>/lconfig 
     src/Make.pro by prog/Make.pro


BUG: memory leak in graph copy constructor and assignment

FIX: delete or comment out lines 70 and 77 in <LEDA>/src/_graph.c
     (70)  memory_allocate_block(sizeof(node_struct),n);
     (77)  memory_allocate_block(sizeof(edge_struct),m);


BUG: window destructor should be declared virtual 

FIX: replace in line 288 of <LEDA>/incl/LEDA/base_window.h
        ~BASE_WINDOW();
     by
        virtual ~BASE_WINDOW();


BUG: planar_map(const planar_map&) copy constructor missing

FIX: insert after line 140 in <LEDA>/incl/LEDA/planar_map.h the line
        planar_map(const planar_map& M) : graph(M) { make_planar_map(); }


BUG: memory leak in Karatsuba multiplication (_integer.c)

FIX: insert in <LEDA>/src/numbers/_integer.c after line 813 the line
       delete[] trp;


BUG: problem with grid_mode cursor in windows in presence of 
     other (panel) windows

FIX: insert in file <LEDA>/src/window/_base_window.c the following 
     two lines at the beginning of  function void BASE_WINDOW::cursor(void) 

     if (this != read_window) return;
     x_set_read_gc(draw_win);



PROBLEM: "shadow" warnings by g++ (2.7.2)

FIX:     remove the definition of the __NEW_SCOPE_RULES__ macro 
         in <LEDA/system.h>



BUG: error in gen_array::binary_search

FIX: replace in <LEDA>/src/basic/_array.c the gen_array::binary_search  by

int gen_array::binary_search(GenPtr x)
{ int l = 0;
  int r = sz-1;
 
  if (int_type())
    { int x_i = LEDA_ACCESS(int,x);
      while (l <= r)
      { int m = (l+r)/2;
        int m_i = LEDA_ACCESS(int,v[m]);
        if (x_i == m_i) return m+Low;
        if (x_i > m_i)
           l = m+1;
        else
           r = m-1;
       }
     }
  else
     while (l <= r)
     { int m = (l+r)/2;
       int c = cmp(x,v[m]);
       if (c == 0) return m+Low;
       if (c > 0)
          l = m+1;
       else
          r = m-1;
      }
 
  return  Low-1;
}



PROBLEM: conflicts with "node_data" and "edge_data" macros
         in REDEFINE_NAMES.h and <LEDA/node/edge_map.h>

FIX:     delete all occurences of these two macros



PROBLEM: cannot construct and delete interval sets in the dynamic memory
         using the new and delete operators

FIX:     remove "LEDA_MEMORY(range_tree)" from <LEDA/impl/range_tree.h>



PROBLEM: compilation problems with microsoft visual c++

FIX:     replace <strstream.h> by <strstrea.h>, undefine __TEMPLATE_FUNCTIONS__
         in <LEDA/system.h>,  use /c option before /Tp option in make.src



PROBLEM: missing documentation of set join,intersect,difference operations
FIX:     added manual descriptions in <LEDA/set.h>


PROBLEM: output statement (cout << ...) in _rational.c
FIX:     remove it



PROBLEM: memory leak in graph::clear()
FIX:     replace in <LEDA>/src/graph/_graph.c line  193
            forall(v,v_list) delete v;
         by
            forall(v,v_free) delete v;

PROBLEM: plan_demo program crashes in presence of a K5 Kuratowski graph
FIX:     substitute in file prog/demo/plan_demo.c line 342
           forall_nodes(v,G) if (G.degree(v) == 3) break;
         by
           forall_nodes(v,G) 
              if (v == G.last_node() || G.degree(v) == 3) break;
     
------------------------------------------------------------------------------
 LEDA-3.3 (15.02.96)
------------------------------------------------------------------------------

Bugs have been fixed in

- basic
     string::operator[](int)
     string::string(const char*, const char*)
     real/bigfloat (pow2 problem)
     integer::random

- dictionaries
     h_array 
     map

- graph
    read/write
    copy_graph
    operator=
    make_directed()
    clear
    generators

- planar_map
    operator=
    copy constructor

-graph_alg
    bellman_ford
    planarity test
    min_cut

-geometry
    rat_point
    circle::intersection
    line::perpendicular
    segment::intersection
    polygon::unite
    DELAUNAY_TRIANG

- windows 
    panel string item
    nested panels (menues)

- installation
    problem with REDEFINE.h fixed



------------------------------------------------------------------------------
 LEDA  3.2.3  (18.9.95)
------------------------------------------------------------------------------

- bug in sweep_segments fixed
- missing initialization in function template "Convert"
- bug in string::operator[] fixed
- bug in integer cmp fixed


------------------------------------------------------------------------------
 LEDA  3.2.2  (01.9.95)
------------------------------------------------------------------------------

- node_pq::member   returned always true
- rat_segment::intersection(rat_segment)
- intersection(rat_segment,rat_segment)  for vertical segments
- array2: missing copy-constructor and assignment operator inserted
- ugraph::first_adj_edge(node v)
- ugraph::last_adj_edge(node v)
- point,rat_point,segment,rat_segment (sign of the orientation primitive)
- h_array (empty array now has default size of 1 instead of 512)
- polygon::unite


------------------------------------------------------------------------------
 LEDA  3.2.1 (27.7.95)
------------------------------------------------------------------------------

 - segment: orientation
 - missing destructor for handle_base
 - forall - macro 
 - list::split operation 
 - iteration for constant sets
 - bug in MIN_CUT graph algorithm 
 - bug in orientation(segment,point) 
 - polygon::intersection and polygon::inside rewritten
 - bug in window grid drawing


------------------------------------------------------------------------------
 LEDA  3.2    (7.7.95)
------------------------------------------------------------------------------


- SEGMENT_INTERSECTION

            now also works in case of "degenerate" input

- graphs
            graph::cyclic_in_succ, graph::cyclic_in_pred,
            graph::first_adj_edge, and graph::last_adj_edge fixed

            new_edge(e1,e2,dir1,dir2) fixed

            copy constructor and assingment now preserve order of 
            adjacency lists

            missing implementation of graph::in_edges(v) included

            bug in copy constructor of node/edge_array and node/edge_map fixed

            b_node_pq: first insert now initalizes minimum correctly

            planar_map::split_edge fixed
  


- param_types
             one-word class types
             64 bit architectures

- h_array
            iteration (forall_defined) now works

- set
           copy constructor and operator=
           (bug in bin_tree::copy_tree fixed)


- map<I,E>  destructor now deletes E's
            bug in rehash fixed

- array
            array::read(istream in) replaced by  array::read(istream& in)

- panel
            panel("...",w,h)   now creates a panel with width w and height h

 
- skiplist  change_inf now destroys old and copies new information
 
- matrix    memory leak in triang fixed




------------------------------------------------------------------------------
Version 3.1.2       (3.02.95)
------------------------------------------------------------------------------

-list.h:   made list_item list::operator[](int i)  const
-string.h: made operator+ a friend function
-map.h:    replace int(x)   by  int(Convert(x))
-graph.h:  replace in line 258 and 268 "next_power(i)"  by "next_power(i+1)"
-integer.c: replace line 1752 { cout << "0"; by { out << "0";
            replace line 1769 if (x.PTR->sign == NEGATIVE) cout << "-";
-real.c: many changes

SUNPRO C++ (use 4.0.1 NOT 4.0, use -pto flag )
- do not use assembler code in _string.c
- define __svr4__ if __SVR4 is defined
- use format_string variant of string constructor
- changes to avoid some of the "something hides something" warnings

------------------------------------------------------------------------------
Version 3.1.1       (27.01.95)
------------------------------------------------------------------------------

 array.h:     operator[] now calls gen_array::entry (instead of inf)
 edge_set.h:  node_array<list_item> replaced by edge_array<list_item>
 list.h:      cmp_ptr set to nil in list::search()
 list.h:      missing app - function inserted.
 node_pq.h    print_inf  now prints index of node
 dlist.h:     replaced EOF by char(EOF) (problems with EOF <0)
 _g_inout.c:  read & write for user defined node/edge types fixed
 _g_update.c: infinite loop in insert_reverse_edges eliminated
 _skiplist.c: locate_succ, locate fixed
 _integer.c:  memory leak in integert:integer(double) fixed
 _real.c:     special floating point functions calls replaced
 _random.c:   BSD Code for random/srandom included 
 _basic.c:    usleep replaced by sleep
 _g_map.c:    table is deleted only if table_size > 0
 _bin_tree.c: copy constructor now sets corr-pointer of rightmost leaf
 Type_Name function defined for basic LEDA types (point,string, ...)

 Makefiles: _sparc.s will be assembled only on sparc machines

------------------------------------------------------------------------------
Version 3.1
------------------------------------------------------------------------------

16.01.95    array::operator=  fixed

13.01.95    graph::read and graph::write did not work for unparameterized
            graphs, fixed. 

13.01.95    node_set edge_set rewritten
            int_set: hard coded word size replaced by sizeof-call

 6.01.95    list<T>::sort(cmp_func), list<T>::bucket_sort(ord_func)
            list<T>::min(cmp_func), list<T>::max(cmp_func), 
            list<T>::apply(app_func) did not work for types with
            sizof(T) > sizeof(void*); bug is fixed.

            array::sort(cmp_func), array::sort(l,h,cmp_func)
            array::binary_search(cmp_func), same problem as in lists fixed

21.11.94    bug in vector::operator=(const vector&) fixed
            (old (d) and new (n) dimensions exchanged)

17.11.94    bug in rs_tree (set<T>) copy constructor fixed

15.11.94    LEDA_MEMORY: operator new & delete now use the size argument 

07.10.94    bug in array copy constructor fixed
            memory leak in list::assign() fixed
            polygon CONVEX_HULL(list<point>)  new algorithm (Graham's Scan)
            bugs in segment::intersection() and line::intersection() fixed
        
29.09.94    bug in binary heaps (negative integer keys) fixed

28.09.94    UGRAPH::assign(node/edge,...) fixed

 6.09.94    bug in list<node> graph::adj_nodes() (undirected graphs) fixed 

 8.08.94    Iteration (forall_defined) for h_arrays 

 4.08.94    some problems in _leda_panel.c fixed (slider items, buttons, ...)

11.07.94    Multi-definition problem with read_mouse(window, ...) and g++ fixed

22.03.94    bug in skiplist copy constructor fixed

22.12.93    memory leaks in leda panels 

21.12.93    nested forall-loops

17.12.93    string::read now can read strings of arbitrary length

11.10.93    made dlist::bucket_sort stable
            corrected return value of COMPUTE_CORRESPONDENCE 

08.09.93    memory bug in dp_hash (dynamic perfect hashing) fixed

12.08.93    k_heap::del_item fixed 

25.06.93    made rs_tree::change_inf (dictionary) clear old and copy new 
            information 

16.06.93    dlist::search (replaced != by call of virtual cmp function)

07.06.93    line::intersection (used to report intersection of parallel lines)

01.06.93    fixed bug in queue::append (replaced Convert by Copy)

05.05.93    bugs in MAX_WEIGHT_BIPARTITE_MATCHING fixed (by M. Paul)

05.04.93    prio.h: added missing ostream argument cout to Print calls

12.03.93    stack::push(x)    replaced Convert(x) by Copy(x)

09.03.93    segment::angle()  returns zero for segments of length zero

05.03.93    memory leak in draw_(filled_)polygon fixed

25.01.93    bug in ab_tree::clear() fixed (forgot to set counter to zero)

30.12.92    made dlist update operations protected

20.12.92    changed type "SIG_PF" in basic.h to "LEDA_SIG_PF"

07.12.92    missing operation ugraph::read(istream&) inserted



------------------------------------------------------------------------------
Version 3.0
------------------------------------------------------------------------------

09.11.92    Convert and Access for parameter types of size smaller than 
            pointers (e.g. char, short) fixed

16.07.92    bug with colinear points in delaunay_tree, VORONOI, point_set, ...
            fixed

27.05.92    MAX_WEIGHT_BIPARTITE_MATCHING(double) (_mwb_matching.c)
            fixed precicision problem that caused a negative loop in DIJKSTRA

19.05.92    list::sort now works for lists of length 1

12.05.92    type conversion for "char" (Copy,Convert,Access, ...)  fixed


------------------------------------------------------------------------------
Version 2.2
------------------------------------------------------------------------------

27.04.92    matrix::operator=(const matrix&) 
            matrix::triang()

17.04.92    lost memory bug in string::operator+ fixed   (Nicolas Caillaud)

16.04.92    made all destructors virtual

13.04.92    bug in GRAPH::assign(node/edge,vtype/etype) fixed
            made operator<< and operator>> for circles reverse ops

11.04.92    copy-bug in graph::operator=() and graph(const graph&) fixed


------------------------------------------------------------------------------
Version 2.1
------------------------------------------------------------------------------

16.12.91    fixed Copy bug for list, GRAPH, and UGRAPH

10.12.91    defined read(write)_node(edge)_entry for UGRAPH


28.11.91    made void*-functions (append,push, ....) in dlist, graph
            and ugraph protected

12.11.91    vector/matrix subtypes for arrays
            operator=  & operator== now may be called for objects with
            differnt dimensions


11.11.91    Copy(vector&) ---> Copy(const vector&)
            Copy(matrix&) ---> Copy(const matrix&)


31.10.91    string& string::operator=(const char* s)
            Bug: Zugriff auf deallocierten Speicher fuer p->s = s


28.10.91    in bool line::operator==(const line&)
            Bug: funktionierte nicht fuer 2 vertikale Linien

