[squeak-dev] Namespaces, Packages: Image available for
download, screencast.
Edgar J. De Cleene
edgardec2001 at yahoo.com.ar
Sun Jul 27 11:18:44 UTC 2008
El 7/26/08 11:33 PM, "Michael van der Gulik" <mikevdg at gmail.com> escribió:
> Code should be a bunch of objects in images that can be passed, as objects, to
> other images. Computers should have persistent object stores, not
> filesystems!lopp is a well-developed squeak-based image app
+ 1.
Sure you have your own , but just in case here is the attached small
utilities for save and read objects and gz compressed objects.
I using .obj and .obz more and more
Edgar
-------------- next part --------------
'From SqueakLight|II of 31 May 2008 [latest update: #7198] on 27 July 2008 at 8:13:54 am'!
!Object methodsFor: 'evaluating' stamp: 'edc 7/18/2005 10:51'!
ancestors
| nonMetaClass classList |
nonMetaClass := self theNonMetaClass.
classList := OrderedCollection new.
nonMetaClass allSuperclasses reverseDo:
[:aClass |
classList add: aClass name.
].
^ classList! !
!Object methodsFor: 'evaluating' stamp: 'edc 7/18/2005 10:51'!
othersClassList
|classList metodosSospechosos |
classList := Set new.
metodosSospechosos := self methodDict .
metodosSospechosos isEmpty
ifFalse: [metodosSospechosos
collect: [:cm | cm literals
select: [:any | any isVariableBinding]
thenCollect: [:each | (Smalltalk at: each key ifAbsent:[])
ifNotNil: [ classList add: each key]]]].
metodosSospechosos := self class methodDict .
metodosSospechosos isEmpty
ifFalse: [metodosSospechosos
collect: [:cm | cm literals
select: [:any | any isVariableBinding]
thenCollect: [:each | (Smalltalk at: each key ifAbsent:[])
ifNotNil: [classList add: each key]]]].
classList remove: self name ifAbsent: [].
^classList
! !
!Object methodsFor: 'objects from disk' stamp: 'edc 7/10/2008 07:17'!
fileOutCompressed
| unzipped zipped buffer aFileName |
aFileName := self class name asFileName. "do better?"
aFileName := UIManager default
request: 'File name?' translated initialAnswer: aFileName.
aFileName size == 0 ifTrue: [^ Beeper beep].
Cursor write
showWhile: [unzipped := RWBinaryOrTextStream on: ''.
unzipped fileOutClass: nil andObject: self.
unzipped reset.
zipped := FileDirectory default newFileNamed: aFileName , FileDirectory dot , ImageSegment compressedFileExtension.
zipped binary.
zipped := GZipWriteStream on: zipped.
buffer := ByteArray new: 50000.
'Compressing ' , self name
displayProgressAt: Sensor cursorPoint
from: 0
to: unzipped size
during: [:bar |
[unzipped atEnd]
whileFalse: [bar value: unzipped position.
zipped
nextPutAll: (unzipped nextInto: buffer)].
zipped close.
unzipped close]]! !
!Object class methodsFor: 'objects from disk' stamp: 'edc 7/27/2008 07:33'!
readAndInspect: inputStream
inputStream setConverterForCode.
inputStream fileInObjectAndCodeForProject inspect! !
!Object class methodsFor: 'objects from disk' stamp: 'edc 7/27/2008 08:11'!
readCompressedObject: aFileStream
self readAndInspect: (MultiByteBinaryOrTextStream with: (GZipReadStream on: aFileStream) upToEnd) reset! !
!Object class methodsFor: '*services-extras' stamp: 'edc 7/27/2008 06:55'!
fileReaderServicesForFile: fullName suffix: suffix
| services |
services := OrderedCollection new.
(fullName asLowercase endsWith: '.obz')
ifTrue: [services add: self serviceCompressedObject].
(fullName asLowercase endsWith: '.obj')
ifTrue: [services add: self serviceLoadObject].
^ services! !
!Object class methodsFor: '*services-extras' stamp: 'edc 7/27/2008 07:40'!
serviceCompressedObject
"Answer a service for opening a saved Object"
^ (SimpleServiceEntry
provider: Object
label: 'gz saved Object'
selector: #readCompressedObject:
description: 'open a gz Object'
buttonLabel: 'object')
argumentGetter: [:fileList |
fileList readOnlyStream]! !
!Object class methodsFor: '*services-extras' stamp: 'edc 2/14/2008 08:26'!
serviceLoadObject
"Answer a service for opening a saved Object"
^ (SimpleServiceEntry
provider: self
label: 'saved Object'
selector: #readAndInspect:
description: 'open a Object'
buttonLabel: 'object')
argumentGetter: [:fileList | fileList readOnlyStream]! !
More information about the Squeak-dev
mailing list
|