Trapped-Backend.st 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. Smalltalk createPackage: 'Trapped-Backend'!
  2. (Smalltalk packageAt: 'Trapped-Backend') imports: {'axxord/Axxord'}!
  3. AxonInterest subclass: #InterestedInTrapPath
  4. instanceVariableNames: ''
  5. package: 'Trapped-Backend'!
  6. !InterestedInTrapPath methodsFor: 'testing'!
  7. accepts: anAspect
  8. ^anAspect size <= aspect size and: [anAspect = (aspect copyFrom: 1 to: anAspect size)]
  9. ! !
  10. AxonInterest subclass: #InterestedInTrapPathSubtree
  11. instanceVariableNames: ''
  12. package: 'Trapped-Backend'!
  13. !InterestedInTrapPathSubtree methodsFor: 'testing'!
  14. accepts: anAspect
  15. ^anAspect size <= aspect size
  16. ifTrue: [anAspect = (aspect copyFrom: 1 to: anAspect size)]
  17. ifFalse: [aspect = (anAspect copyFrom: 1 to: aspect size)]
  18. ! !
  19. Object subclass: #Isolator
  20. instanceVariableNames: 'root'
  21. package: 'Trapped-Backend'!
  22. !Isolator methodsFor: 'accessing'!
  23. root
  24. ^root
  25. !
  26. root: anObject
  27. root := anObject
  28. ! !
  29. !Isolator methodsFor: 'action'!
  30. model: anEavModel modify: aBlock
  31. | newValue |
  32. newValue := aBlock value: (anEavModel on: self).
  33. anEavModel on: self put: newValue deepCopy
  34. !
  35. model: anEavModel read: aBlock
  36. aBlock value: (anEavModel on: self) deepCopy
  37. ! !
  38. !Isolator class methodsFor: 'instance creation'!
  39. on: anObject
  40. ^self new root: anObject
  41. ! !
  42. Object subclass: #TrappedPosition
  43. instanceVariableNames: 'path model'
  44. package: 'Trapped-Backend'!
  45. !TrappedPosition methodsFor: 'accessing'!
  46. model
  47. ^model
  48. !
  49. path
  50. ^path
  51. !
  52. path: anArray model: aTrappedMW
  53. path := anArray.
  54. model := aTrappedMW
  55. ! !
  56. !TrappedPosition methodsFor: 'action'!
  57. modify: aBlock
  58. self model axes: self path transform: aBlock
  59. !
  60. read: aBlock
  61. self model axes: self path consume: aBlock
  62. !
  63. watch: aBlock
  64. self model registeredAxon addInterest: (self
  65. interestOn: self path
  66. block: [ self read: aBlock ])
  67. ! !
  68. !TrappedPosition methodsFor: 'private'!
  69. interestOn: anAspect block: aBlock
  70. (anAspect notEmpty and: [ anAspect last isNil ])
  71. ifTrue: [ ^ InterestedInTrapPathSubtree new aspect: anAspect allButLast block: aBlock ]
  72. ifFalse: [ ^ InterestedInTrapPath new aspect: anAspect block: aBlock ]
  73. ! !