transforms/Xtreams__ObjectWriteStream.st
author Martin Kobetic
Sun, 17 Nov 2013 00:23:18 -0500
changeset 147 bd6be28aa924
parent 111 44ac233b2f83
permissions -rw-r--r--
merging
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/xtreams/transforms' }"
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     2
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     3
"{ NameSpace: Xtreams }"
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     4
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     5
WriteStream subclass:#ObjectWriteStream
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
     6
	instanceVariableNames:'marshaler objects nothing int8 int_16 int_32 int_64 uint_16
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
     7
		uint_32 uint_64 float_ double_'
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     8
	classVariableNames:''
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
     9
	poolDictionaries:''
27
2cc5a8a3ca14 added XtreamsPool to fix DefaultBufferSize; set proper category names
mkobetic
parents: 10
diff changeset
    10
	category:'Xtreams-Transforms'
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    11
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    12
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    13
ObjectWriteStream comment:'Marshals objects into a binary destination using the associated ObjectMarshaler. The marshaler version ID is emited at the beginning.
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    14
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    15
Instance Variables
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    16
	marshaler	<ObjectMarshaler> performs marshaling of object bodies
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    17
	objects	<Array> retains unmarshaled objects for resolution of backward references (to preserve identity)
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    18
	longs	<InterpretedReadStream> (internal) for reading of longs
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    19
	longlongs	<InterpretedReadStream> (internal) for reading of longlongs
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    20
	floats	<InterpretedReadStream> (internal) for reading of floats
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    21
	doubles	<InterpretedReadStream> (internal) for reading of doubles
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    22
	nothing	<Object> (internal) an object used to occupy empty slots in objects (since nil is potentially valid content)
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    23
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    24
'
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    25
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    26
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    27
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    28
!ObjectWriteStream class methodsFor:'instance creation'!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    29
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    30
on: aDestination
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    31
	^self on: aDestination marshaler: ObjectMarshaler new
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    32
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    33
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    34
on: aDestination marshaler: aMarshaler
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    35
	^self new on: aDestination marshaler: aMarshaler
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    36
! !
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    37
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    38
!ObjectWriteStream methodsFor:'accessing'!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    39
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    40
put: object
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    41
	marshaler marshal: self object: object.
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    42
	self complete.
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    43
	^object
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    44
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    45
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    46
write: anInteger from: aSequenceableCollection at: startIndex
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    47
	startIndex to: anInteger + startIndex - 1 do: [:index |
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    48
		marshaler marshal: self object: (aSequenceableCollection at: index).
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    49
		self complete].
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    50
	^anInteger
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    51
! !
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    52
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    53
!ObjectWriteStream methodsFor:'initialize-release'!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    54
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    55
contentsSpecies
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    56
	^Array
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    57
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    58
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    59
on: aDestination marshaler: aMarshaler
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    60
	super on: aDestination.
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    61
	marshaler := aMarshaler.
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    62
	objects := Array with: Transcript.
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    63
	nothing := Object new.
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    64
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    65
	int8 := aDestination interpreting: #signedChar.
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    66
	(marshaler configureMarshal: aDestination)
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    67
		ifTrue: [
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    68
			int_16 := aDestination interpreting: #signedShort_be.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    69
			int_32 := aDestination interpreting: #signedLong_be.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    70
			int_64 := aDestination interpreting: #signedLonglong_be.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    71
			uint_16 := aDestination interpreting: #unsignedShort_be.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    72
			uint_32 := aDestination interpreting: #unsignedLong_be.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    73
			uint_64 := aDestination interpreting: #unsignedLonglong_be]
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    74
		ifFalse: [
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    75
			int_16 := aDestination interpreting: #signedShort_le.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    76
			int_32 := aDestination interpreting: #signedLong_le.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    77
			int_64 := aDestination interpreting: #signedLonglong_le.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    78
			uint_16 := aDestination interpreting: #unsignedShort_le.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    79
			uint_32 := aDestination interpreting: #unsignedLong_le.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    80
			uint_64 := aDestination interpreting: #unsignedLonglong_le].
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    81
	float_ := aDestination interpreting: #float.
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    82
	double_ := aDestination interpreting: #double
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    83
! !
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    84
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    85
!ObjectWriteStream methodsFor:'primitives'!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    86
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    87
double
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    88
	^double_
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    89
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    90
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    91
float
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    92
	^float_
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    93
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    94
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    95
int16
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
    96
	^int_16
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    97
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    98
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    99
int32
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
   100
	^int_32
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   101
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   102
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   103
int64
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
   104
	^int_64
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   105
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   106
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   107
int8
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   108
	^int8
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   109
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   110
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   111
uint16
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
   112
	^uint_16
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   113
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   114
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   115
uint32
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
   116
	^uint_32
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   117
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   118
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   119
uint64
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
   120
	^uint_64
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   121
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   122
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   123
uint8
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   124
	^destination
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   125
! !
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   126
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   127
!ObjectWriteStream methodsFor:'private'!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   128
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   129
complete
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   130
	objects atAllPut: nothing.
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   131
	objects at: 1 put: Transcript
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   132
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   133
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   134
grow
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   135
	objects := objects copyWith: nothing
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   136
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   137
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   138
nothing
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   139
	^nothing
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   140
!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   141
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   142
objects
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   143
	^objects
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   144
! !
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   145
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   146
!ObjectWriteStream class methodsFor:'documentation'!
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   147
111
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   148
version_HG
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   149
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   150
    ^ '$Changeset: <not expanded> $'
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   151
!
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   152
10
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   153
version_SVN
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   154
    ^ '$Id$'
3813193bdf4e first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   155
! !
111
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   156