SequenceWithSentinel.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 3019 9daef2211d2d
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:
1866
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
        Jun430 (2002/05/28) 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
        Copyleft 1996-2002 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
            AOKI Atsushi, ODA Tomohiro, HOSHI Takanori, NISHINAKA Yoshiyuki, 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
            YAMADA Ryousuke, WATANABE Katsuhiro, Ankur J. Chavda, NISHIHARA Satoshi, 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
            MATSUDA Ryouichi, MATSUO Minoru, Brent N. Reeves, ASAOKA Hiroko, and TANAKA Shinichi.
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
"{ Package: 'stx:libbasic2' }"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
SequenceableCollection subclass:#SequenceWithSentinel
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
	instanceVariableNames:'sequence sentinel'
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
	classVariableNames:''
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	poolDictionaries:''
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	category:'Collections-Sequenceable'
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
!SequenceWithSentinel class methodsFor:'documentation'!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
copyright
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
        Jun430 (2002/05/28) 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
        Copyleft 1996-2002 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
            AOKI Atsushi, ODA Tomohiro, HOSHI Takanori, NISHINAKA Yoshiyuki, 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
            YAMADA Ryousuke, WATANABE Katsuhiro, Ankur J. Chavda, NISHIHARA Satoshi, 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
            MATSUDA Ryouichi, MATSUO Minoru, Brent N. Reeves, ASAOKA Hiroko, and TANAKA Shinichi.
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
    "Modified: / 27-03-2007 / 11:31:36 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
documentation
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
    A collection with a default value for out-of-bounds accessed values.
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
    "Created: / 27-03-2007 / 11:32:14 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
examples
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
                                                                [exBegin]
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    |coll|
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    coll := SequenceWithSentinel on:#(10 20 30 40 50) sentinel:'invalid'.
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    Transcript show:'1->'; showCR:(coll at:1).
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    Transcript show:'5->'; showCR:(coll at:5).
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    Transcript show:'6->'; showCR:(coll at:6).
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    coll do:[:each | Transcript showCR:each].
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
                                                                [exEnd]
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    "Created: / 27-03-2007 / 11:32:14 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
! !
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!SequenceWithSentinel class methodsFor:'instance creation'!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
new
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    self shouldNotImplement
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    "Modified: / 27-03-2007 / 11:36:32 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
on: aSequence sentinel: anObject 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    "return a new collection based on aSequence but with invalid bounds-accesses returning abObject"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    | newSequence |
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    newSequence := self basicNew.
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    newSequence sequence: aSequence sentinel: anObject.
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    ^ newSequence
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    "Modified: / 27-03-2007 / 11:38:05 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
! !
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
!SequenceWithSentinel methodsFor:'accessing'!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
at: anIndex
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    "return the element at anIndex, or sentinel if the index is invalid"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
    ^ (anIndex between:1 and:self size)
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
        ifTrue: [sequence at: anIndex]
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
        ifFalse: [sentinel]
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    "Modified: / 27-03-2007 / 11:33:23 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
at: anIndex put: anObject 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    ^ sequence at: anIndex put: anObject
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    "Modified: / 27-03-2007 / 11:33:59 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
size
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    "answer my size"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    ^ sequence size
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
    "Modified: / 27-03-2007 / 11:34:22 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
! !
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
!SequenceWithSentinel methodsFor:'enumeration'!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
do:aBlock
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    sequence do:aBlock
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    "Created: / 27-03-2007 / 11:34:46 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
! !
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
!SequenceWithSentinel methodsFor:'growing'!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
grow:howBig
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    sequence grow:howBig
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    "Created: / 27-03-2007 / 11:35:40 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
! !
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
!SequenceWithSentinel methodsFor:'private'!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
sentinel: anObject 
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    "set the sentinel - the value returned for invalid indices"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
    sentinel := anObject
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
    "Modified: / 27-03-2007 / 11:33:53 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
sequence: aSequence
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    "set the underlying collection"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    sequence := aSequence
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    "Modified: / 27-03-2007 / 11:34:10 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
sequence: aSequence sentinel: aSentinelValue
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    "set the underlying collection and the sentinel (default)"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    sequence := aSequence.
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    sentinel := aSentinelValue.
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    "Created: / 27-03-2007 / 11:37:24 / cg"
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
! !
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
3019
9daef2211d2d added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 1866
diff changeset
   146
!SequenceWithSentinel methodsFor:'testing'!
9daef2211d2d added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 1866
diff changeset
   147
9daef2211d2d added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 1866
diff changeset
   148
isFixedSize
9daef2211d2d added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 1866
diff changeset
   149
    "return true if the receiver cannot grow"
9daef2211d2d added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 1866
diff changeset
   150
9daef2211d2d added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 1866
diff changeset
   151
    ^ sequence isFixedSize
9daef2211d2d added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 1866
diff changeset
   152
! !
9daef2211d2d added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 1866
diff changeset
   153
1866
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
!SequenceWithSentinel class methodsFor:'documentation'!
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
version
3019
9daef2211d2d added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 1866
diff changeset
   157
    ^ '$Header: /cvs/stx/stx/libbasic2/SequenceWithSentinel.st,v 1.2 2013-06-25 11:23:55 cg Exp $'
1866
624d906d1f6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
! !
3019
9daef2211d2d added isFixedSize query
Claus Gittinger <cg@exept.de>
parents: 1866
diff changeset
   159