VariableString.st
author Claus Gittinger <cg@exept.de>
Thu, 23 Nov 1995 02:23:34 +0100
changeset 124 d919bc2f0078
parent 112 3e18f2cfe430
child 130 c6b0235349fe
permissions -rw-r--r--
checkin from browser
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     1
"
4
1f66800df351 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
42
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
     3
	      All Rights Reserved
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     4
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    11
"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    12
124
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    13
nil subclass:#VariableString
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    14
	 instanceVariableNames:'contents'
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    15
	 classVariableNames:''
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    16
	 poolDictionaries:''
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    17
	 category:'Collections-Text'
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    18
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    19
31
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    20
!VariableString class methodsFor:'documentation'!
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    21
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    22
copyright
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    23
"
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    24
 COPYRIGHT (c) 1993 by Claus Gittinger
42
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
    25
	      All Rights Reserved
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    26
31
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    27
 This software is furnished under a license and may be used
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    28
 only in accordance with the terms of that license and with the
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    30
 be provided or otherwise made available to, or used by, any
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    31
 other person.  No title to or ownership of the software is
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    32
 hereby transferred.
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    33
"
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    34
!
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    35
31
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    36
documentation
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    37
"
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    38
    VariableStrings can grow and shrink - in contrast to Strings which are
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    39
    fixed in size - this may change in the future.
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    40
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    41
    WARNING: This class is a historic leftover and will vanish soon.
42
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
    42
	     Dont use it.
31
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    43
"
124
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    44
!
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    45
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    46
version
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    47
    ^ '$Header: /cvs/stx/stx/libbasic2/VariableString.st,v 1.14 1995-11-23 01:22:07 cg Exp $'
31
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    48
! !
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    49
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    50
!VariableString class methodsFor:'initialization'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    51
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    52
initialize
1
claus
parents: 0
diff changeset
    53
    "clear my superclass - this makes all messages be misunderstood"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    54
1
claus
parents: 0
diff changeset
    55
    self setSuperclass: nil
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    56
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    57
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    58
!VariableString class methodsFor:'instance creation'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    59
124
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    60
copyFrom:aString
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    61
    "return a new VariableString with contents copied from the argument"
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    62
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    63
    ^ self basicNew setContents:(String copyFrom:aString)
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    64
!
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    65
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    66
new
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    67
    "return a new VariableString - with size 0"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    68
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    69
    ^ self new:0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    70
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    71
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    72
new:size
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    73
    "return a new VariableString"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    74
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    75
    ^ (self basicNew) setContents:(String new:size)
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    76
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    77
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    78
!VariableString methodsFor:'accessing'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    79
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    80
at:index
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    81
    "return the element at index"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    82
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    83
    ^ contents at:index
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    84
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    85
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    86
at:index put:anObject
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    87
    "set the element at index"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    88
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    89
    ^ contents at:index put:anObject
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    90
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    91
124
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    92
!VariableString methodsFor:'converting'!
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    93
124
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    94
asStringCollection
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    95
    ^ contents asStringCollection
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    96
! !
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    97
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    98
!VariableString methodsFor:'copying'!
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    99
124
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   100
postCopy
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   101
    contents := contents copy
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   102
! !
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   103
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   104
!VariableString methodsFor:'error handling'!
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   105
124
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   106
doesNotUnderstand:aMessage
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   107
    "this is funny: all message we do not understand, are passed
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   108
     on to the string - so we do not have to care for all
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   109
     possible messages ...(thanks to the Message class)"
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   110
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   111
     ^ contents perform:(aMessage selector)
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   112
	  withArguments:(aMessage arguments)
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   113
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   114
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   115
!VariableString methodsFor:'filling & replacing'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   116
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   117
replaceFrom:start to:stop with:aCollection startingAt:repStart
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   118
    "reimplemented for speed
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   119
     - can use Strings fast replace if aCollection
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   120
       is String or VariableString"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   121
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   122
    |col|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   123
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   124
    col := aCollection.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   125
    (aCollection isKindOf:VariableString) ifTrue:[
42
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   126
	((stop - start + repStart) <= aCollection size) ifTrue:[
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   127
	    col := aCollection getContents
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   128
	]
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   129
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   130
    (col isMemberOf:String) ifTrue:[
42
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   131
	(stop <= (contents size)) ifTrue:[
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   132
	    contents replaceFrom:start to:stop with:col startingAt:repStart.
28
350f8e9493a4 *** empty log message ***
claus
parents: 22
diff changeset
   133
	    ^ self
42
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   134
	]
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   135
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   136
    ^ super replaceFrom:start to:stop with:aCollection startingAt:repStart
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   137
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   138
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   139
!VariableString methodsFor:'grow & shrink'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   140
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   141
grow:newSize
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   142
    |old oldSize|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   143
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   144
    oldSize := contents size.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   145
    (newSize < oldSize) ifTrue:[
42
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   146
	contents := contents copyTo:newSize
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   147
    ] ifFalse:[
42
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   148
	(newSize > oldSize) ifTrue:[
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   149
	    old := contents.
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   150
	    (newSize > (oldSize * 2)) ifTrue:[
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   151
		contents := String new:newSize
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   152
	    ] ifFalse:[
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   153
		contents := String new:(oldSize * 2)
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   154
	    ].
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   155
	    contents replaceFrom:1 to:oldSize
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   156
			    with:old startingAt:1
506596f9a1a8 *** empty log message ***
claus
parents: 36
diff changeset
   157
	]
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   158
    ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   159
! !
124
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   160
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   161
!VariableString methodsFor:'private'!
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   162
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   163
getContents
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   164
    "return the contents array"
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   165
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   166
    ^ contents
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   167
!
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   168
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   169
setContents:aString
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   170
    "set the contents"
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   171
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   172
    contents := aString
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   173
! !
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   174
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   175
!VariableString methodsFor:'queries'!
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   176
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   177
isFixedSize
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   178
    "return true if the receiver cannot grow - this will vanish once
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   179
     Arrays and Strings learn how to grow ..."
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   180
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   181
    ^ false
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   182
!
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   183
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   184
size
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   185
    ^ contents size
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   186
! !
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   187
d919bc2f0078 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   188
VariableString initialize!