AATree.st
author Claus Gittinger <cg@exept.de>
Thu, 13 Oct 2016 12:00:39 +0200
changeset 4114 0d2e2a31ff6d
parent 3537 4139da619f6e
child 4116 c71eb5c37a14
permissions -rw-r--r--
#DOCUMENTATION by cg class: AATree comment/format in: #documentation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2279
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
     1
"
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
     2
 COPYRIGHT (c) 2009 by eXept Software AG
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
     3
              All Rights Reserved
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
     4
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
     5
 This software is furnished under a license and may be used
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
     6
 only in accordance with the terms of that license and with the
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
     8
 be provided or otherwise made available to, or used by, any
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
     9
 other person.  No title to or ownership of the software is
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    10
 hereby transferred.
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    11
"
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic2' }"
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
3537
4139da619f6e class: AATree
Claus Gittinger <cg@exept.de>
parents: 2783
diff changeset
    14
"{ NameSpace: Smalltalk }"
4139da619f6e class: AATree
Claus Gittinger <cg@exept.de>
parents: 2783
diff changeset
    15
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
BinaryTree subclass:#AATree
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:''
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	classVariableNames:''
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
2761
d53b683402c1 category changes
Claus Gittinger <cg@exept.de>
parents: 2760
diff changeset
    20
	category:'Collections-Ordered-Trees'
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!AATree class methodsFor:'documentation'!
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
2279
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    25
copyright
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    26
"
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    27
 COPYRIGHT (c) 2009 by eXept Software AG
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    28
              All Rights Reserved
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    29
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    30
 This software is furnished under a license and may be used
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    31
 only in accordance with the terms of that license and with the
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    33
 be provided or otherwise made available to, or used by, any
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    34
 other person.  No title to or ownership of the software is
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    35
 hereby transferred.
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    36
"
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    37
!
cb00c64a12f9 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 2266
diff changeset
    38
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
documentation
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
"
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    An AA tree is a form of balanced tree used for storing and retrieving ordered data efficiently.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    AA trees are named for Arne Andersson, their inventor.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    AA trees are a variation of the red-black tree, which in turn is an enhancement to the 
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    binary search tree. One caveat with the implementation is that it needs an extra level instvar
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    in the treeNode; this results in 25% more storage overhead as compared to a Red/Black or plain Binary tree.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    For performance data, see performance.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
3537
4139da619f6e class: AATree
Claus Gittinger <cg@exept.de>
parents: 2783
diff changeset
    49
    Usage:
4139da619f6e class: AATree
Claus Gittinger <cg@exept.de>
parents: 2783
diff changeset
    50
        As seen in the performance charts, AA trees offer better average and worst case
4139da619f6e class: AATree
Claus Gittinger <cg@exept.de>
parents: 2783
diff changeset
    51
        performance, with a lower best case performance. 
4139da619f6e class: AATree
Claus Gittinger <cg@exept.de>
parents: 2783
diff changeset
    52
        Thus providing a more predictable performance (within a factor of 2, as opposed to
4139da619f6e class: AATree
Claus Gittinger <cg@exept.de>
parents: 2783
diff changeset
    53
        a much wider range for sortedCollections)
4139da619f6e class: AATree
Claus Gittinger <cg@exept.de>
parents: 2783
diff changeset
    54
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
    [author:]
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
        Original algorithm by Arne Andersson
4114
0d2e2a31ff6d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
    57
        ported from wikipedia to Smalltalk code by Claus Gittinger
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
"
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
!
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
examples
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
"
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
                                                                [exBegin]
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    |coll|
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    coll := AATree new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
    (1 to:10) do:[:i | coll add:i].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    coll addAll:(20 to:30).
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    coll inspect   
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
                                                                [exEnd]
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
                                                                [exBegin]
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    |tree|
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    tree := AATree new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    tree add:'hello'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    tree add:'aaaa'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    tree add:'AAAb'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    tree add:'aaaC'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    tree add:'world'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    tree asOrderedCollection     
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
                                                                [exEnd]
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
                                                                [exBegin]
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
    |tree|
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    tree := AATree sortBlock:[:a :b | a asLowercase < b asLowercase].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    tree add:'hello'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    tree add:'aaaa'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    tree add:'AAAb'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    tree add:'aaaC'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    tree add:'world'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
    tree asOrderedCollection     
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
                                                                [exEnd]
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    timing 1:
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
                                                                [exBegin]
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    |N randomNumbers coll1_BT coll2_AT coll3_SC t1_BT t2_AT t3_SC|
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
    N := 1000000.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    randomNumbers := (1 to:N) collect:[:i | Random nextInteger].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    t1_BT := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
        coll1_BT := BinaryTree new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
        coll1_BT addAll:randomNumbers
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    coll1_BT := nil.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    t2_AT := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
        coll2_AT := AATree new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
        coll2_AT addAll:randomNumbers
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    coll2_AT := nil.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
    t3_SC := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
        coll3_SC := SortedCollection new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
        coll3_SC addAll:randomNumbers
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    coll3_SC := nil.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
    randomNumbers := nil.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
    Transcript show:'Time to insert random '; show:N; show:' into SortedCollection: '; show:t3_SC; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    Transcript show:'Time to insert random '; show:N; show:' into BinaryTree: '; show:t1_BT; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    Transcript show:'Time to insert random '; show:N; show:' into AATree: '; show:t2_AT; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
    t1_BT := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
        coll1_BT := BinaryTree new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
        coll1_BT addAll:(1 to:100000).
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    coll1_BT := nil.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    t2_AT := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
        coll2_AT := AATree new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
        coll2_AT addAll:(1 to:100000)
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    coll2_AT := nil.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
    t3_SC := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
        coll3_SC := SortedCollection new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
        coll3_SC addAll:(1 to:100000)
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
    coll3_SC := nil.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
    Transcript show:'Time to insert ordered '; show:N; show:' into SortedCollection: '; show:t3_SC; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
    Transcript show:'Time to insert ordered '; show:N; show:' into BinaryTree: '; show:t1_BT; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
    Transcript show:'Time to insert ordered '; show:N; show:' into AATree: '; show:t2_AT; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    t1_BT := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
        coll1_BT := BinaryTree new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
        coll1_BT addAll:(100000 downTo:1).
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    coll1_BT := nil.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
    t2_AT := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
        coll2_AT := AATree new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
        coll2_AT addAll:(100000 downTo:1)
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    coll2_AT := nil.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    t3_SC := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
        coll3_SC := SortedCollection new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
        coll3_SC addAll:(100000 downTo:1)
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    coll3_SC := nil.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
    ObjectMemory garbageCollect.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
    Transcript show:'Time to insert reverse ordered '; show:N; show:' into SortedCollection: '; show:t3_SC; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
    Transcript show:'Time to insert reverse ordered '; show:N; show:' into BinaryTree: '; show:t1_BT; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
    Transcript show:'Time to insert reverse ordered '; show:N; show:' into AATree: '; show:t2_AT; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
                                                                [exEnd]
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
  timing 2:  
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
                                                                [exBegin]
2760
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   185
    |allSelectors coll1_SC coll2_BT coll3_AT coll4_Trie t1_SC t2_BT t3_AT t4_Trie|
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
    allSelectors := OrderedCollection new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
    Smalltalk allClassesDo:[:cls |
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
        cls instAndClassSelectorsAndMethodsDo:[:sel :mthd |
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
            allSelectors add:sel.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
        ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
    ].
2760
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   193
    Transcript show:'Unique selectors: '; show:allSelectors asSet size; showCR:''.
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
    t1_SC := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
        coll1_SC := SortedCollection new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
        allSelectors do:[:sel |
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
            coll1_SC add:sel
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
        ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
    Transcript show:'Time to insert '; show:coll1_SC size; show:' selectors into SortedCollection: '; show:t1_SC; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    t2_BT := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
        coll2_BT := BinaryTree new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
        allSelectors do:[:sel |
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
            coll2_BT add:sel
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
        ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
    Transcript show:'Time to insert '; show:coll2_BT size; show:' selectors into BinaryTree: '; show:t2_BT; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
    t3_AT := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
        coll3_AT := BinaryTree new.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
        allSelectors do:[:sel |
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
            coll3_AT add:sel
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
        ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
    Transcript show:'Time to insert '; show:coll3_AT size; show:' selectors into AATree: '; show:t3_AT; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
2760
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   219
    t4_Trie := Time millisecondsToRun:[
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   220
        coll4_Trie := TrieCollection new.
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   221
        allSelectors do:[:sel |
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   222
            coll4_Trie add:sel
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   223
        ].
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   224
    ].
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   225
    Transcript show:'Time to insert '; show:coll4_Trie size; show:' selectors into Trie: '; show:t4_Trie; showCR:'ms'.
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   226
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
    t1_SC := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
        allSelectors do:[:sel |
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
            coll1_SC remove:sel
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
        ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
    self assert:(coll1_SC isEmpty).
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
    Transcript show:'Time to remove selectors from SortedCollection: '; show:t1_SC; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
    t2_BT := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
        allSelectors do:[:sel |
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
            coll2_BT remove:sel
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
        ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
    self assert:(coll2_BT isEmpty).
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
    Transcript show:'Time to remove selectors from BinaryTree: '; show:t2_BT; showCR:'ms'.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
    t3_AT := Time millisecondsToRun:[
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
        allSelectors do:[:sel |
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
            coll3_AT remove:sel
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
        ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
    self assert:(coll3_AT isEmpty).
2760
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   249
    Transcript show:'Time to remove selectors from AATree: '; show:t3_AT; showCR:'ms'.
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   250
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   251
    t4_Trie := Time millisecondsToRun:[
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   252
        allSelectors do:[:sel |
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   253
            coll4_Trie remove:sel
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   254
        ].
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   255
    ].
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   256
    self assert:(coll4_Trie isEmpty).
6e119df458a9 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 2404
diff changeset
   257
    Transcript show:'Time to remove selectors from Trie: '; show:t4_Trie; showCR:'ms'.
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
                                                                [exEnd]
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
"
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
!
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
performance
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
"
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
    Time to insert random 100000 individually into SortedCollection: 6037ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
    Time to insert random 100000 en-bloque into SortedCollection: 172ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
    Time to insert in order 100000 individually into SortedCollection: 31ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
    Time to insert in order 100000 en-bloque into SortedCollection: 125ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
    Time to insert in reverse order 100000 individually into SortedCollection: 93ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
    Time to insert in reverse order 100000 en-bloque into SortedCollection: 125ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
    Time to remove in random order 100000 from SortedCollection: 6380ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
    Time to remove in order 100000 from SortedCollection: 109ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
    Time to remove in reverse order 100000 from SortedCollection: 125ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
    Time to insert random 100000 individually into AATree: 281ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
    Time to insert random 100000 en-bloque into AATree: 265ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
    Time to insert in order 100000 individually into AATree: 281ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
    Time to insert in order 100000 en-bloque into AATree: 328ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
    Time to insert in reverse order 100000 individually into AATree: 203ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
    Time to insert in reverse order 100000 en-bloque into AATree: 218ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
    Time to remove in random order 100000 from AATree: 452ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
    Time to remove in order 100000 from AATree: 312ms
2404
9a2681a6525c changed: #performance
Claus Gittinger <cg@exept.de>
parents: 2279
diff changeset
   283
    Time to remove in reverse order 100000 from AATree: 499ms
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
    Time to insert random 100000 individually into BinaryTree: 156ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
    Time to insert random 100000 en-bloque into BinaryTree: 156ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
    Time to insert in order 100000 individually into BinaryTree: 195921ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
    Time to insert in order 100000 en-bloque into BinaryTree: 205266ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
    Time to insert in reverse order 100000 individually into BinaryTree: 202271ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
    Time to insert in reverse order 100000 en-bloque into BinaryTree: 197684ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
    Time to remove in random order 100000 from BinaryTree: 234ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
    Time to remove in order 100000 from BinaryTree: 78ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
    Time to remove in reverse order 100000 from BinaryTree: 78ms
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
"
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
! !
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
!AATree methodsFor:'adding & removing'!
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
add:anObject
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
    "add the argument, anObject to the receiver.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
     Returns the object (sigh).
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
     WARNING: do not add/remove elements while iterating over the receiver.
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
              Iterate over a copy to do this."
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
    treeRoot isNil ifTrue:[
2769
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   307
        treeRoot := self treeNodeClass data:anObject level:1.
2783
4d98d582fa06 changed: #add:
Claus Gittinger <cg@exept.de>
parents: 2780
diff changeset
   308
    ] ifFalse:[
4d98d582fa06 changed: #add:
Claus Gittinger <cg@exept.de>
parents: 2780
diff changeset
   309
        treeRoot := treeRoot insert:anObject usingSortBlock:sortBlock.
2266
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
    ].
d04df8bb00ea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
    ^ anObject "sigh - collection protocol"
2769
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   312
2783
4d98d582fa06 changed: #add:
Claus Gittinger <cg@exept.de>
parents: 2780
diff changeset
   313
    "Modified: / 05-08-2012 / 12:36:26 / cg"
2769
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   314
!
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   315
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   316
treeNodeClass
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   317
    ^ AATreeNode
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   318
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   319
    "Created: / 05-08-2012 / 11:39:29 / cg"
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   320
! !
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   321
2780
Claus Gittinger <cg@exept.de>
parents: 2769
diff changeset
   322
!AATree class methodsFor:'documentation'!
2769
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   323
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   324
version
4114
0d2e2a31ff6d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
   325
    ^ '$Header$'
2769
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   326
!
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   327
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   328
version_CVS
4114
0d2e2a31ff6d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
   329
    ^ '$Header$'
2769
711bb03cb3c1 node class is private
Claus Gittinger <cg@exept.de>
parents: 2761
diff changeset
   330
! !
3537
4139da619f6e class: AATree
Claus Gittinger <cg@exept.de>
parents: 2783
diff changeset
   331