CollectionBuilder.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 5148 80aed7148971
permissions -rw-r--r--
#FEATURE by cg class: Socket class added: #newTCPclientToHost:port:domain:domainOrder:withTimeout: changed: #newTCPclientToHost:port:domain:withTimeout:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5148
80aed7148971 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5099
diff changeset
     1
"{ Encoding: utf8 }"
80aed7148971 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5099
diff changeset
     2
5099
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
 COPYRIGHT (c) 1996 by Claus Gittinger
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
              All Rights Reserved
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 This software is furnished under a license and may be used
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
 hereby transferred.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic2' }"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
"{ NameSpace: Smalltalk }"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
ArrayedCollection subclass:#CollectionBuilder
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:'collections'
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	classVariableNames:''
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	category:'Collections-Sequenceable'
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!CollectionBuilder class methodsFor:'documentation'!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
copyright
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
 COPYRIGHT (c) 1996 by Claus Gittinger
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
              All Rights Reserved
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 This software is furnished under a license and may be used
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
 only in accordance with the terms of that license and with the
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
 be provided or otherwise made available to, or used by, any
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
 other person.  No title to or ownership of the software is
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
 hereby transferred.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
documentation
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    When building large collections by concatenation, this helper can speedup this operation.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    It non-destructively creates a list of the slices added during the concatenation process, 
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    thus (usually) reducing the amount of storage and time required to construct the collection.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    Especially, if the slices are constants (strings) and even reused (same string occurring multiple times),
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    the saving in memory mey be significant.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    However, there is a tradeof: the time to access, to enumerate and to query the size of
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    the resulting collection is slower. 
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    Therefore, this is (usually) only useful if a throw-away collection is
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    constructed to be used only a small number of times for enumeration (or writing to a file).
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    It is very similar to Java's StringBuffer, but can handle any kind of collection.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
    (however, please see also Stream / #streamContents:, for yet another (better?) way of building collections ...)
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
    [see also:]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
        WriteStream
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    [author:]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
        Claus Gittinger
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    [example:]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
        |coll|
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
        coll := CollectionBuilder new.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
        1 to:100000 do:[:i |
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
            coll addAll:#(1 2 3 4 5 6 7 8 9 0)
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
        ].
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
        coll
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
examples
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
  when building large collections by concatenation,
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
  the following standard creation is time consuming:
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
                                                                        [exBegin]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    Time millisecondsToRun:[
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
        |coll|
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
        coll := OrderedCollection new.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
        1 to:100000 do:[:i |
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
            coll addAll:i printString
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
        ]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    ]    
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
                                                                        [exEnd]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
  the following is faster, and does not actually create a new collection:
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
                                                                        [exBegin]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    Time millisecondsToRun:[
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
        |coll|
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
        coll := CollectionBuilder new.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
        1 to:100000 do:[:i |
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
            coll addAll:i printString
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
        ]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    ]     
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
                                                                        [exEnd]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
   Time to enumerate:
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
                                                                        [exBegin]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
    |coll|
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    coll := OrderedCollection new.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    1 to:100000 do:[:i |
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
        coll addAll:i printString
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    ].
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    Time millisecondsToRun:[
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
        coll do:[:each | each ].
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    ]     
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
                                                                        [exEnd]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
                                                                        [exBegin]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    |coll|
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    coll := CollectionBuilder new.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    1 to:100000 do:[:i |
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
        coll addAll:i printString
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
    ].
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    Time millisecondsToRun:[
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
        coll do:[:each | each ].
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    ]     
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
                                                                        [exEnd]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
! !
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
!CollectionBuilder class methodsFor:'instance creation'!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
withAll:collections and:aCollection
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    ^ self new withAll:collections and:aCollection
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
! !
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
!CollectionBuilder methodsFor:'accessing'!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
at:index
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    |collFirst collLast|
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    index < 1 ifTrue:[^ self subscriptBoundsError:index].
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    collFirst := 0.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    collections do:[:eachSlice |
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
        collLast := collFirst + eachSlice size.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
        index <= collLast ifTrue:[
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
            ^ eachSlice at:(index - collFirst)
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
        ].
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
        collFirst := collLast.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
    ].
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
    ^ self indexNotIntegerOrOutOfBounds:index
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
    "
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
     |c|
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
     c := CollectionBuilder new.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
     c := c , #(1 2 3 4).
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
     c := c , #(5 6 7 8).
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
     c := c , #(9 10 11 12).
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
     c inspect.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
     c at:13  
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    "
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
    "Modified: 1.2.1996 / 17:01:16 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
! !
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
!CollectionBuilder methodsFor:'adding & removing'!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
add:anObject
5148
80aed7148971 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5099
diff changeset
   169
    collections := collections copyWith:(Array with:anObject).
80aed7148971 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5099
diff changeset
   170
    ^ anObject
5099
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    "Created: 1.2.1996 / 17:09:15 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
addAll:aCollection
5148
80aed7148971 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5099
diff changeset
   176
    "add all elements of the argument, aCollection to the receiver.
80aed7148971 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5099
diff changeset
   177
     Returns the argument, aCollection."
80aed7148971 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5099
diff changeset
   178
5099
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
    collections isNil ifTrue:[
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
        collections := OrderedCollection with:aCollection
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    ] ifFalse:[
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
        collections add:aCollection
5148
80aed7148971 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5099
diff changeset
   183
    ].
80aed7148971 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5099
diff changeset
   184
    ^ aCollection
5099
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
    "Created: 1.2.1996 / 17:09:29 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
    "Modified: 1.2.1996 / 17:14:54 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
! !
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
!CollectionBuilder methodsFor:'copying'!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
, aCollection
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
    ^ CollectionBuilder withAll:collections and:aCollection
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
    "Created: 1.2.1996 / 16:43:18 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
! !
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
!CollectionBuilder methodsFor:'enumerating'!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
do:aBlock
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
    collections do:[:coll |
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
	coll do:aBlock
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    ]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
    "Created: 1.2.1996 / 17:05:36 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
keysAndValuesDo:aBlock
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
    |idx|
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
    idx := 1.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
    collections do:[:coll |
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
	coll do:[:element |
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
	    aBlock value:idx value:element.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
	    idx := idx + 1
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
	]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
    ]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
    "Created: 1.2.1996 / 17:06:13 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
! !
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
!CollectionBuilder methodsFor:'inspecting'!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
inspectorClass
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    "redefined to launch an OrderedCollectionInspector
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
     (instead of the default InspectorView)."
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    ^ OrderedCollectionInspectorView
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
    "Created: 1.2.1996 / 17:07:53 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
! !
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
!CollectionBuilder methodsFor:'private'!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
withAll:collections1 and:collections2
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
    collections1 isEmptyOrNil ifTrue:[
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
        collections := OrderedCollection with:collections2
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
    ] ifFalse:[
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
        collections := OrderedCollection withAll:collections1.
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
        collections2 notEmptyOrNil ifTrue:[
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
            collections add:collections2
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
        ].
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
    ].
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
    "Created: 1.2.1996 / 16:44:15 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
    "Modified: 1.2.1996 / 17:00:17 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
! !
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
!CollectionBuilder methodsFor:'queries'!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
size
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
    ^ collections inject:0 into:[:sumSoFar :subColl | sumSoFar + subColl size]
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
    "Created: 1.2.1996 / 16:42:31 / cg"
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
! !
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
!CollectionBuilder class methodsFor:'documentation'!
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
version_CVS
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
    ^ '$Header$'
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
! !
c173add04e6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262