transforms/stx_goodies_xtreams_transforms.st
author Martin Kobetic
Sun, 17 Nov 2013 00:23:18 -0500
changeset 147 bd6be28aa924
parent 136 69496d69c4b5
permissions -rw-r--r--
merging
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
     1
"{ Package: 'stx:goodies/xtreams/transforms' }"
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
     2
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
     3
LibraryDefinition subclass:#stx_goodies_xtreams_transforms
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
     4
	instanceVariableNames:''
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
     5
	classVariableNames:''
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
     6
	poolDictionaries:''
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
     7
	category:'* Projects & Packages *'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
     8
!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
     9
88
mkobetic
parents: 72
diff changeset
    10
stx_goodies_xtreams_transforms comment:'Transforms are streams on top of other streams. A stack of transforms on top of each other with a terminal stream at the bottom is called a *stream stack*. The usual purpose of a transform stream is transformation of the elements that are passing through it. Alternative it can be some sort of a side-effect while passing the elements through unchanged, e.g. counting, logging, hashing. A transform may also cause the number of elements to change, e.g. compression, encoding, filtering, etc.
mkobetic
parents: 72
diff changeset
    11
mkobetic
parents: 72
diff changeset
    12
mkobetic
parents: 72
diff changeset
    13
        == Collection enumeration analogs ==
mkobetic
parents: 72
diff changeset
    14
mkobetic
parents: 72
diff changeset
    15
Following set of transforms emulates the popular collection enumerators, providing the same sort of benefits. Primary difference is that the enumeration happens incrementally, as elements are being written into or read from the stream. This avoids some of the overhead that the collection API incurs improving scalability of these operations on large datasets.
mkobetic
parents: 72
diff changeset
    16
mkobetic
parents: 72
diff changeset
    17
mkobetic
parents: 72
diff changeset
    18
        === Element Conversion (#collecting:) ===
mkobetic
parents: 72
diff changeset
    19
mkobetic
parents: 72
diff changeset
    20
This is the simplest form of transformation where elements are transformed one for one, i.e. the number of elements before and after transformation is the same.
mkobetic
parents: 72
diff changeset
    21
{{{
mkobetic
parents: 72
diff changeset
    22
        "squaring read input"
mkobetic
parents: 72
diff changeset
    23
        ((1 to: 10) reading collecting: [ :e | e * e ]) rest
mkobetic
parents: 72
diff changeset
    24
}}}
mkobetic
parents: 72
diff changeset
    25
{{{
mkobetic
parents: 72
diff changeset
    26
        "normalizing output"
mkobetic
parents: 72
diff changeset
    27
        (String new writing collecting: #asLowercase) write: ''abcABC''; conclusion
mkobetic
parents: 72
diff changeset
    28
}}}
mkobetic
parents: 72
diff changeset
    29
mkobetic
parents: 72
diff changeset
    30
mkobetic
parents: 72
diff changeset
    31
        === Element Filtering (#selecting:/#rejecting:) ===
mkobetic
parents: 72
diff changeset
    32
mkobetic
parents: 72
diff changeset
    33
These transformations eliminate some of the elements flowing through the stream based on provided criteria. The number of elements after the transformation is same or smaller than before transformation.
mkobetic
parents: 72
diff changeset
    34
{{{
mkobetic
parents: 72
diff changeset
    35
        ((1 to: 50) reading selecting: [ :e | e odd ]) rest
mkobetic
parents: 72
diff changeset
    36
}}}
mkobetic
parents: 72
diff changeset
    37
{{{
mkobetic
parents: 72
diff changeset
    38
        (String new writing rejecting: [ :c | c isLowercase ]) write: ''abABcC''; conclusion
mkobetic
parents: 72
diff changeset
    39
}}}
mkobetic
parents: 72
diff changeset
    40
mkobetic
parents: 72
diff changeset
    41
mkobetic
parents: 72
diff changeset
    42
        === Additional Processing of Elements (#doing:) ===
mkobetic
parents: 72
diff changeset
    43
mkobetic
parents: 72
diff changeset
    44
The #doing: transformation allows to perform additional activity with each element flowing through the stream. The elements can be counted, logged, copied into a different stream, etc.
mkobetic
parents: 72
diff changeset
    45
{{{
mkobetic
parents: 72
diff changeset
    46
        count := 0.
mkobetic
parents: 72
diff changeset
    47
        (''abcdef'' reading doing: [ :e | count := count + 1 ]) rest.
mkobetic
parents: 72
diff changeset
    48
        count
mkobetic
parents: 72
diff changeset
    49
}}}
mkobetic
parents: 72
diff changeset
    50
{{{
mkobetic
parents: 72
diff changeset
    51
        log := String new writing.
mkobetic
parents: 72
diff changeset
    52
        (String new writing doing: [ :e | log put: e ]) write: ''abcdef''.
mkobetic
parents: 72
diff changeset
    53
        log conclusion
mkobetic
parents: 72
diff changeset
    54
}}}
mkobetic
parents: 72
diff changeset
    55
mkobetic
parents: 72
diff changeset
    56
mkobetic
parents: 72
diff changeset
    57
        === Per-Element Accumulation (#injecting:into:) ===
mkobetic
parents: 72
diff changeset
    58
mkobetic
parents: 72
diff changeset
    59
The #inject:into: idiom is used to simplify the expression of a running value computed over a set of elements. In the streaming variant the resulting stream provides the subsequent states of the running value (not the elements). 
mkobetic
parents: 72
diff changeset
    60
mkobetic
parents: 72
diff changeset
    61
{{{
mkobetic
parents: 72
diff changeset
    62
        "e series"
mkobetic
parents: 72
diff changeset
    63
        x := 1.
mkobetic
parents: 72
diff changeset
    64
        integers := [ x := x + 1 ] reading.
mkobetic
parents: 72
diff changeset
    65
        ((integers injecting: 1 into: [ :sum :next | sum + next factorial reciprocal ]) collecting: #asDouble) read: 20
mkobetic
parents: 72
diff changeset
    66
}}}
mkobetic
parents: 72
diff changeset
    67
{{{
mkobetic
parents: 72
diff changeset
    68
        (Array new writing injecting: 0 into: [ :total :each | each + total ]) write: (1 to: 10); conclusion
mkobetic
parents: 72
diff changeset
    69
}}}
mkobetic
parents: 72
diff changeset
    70
mkobetic
parents: 72
diff changeset
    71
mkobetic
parents: 72
diff changeset
    72
        == Specialized Transformations ==
mkobetic
parents: 72
diff changeset
    73
mkobetic
parents: 72
diff changeset
    74
These are specific, commonly used transformations. They are often optimized via a dedicated stream class, but that is usually hidden behind the conventional creation methods on ReadStream.
mkobetic
parents: 72
diff changeset
    75
mkobetic
parents: 72
diff changeset
    76
mkobetic
parents: 72
diff changeset
    77
        === Character encoding (#encoding:) ===
mkobetic
parents: 72
diff changeset
    78
mkobetic
parents: 72
diff changeset
    79
Character encoding is a process of turning a sequence of characters into a sequence of bytes. The inverse process is called decoding. There are different kinds of character encoding often tailored to specific alphabets. Some are able to encode only a certain subset of characters, others are able to encode any character. These specific kinds of encodings are usually identified with their names, e.g. ''ASCII'', ''UTF-8'', ''ISO 8859-1''. When creating an encoding stream, the encoding name has to be specified. Any encoding name recognized by class Encoder can be used.
mkobetic
parents: 72
diff changeset
    80
{{{
mkobetic
parents: 72
diff changeset
    81
        (ByteArray new writing encoding: #iso8859_1) write: ''Hello''; conclusion
mkobetic
parents: 72
diff changeset
    82
}}}
mkobetic
parents: 72
diff changeset
    83
Encoding write stream consumes characters and converts them into bytes. Consequently the underlying write stream must be binary (i.e accept bytes (0..255)).
mkobetic
parents: 72
diff changeset
    84
The encoding stream also performs automatic conversion of CRs (Character cr) into the native line-end convention of the underlying platform, unless set into a different line-end convention mode.
mkobetic
parents: 72
diff changeset
    85
{{{
mkobetic
parents: 72
diff changeset
    86
        (ByteArray new writing encoding: #utf16)
mkobetic
parents: 72
diff changeset
    87
                setLineEndCRLF;
134
45ec7d57cf93 - stx_goodies_xtreams_transforms
Martin Kobetic
parents: 111
diff changeset
    88
                write: ''Hello World!!!!\Bye World!!!!'' withCRs;
88
mkobetic
parents: 72
diff changeset
    89
                conclusion
mkobetic
parents: 72
diff changeset
    90
}}}
mkobetic
parents: 72
diff changeset
    91
An encoding read stream reads bytes from an underlying binary stream, decodes the bytes according to the pre-configured encoding and produces characters. It also performs automatic line end conversion from arbitrary platform convention to CRs, unless set into a transparent mode.
mkobetic
parents: 72
diff changeset
    92
{{{
mkobetic
parents: 72
diff changeset
    93
        (#[65 66 67 13 10 68 69 70 10 71 72 73 ] reading encoding: #ascii) rest
mkobetic
parents: 72
diff changeset
    94
        (#[65 66 67 13 10 68 69 70 10 71 72 73 ] reading encoding: #ascii) setLineEndTransparent; rest
mkobetic
parents: 72
diff changeset
    95
}}}
mkobetic
parents: 72
diff changeset
    96
mkobetic
parents: 72
diff changeset
    97
mkobetic
parents: 72
diff changeset
    98
        === Base-64 encoding (#encodingBase64) ===
mkobetic
parents: 72
diff changeset
    99
mkobetic
parents: 72
diff changeset
   100
Base-64 encoding is a commonly used encoding of bytes into characters, usually for the purpose of transporting bytes over text based protocols (e.g. MIME or XML). This is different from character encoding, the input and output type is inverted. The encoding has to be able to handle arbitrary sequence of bytes, but not every character sequence is valid base-64 encoding.
mkobetic
parents: 72
diff changeset
   101
Consequently the write stream consumes bytes and writes characters into the underlying stream. Note that base-64 encoding requires specific treatment at the end of the encoding sequence, so base-64 write stream must be closed at the end.
mkobetic
parents: 72
diff changeset
   102
{{{
mkobetic
parents: 72
diff changeset
   103
        encoded := String new.
mkobetic
parents: 72
diff changeset
   104
        encoded writing encodingBase64 write: (ByteArray withAll: (0 to: 255)); close.
mkobetic
parents: 72
diff changeset
   105
        encoded
mkobetic
parents: 72
diff changeset
   106
}}}
mkobetic
parents: 72
diff changeset
   107
The read stream reads characters from underlying stream and converts the characters into bytes.
mkobetic
parents: 72
diff changeset
   108
{{{
mkobetic
parents: 72
diff changeset
   109
        encoded reading encodingBase64 rest
mkobetic
parents: 72
diff changeset
   110
}}}
mkobetic
parents: 72
diff changeset
   111
The read stream ignores any intervening white space that might be used to format the base-64 characters for transport (e.g. base-64 encoding is often wrapped to certain line length with new-line characters interspersed with the base-64 characters. The read stream will automatically end when it encounters the base-64 termination sequence ($=). Note however that the sequence is not always present, so it cannot be used as a reliable stream terminator.
mkobetic
parents: 72
diff changeset
   112
mkobetic
parents: 72
diff changeset
   113
mkobetic
parents: 72
diff changeset
   114
        == General Transformations (#transforming:) ==
mkobetic
parents: 72
diff changeset
   115
mkobetic
parents: 72
diff changeset
   116
This is the most general form of transformation. The block argument receives two streams, input and output. The block can read arbitrary number of elements from input (including none) and write arbitrary number of elements into the output (including none).
mkobetic
parents: 72
diff changeset
   117
mkobetic
parents: 72
diff changeset
   118
With read streams the input is the underlying source stream and output is a virtual stream of elements to be produced by the stream. The block will be invoked as many times as necessary to produce the requested number of elements (requested by a read call), or until an Incomplete is raised. Consequently if the block handles Incomplete from the input, it has to raise an Incomplete at some point, otherwise the stream will never end (improper Incomplete handling can result in tight infinite loops).
mkobetic
parents: 72
diff changeset
   119
{{{
mkobetic
parents: 72
diff changeset
   120
        "Multiply each pair of input elements together and return the result"
mkobetic
parents: 72
diff changeset
   121
        ((Array withAll: (1 to: 20)) reading transforming: [ :in :out | out put: in get * in get ]) rest
mkobetic
parents: 72
diff changeset
   122
}}}
mkobetic
parents: 72
diff changeset
   123
Note that if the contentSpecies of the source doesn''t fit the output of the transformation, the contentsSpecies of the transform stream has to be set explicitly.
mkobetic
parents: 72
diff changeset
   124
{{{
mkobetic
parents: 72
diff changeset
   125
        "hex encoding: #[0 1 2 ... 255] -> ''000102...FF'' "
mkobetic
parents: 72
diff changeset
   126
        bytes := ByteArray withAll: (0 to: 255).
mkobetic
parents: 72
diff changeset
   127
        digits := ''0123456789ABCDEF''.
mkobetic
parents: 72
diff changeset
   128
        byte2hex := [ :in :out || byte |        
mkobetic
parents: 72
diff changeset
   129
                byte := in get.
mkobetic
parents: 72
diff changeset
   130
                out put: (digits at: (byte bitShift: -4) + 1).
mkobetic
parents: 72
diff changeset
   131
                out put: (digits at: (byte bitAnd: 15) + 1) ].
mkobetic
parents: 72
diff changeset
   132
        (bytes reading transforming: byte2hex)
mkobetic
parents: 72
diff changeset
   133
                contentsSpecies: String;
mkobetic
parents: 72
diff changeset
   134
                rest
mkobetic
parents: 72
diff changeset
   135
}}}
mkobetic
parents: 72
diff changeset
   136
In case of write streams, the input of the transform block is a virtual stream of written elements and the output is the underlying destination stream. The block will be invoked as many times as necessary to consume any written elements, or until an Incomplete is raised by the destination. Again depending on the specifics of the transformation the contentsSpecies may have to be set explicitly (the collection used by the buffer backing the virtual input stream must be able accommodate any written elements).
mkobetic
parents: 72
diff changeset
   137
{{{
mkobetic
parents: 72
diff changeset
   138
        (String new writing transforming: byte2hex)
mkobetic
parents: 72
diff changeset
   139
                contentsSpecies: ByteArray;
mkobetic
parents: 72
diff changeset
   140
                write: bytes;
mkobetic
parents: 72
diff changeset
   141
                conclusion
mkobetic
parents: 72
diff changeset
   142
}}}
mkobetic
parents: 72
diff changeset
   143
Note that in order to allow writing transformation blocks for write streams the same way as for read streams, the write stream has to be backed up by a background process, which allows suspending the execution of the transformation block in case it needs to wait for more elements to be written. The benefit is that the same transformation block can be used on both read and write stream without change to perform the same transformation.
mkobetic
parents: 72
diff changeset
   144
mkobetic
parents: 72
diff changeset
   145
mkobetic
parents: 72
diff changeset
   146
        == CType Import/Export (Interpreting) ==
mkobetic
parents: 72
diff changeset
   147
mkobetic
parents: 72
diff changeset
   148
Interpreting streams convert specific types of objects to/from bytes of corresponding primitive C-type, i.e. they assign designated "interpretation" to the bytes (terminology borrowed from UninterpretedBytes and associated suite of primitives employed by these streams). Supported C-types are defined by the Interpretations shared variable on class InterpretedBytes. The streams are created with message #interpreting: with argument being a Symbol denoting the C-type in the Interpretations registry, e.g. #float, #double, #unsignedChar, etc.
mkobetic
parents: 72
diff changeset
   149
mkobetic
parents: 72
diff changeset
   150
InterpretedWriteStream converts consumed elements into bytes of pre-configured (primitive) CType, e.g. float, long etc. The type of written elements must match the C-type and the underlying destination must be binary. InterpretReadStream performs the inverse transformation, converting bytes from a binary source according to the pre-configured (primitive) CType, e.g. float, long etc. It produces elements of corresponding class, e.g. #float -> Float, #double -> Double, etc.
mkobetic
parents: 72
diff changeset
   151
{{{
mkobetic
parents: 72
diff changeset
   152
        doubles := [ Random new next ] reading.
mkobetic
parents: 72
diff changeset
   153
        bytes := (ByteArray new writing interpreting: #double)
mkobetic
parents: 72
diff changeset
   154
                write: 10 from: doubles;
mkobetic
parents: 72
diff changeset
   155
                conclusion.
mkobetic
parents: 72
diff changeset
   156
        (bytes reading interpreting: #double) read: 10
mkobetic
parents: 72
diff changeset
   157
}}}
mkobetic
parents: 72
diff changeset
   158
mkobetic
parents: 72
diff changeset
   159
mkobetic
parents: 72
diff changeset
   160
        == Marshaling ==
mkobetic
parents: 72
diff changeset
   161
mkobetic
parents: 72
diff changeset
   162
Marshaling streams are used to encode arbitrary smalltalk objects into a sequence of bytes suitable for binary storage or transport. The format of the binary encoding is defined by an ObjectMarshaler and is identified by particular version ID. Custom marshalers can be derived from ObjectMarshaler. Custom marshaling formats must declare their own (unique) version ID.
mkobetic
parents: 72
diff changeset
   163
{{{
mkobetic
parents: 72
diff changeset
   164
        object := 5 @ 5 extent: 5 @ 5.
mkobetic
parents: 72
diff changeset
   165
        bytes := ByteArray new writing marshaling put: object; conclusion.
mkobetic
parents: 72
diff changeset
   166
        bytes reading marshaling get
mkobetic
parents: 72
diff changeset
   167
}}}
mkobetic
parents: 72
diff changeset
   168
'
mkobetic
parents: 72
diff changeset
   169
!
mkobetic
parents: 72
diff changeset
   170
51
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   171
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   172
!stx_goodies_xtreams_transforms class methodsFor:'description'!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   173
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   174
excludedFromPreRequisites
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   175
    "list all packages which should be ignored in the automatic
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   176
     preRequisites scan. See #preRequisites for more."
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   177
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   178
    ^ #(
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   179
    )
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   180
!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   181
136
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   182
mandatoryPreRequisites
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   183
    "list all required mandatory packages.
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   184
     Packages are mandatory, if they contain superclasses of the package's classes
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   185
     or classes which are extended by this package.
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   186
     This list can be maintained manually or (better) generated and
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   187
     updated by scanning the superclass hierarchies
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   188
     (the browser has a menu function for that)"
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   189
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   190
    ^ #(
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   191
        #'stx:goodies/xtreams/core'    "Xtreams::ReadStream - extended "
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   192
        #'stx:goodies/xtreams/support'    "Xtreams::Encoder - superclass of Xtreams::ASCIIEncoder "
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   193
        #'stx:libbasic'    "LibraryDefinition - superclass of stx_goodies_xtreams_transforms "
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   194
    )
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   195
!
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   196
51
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   197
preRequisites
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   198
    "list all required packages.
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   199
     This list can be maintained manually or (better) generated and
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   200
     updated by scanning the superclass hierarchies and looking for
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   201
     global variable accesses. (the browser has a menu function for that)
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   202
     Howevery, often too much is found, and you may want to explicitely
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   203
     exclude individual packages in the #excludedFromPrerequisites method."
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   204
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   205
    ^ #(
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
   206
        #'stx:goodies/xtreams/core'    "Xtreams::WriteStream - superclass of Xtreams::EncodeWriteStream "
72
mkobetic
parents: 60
diff changeset
   207
        #'stx:goodies/xtreams/support'    "Xtreams::Encoder - superclass of Xtreams::ASCIIEncoder "
mkobetic
parents: 60
diff changeset
   208
        #'stx:goodies/xtreams/terminals'    "Xtreams::BufferedWriteStream - referenced by Xtreams::WriteStream>>buffering: "
mkobetic
parents: 60
diff changeset
   209
        #'stx:libbasic'    "ProjectDefinition - superclass of stx_goodies_xtreams_transforms "
51
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   210
        #'stx:libbasic2'    "IntegerArray - referenced by Xtreams::MessagePackMarshaler>>initializeMarshaling "
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   211
    )
136
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   212
!
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   213
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   214
referencedPreRequisites
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   215
    "list all packages containing classes referenced by the packages's members.
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   216
     This list can be maintained manually or (better) generated and
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   217
     updated by looking for global variable accesses
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   218
     (the browser has a menu function for that)
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   219
     However, often too much is found, and you may want to explicitely
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   220
     exclude individual packages in the #excludedFromPreRequisites method."
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   221
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   222
    ^ #(
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   223
        #'stx:libbasic2'    "IntegerArray - referenced by Xtreams::MessagePackMarshaler>>initializeMarshaling "
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   224
    )
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   225
!
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   226
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   227
subProjects
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   228
    "list packages which are known as subprojects.
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   229
     The generated makefile will enter those and make there as well.
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   230
     However: they are not forced to be loaded when a package is loaded;
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   231
     for those, redefine requiredPrerequisites"
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   232
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   233
    ^ #(
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   234
        #'stx:goodies/xtreams/transforms/tests'
69496d69c4b5 - Xtreams::DuplicateWriteStream
Martin Kobetic
parents: 134
diff changeset
   235
    )
51
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   236
! !
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   237
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   238
!stx_goodies_xtreams_transforms class methodsFor:'description - contents'!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   239
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   240
classNamesAndAttributes
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   241
    "lists the classes which are to be included in the project.
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   242
     Each entry in the list may be: a single class-name (symbol),
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   243
     or an array-literal consisting of class name and attributes.
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   244
     Attributes are: #autoload or #<os> where os is one of win32, unix,..."
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   245
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   246
    ^ #(
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   247
        "<className> or (<className> attributes...) in load order"
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   248
        #'Xtreams::ASCIIEncoder'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   249
        #'Xtreams::CollectReadStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   250
        #'Xtreams::CollectWriteStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   251
        #'Xtreams::DuplicateReadStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   252
        #'Xtreams::DuplicateWriteStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   253
        #'Xtreams::EncodeReadStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   254
        #'Xtreams::EncodeWriteStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   255
        #'Xtreams::ISO8859L1Encoder'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   256
        #'Xtreams::InterpretedReadStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   257
        #'Xtreams::InterpretedWriteStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   258
        #'Xtreams::MessagePackMarshaler'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   259
        #'Xtreams::ObjectAnalyseStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   260
        #'Xtreams::ObjectMarshaler'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   261
        #'Xtreams::ObjectReadStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   262
        #'Xtreams::ObjectWriteStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   263
        #'Xtreams::TransformReadStream'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   264
        #'Xtreams::TransformWriteStream'
60
0c3108ae4344 manually fixed up package declarations
mkobetic
parents: 59
diff changeset
   265
        #'stx_goodies_xtreams_transforms'
51
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   266
    )
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   267
!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   268
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   269
extensionMethodNames
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   270
    "lists the extension methods which are to be included in the project.
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   271
     Entries are 2-element array literals, consisting of class-name and selector."
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   272
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   273
    ^ #(
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   274
        #'Xtreams::ReadStream' collecting:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   275
        #'Xtreams::ReadStream' depairing
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   276
        #'Xtreams::ReadStream' doing:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   277
        #'Xtreams::ReadStream' duplicating:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   278
        #'Xtreams::ReadStream' encoding:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   279
        #'Xtreams::ReadStream' encodingBase64
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   280
        #'Xtreams::ReadStream' encodingHex
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   281
        #'Xtreams::ReadStream' injecting:into:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   282
        #'Xtreams::ReadStream' interpreting:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   283
        #'Xtreams::ReadStream' interpreting:cacheSize:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   284
        #'Xtreams::ReadStream' interpreting:size:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   285
        #'Xtreams::ReadStream' interpreting:size:cacheSize:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   286
        #'Xtreams::ReadStream' marshaling
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   287
        #'Xtreams::ReadStream' marshaling:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   288
        #'Xtreams::ReadStream' monitoring:every:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   289
        #'Xtreams::ReadStream' pairing
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   290
        #'Xtreams::ReadStream' rejecting:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   291
        #'Xtreams::ReadStream' selecting:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   292
        #'Xtreams::ReadStream' transforming:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   293
        #'Xtreams::WriteStream' collecting:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   294
        #'Xtreams::WriteStream' depairing
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   295
        #'Xtreams::WriteStream' doing:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   296
        #'Xtreams::WriteStream' duplicating:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   297
        #'Xtreams::WriteStream' encoding:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   298
        #'Xtreams::WriteStream' encodingBase64
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   299
        #'Xtreams::WriteStream' encodingHex
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   300
        #'Xtreams::WriteStream' injecting:into:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   301
        #'Xtreams::WriteStream' interpreting:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   302
        #'Xtreams::WriteStream' interpreting:cacheSize:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   303
        #'Xtreams::WriteStream' interpreting:size:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   304
        #'Xtreams::WriteStream' interpreting:size:cacheSize:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   305
        #'Xtreams::WriteStream' marshaling
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   306
        #'Xtreams::WriteStream' marshaling:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   307
        #'Xtreams::WriteStream' monitoring:every:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   308
        #'Xtreams::WriteStream' pairing
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   309
        #'Xtreams::WriteStream' rejecting:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   310
        #'Xtreams::WriteStream' selecting:
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   311
        #'Xtreams::WriteStream' transforming:
72
mkobetic
parents: 60
diff changeset
   312
        #'Xtreams::ReadStream' positioning
mkobetic
parents: 60
diff changeset
   313
        #'Xtreams::WriteStream' positioning
51
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   314
    )
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   315
! !
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   316
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   317
!stx_goodies_xtreams_transforms class methodsFor:'description - project information'!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   318
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   319
applicationIconFileName
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   320
    "Return the name (without suffix) of an icon-file (the app's icon); will be included in the rc-resource file"
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   321
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   322
    ^ nil
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   323
    "/ ^ self applicationName
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   324
!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   325
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   326
companyName
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   327
    "Return a companyname which will appear in <lib>.rc"
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   328
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   329
    ^ 'eXept Software AG'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   330
!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   331
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   332
description
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   333
    "Return a description string which will appear in vc.def / bc.def"
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   334
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   335
    ^ 'Smalltalk/X Class library'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   336
!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   337
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   338
legalCopyright
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   339
134
45ec7d57cf93 - stx_goodies_xtreams_transforms
Martin Kobetic
parents: 111
diff changeset
   340
        ^'Copyright 2010-2013 Cincom Systems, Martin Kobetic and Michael Lucas-Smith'
51
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   341
!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   342
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   343
productName
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   344
    "Return a product name which will appear in <lib>.rc"
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   345
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   346
    ^ 'Smalltalk/X'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   347
! !
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   348
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   349
!stx_goodies_xtreams_transforms class methodsFor:'description - svn'!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   350
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   351
svnRepositoryUrlString
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   352
    "Return a SVN repository URL of myself.
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   353
     (Generated since 2011-04-08)
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   354
    "        
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   355
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   356
    ^ '$URL: https://swing.fit.cvut.cz/svn/stx/goodies/xtreams/trunk/transforms/stx_goodies_xtreams_transforms.st $'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   357
!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   358
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   359
svnRevisionNr
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   360
    "Return a SVN revision number of myself.
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   361
     This number is updated after a commit"
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   362
105
ba761aff18ac Yet another instvar rename, hopefully last.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
   363
    ^ "$SVN-Revision:"'103'"$"
51
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   364
! !
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   365
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   366
!stx_goodies_xtreams_transforms class methodsFor:'documentation'!
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   367
111
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   368
version_HG
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   369
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   370
    ^ '$Changeset: <not expanded> $'
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   371
!
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   372
51
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   373
version_SVN
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   374
    ^ '$Id: stx_goodies_xtreams_transforms.st 19 2011-11-21 06:04:06Z mkobetic $'
79cd91a589d8 packaging
mkobetic
parents:
diff changeset
   375
! !
111
44ac233b2f83 * removed namespace from pool references and stray extension methods
joe
parents: 105
diff changeset
   376