SkipListNode.st
author Claus Gittinger <cg@exept.de>
Tue, 25 Jun 2019 14:28:51 +0200
changeset 5050 44fa8672d102
parent 4398 e87e78eb5234
permissions -rw-r--r--
#DOCUMENTATION by cg class: SharedQueue comment/format in: #next #nextWithTimeout:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4398
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
Object subclass:#SkipListNode
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:'pointers object'
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	category:'Collections-Ordered-Trees-Private'
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
!SkipListNode class methodsFor:'instance creation'!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
new: maxLevel
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	^ super new initialize: maxLevel
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
on: element level: maxLevel 
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
        ^ (self new: maxLevel) object: element
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
    "Modified (format): / 18-06-2017 / 17:47:43 / cg"
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
tailOfLevel: n
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	^ self on: nil level: n
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
! !
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!SkipListNode methodsFor:'accessing'!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
atForward: i put: node
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	^ pointers at: i put: node
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
forward: i 
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	^ pointers at: i
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
level
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
	^ pointers size
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
next
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	^ pointers first
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
object
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
	^ object
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
! !
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
!SkipListNode methodsFor:'initialization'!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
initialize: maxLevel
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
        pointers := Array new: maxLevel
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    "Modified (format): / 18-06-2017 / 17:47:07 / cg"
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
! !
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
!SkipListNode methodsFor:'printing'!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
printOn: aStream
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
        | first |
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
        aStream
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
                nextPut: $[;
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
                nextPutAll: object printString;
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
                nextPutAll: ']-->('.
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
        first := true.
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
        pointers do: [:node |
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
                first ifTrue: [first := false] ifFalse: [aStream space].
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
                aStream nextPutAll: (node isNil ifTrue: ['*'] ifFalse: [node object printString])].
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
        aStream nextPut: $)
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    "Modified: / 18-06-2017 / 17:47:35 / cg"
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
! !
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
!SkipListNode methodsFor:'private'!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
object: anObject
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
        object := anObject
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    "Modified (format): / 18-06-2017 / 17:47:13 / cg"
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
! !
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
!SkipListNode class methodsFor:'documentation'!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
version
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    ^ '$Header$'
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
!
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
version_CVS
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    ^ '$Header$'
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
! !
e87e78eb5234 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93