MCDependencySorter.st
author Patrik Svestka <patrik.svestka@gmail.com>
Wed, 14 Nov 2018 12:57:13 +0100
branchjv
changeset 1095 87f223484bc3
parent 619 12fc8c0ad5c8
permissions -rw-r--r--
Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present - All source *.st files are now Unicode UTF8 without BOM Files are in two groups (fileOut works this way in Smalltalk/X): - containing a unicode character have "{ Encoding: utf8 }" at the header - ASCII only are without the header
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1095
87f223484bc3 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 619
diff changeset
     1
"{ Encoding: utf8 }"
87f223484bc3 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 619
diff changeset
     2
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ Package: 'stx:goodies/monticello' }"
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
Object subclass:#MCDependencySorter
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:'required provided orderedItems'
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
619
12fc8c0ad5c8 category change
Claus Gittinger <cg@exept.de>
parents: 357
diff changeset
     9
	category:'SCM-Monticello-Loading'
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    13
!MCDependencySorter class methodsFor:'initialization'!
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    14
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    15
new
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    16
    ^self basicNew initialize
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    17
! !
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    18
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!MCDependencySorter class methodsFor:'as yet unclassified'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
items: aCollection
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	^ self new addAll: aCollection
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
sortItems: aCollection
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	| sorter |
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    27
	sorter := self items: aCollection.
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	sorter externalRequirements do: [:req  | sorter addProvision: req].
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
	^ sorter orderedItems.
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
!MCDependencySorter methodsFor:'accessing'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
externalRequirements
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	| unloaded providedByUnloaded |
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	unloaded := self itemsWithMissingRequirements.
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
	providedByUnloaded := (unloaded gather: [:e | e provisions]) asSet.
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
	^ required keys reject: [:ea | providedByUnloaded includes: ea ]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
itemsWithMissingRequirements
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	| items |
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    43
	items := Set new.
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	required do: [:ea | items addAll: ea].
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	^ items
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    46
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
!MCDependencySorter methodsFor:'building'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
add: anItem
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	| requirements |
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    53
	requirements := self unresolvedRequirementsFor: anItem.
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
	requirements isEmpty
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
		ifTrue: [self addToOrder: anItem]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
		ifFalse: [self addRequirements: requirements for: anItem]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
addAll: aCollection
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
	aCollection asArray sort do: [:ea | self add: ea]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
addExternalProvisions: aCollection
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
	(aCollection intersection: self externalRequirements)
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
		do: [:ea | self addProvision: ea]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    68
!MCDependencySorter methodsFor:'initialization'!
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
initialize
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    71
	super initialize.
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    72
	provided := Set new.
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    73
	required := Dictionary new.
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    74
	orderedItems := OrderedCollection new.
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
!MCDependencySorter methodsFor:'private'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
addProvision: anObject
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
	| newlySatisfied |
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
	provided add: anObject.
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    82
	newlySatisfied := required removeKey: anObject ifAbsent: [#()].
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
	self addAll: newlySatisfied.
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
addRequirement: reqObject for: itemObject
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
	(self itemsRequiring: reqObject) add: itemObject
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
addRequirements: aCollection for: anObject
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
	aCollection do: [:ea | self addRequirement: ea for: anObject]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
addToOrder: anItem
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
	orderedItems add: anItem.
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
	anItem provisions do: [:ea | self addProvision: ea].
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
itemsRequiring: anObject
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
	^ required at: anObject ifAbsentPut: [Set new]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
unresolvedRequirementsFor: anItem
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
	^ anItem requirements difference: provided
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
!MCDependencySorter methodsFor:'sorting'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
orderedItems
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
	^ orderedItems
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
!MCDependencySorter class methodsFor:'documentation'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
version
619
12fc8c0ad5c8 category change
Claus Gittinger <cg@exept.de>
parents: 357
diff changeset
   116
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCDependencySorter.st,v 1.4 2012-09-11 21:21:20 cg Exp $'
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   117
!
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   118
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   119
version_CVS
619
12fc8c0ad5c8 category change
Claus Gittinger <cg@exept.de>
parents: 357
diff changeset
   120
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCDependencySorter.st,v 1.4 2012-09-11 21:21:20 cg Exp $'
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   121
!
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   122
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   123
version_SVN
1095
87f223484bc3 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 619
diff changeset
   124
    ^ '§Id: MCDependencySorter.st 7 2010-09-12 07:18:55Z vranyj1 §'
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
! !