2018-05-14 13:22 GMT+02:00 Guillermo Polito <guillermopol...@gmail.com>:

>
>
> On Fri, Apr 20, 2018 at 5:24 PM, Sven Van Caekenberghe <s...@stfx.eu>
> wrote:
>
>> Hi,
>>
>> After the File and Stream changes in Pharo 7, a binary read, resp. write
>> stream from/to a file is actually a ZnBuffered(Read|Write)Stream on a
>> BinaryFileStream. You access these using #binary(Read|Write)Stream[Do:]
>> sent to a FileReference.
>>
>> As minimal streams the API of ZnBuffered(Read|Write)Stream was different
>> from what existed before.
>>
>> Specifically, a number of Integer decoding/encoding methods were missing.
>> It is probably best to add those (an alternative would be a subclass).
>>
>> When I looked at what was available, I thought I could improve upon the
>> current situation. In fact, I think all existing ones can be written in
>> terms of just one key method, one for reading and one for writing. The
>> existing methods than become simple aliases, all while offering more
>> functionality.
>>
>> (Incidentally this would be an ideal use of a Trait, can we use them
>> again/still ?)
>>
>> The key method is #nextIntegerOfSize: numberOfBytes signed: signed
>> bigEndian: bigEndian [put: value] and can be found in the latest version of
>> Zinc-CharacterEncoding-Core with a comprehensive set of unit tests.
>>
>> For example,
>>
>> int32
>>   ^ self nextIntegerOfSize: 4 signed: true bigEndian: true
>>
>> nextWord
>>   ^ self nextIntegerOfSize: 2 signed: false bigEndian: true
>
>
>> or non-aliases ones like
>>
>>   binaryStream nextIntegerOfSize: 3 signed: true bigEndian: false
>>
>> I think I nailed it, but I would love a second pair of eyes to check what
>> I did.
>>
>
> Sorry I arrive late.
>
> I'm thinking that this is only valid for binary streams, putting it in
> buffered stream overloads the API... We can leave with it but... Two
> thoughts that come to my mind about this:
>
>  - first, when we are decoding like that from a stream, we are probably
> parsing a binary format, so we want in general to have utility methods to
> read different sizes. Maybe we could include a Reader class with methods
> such as
>    * readSignedInt32
>    * readUnsignedInt32
>    * readSignedInt64
>    * readUnsignedInt64
>    * readFloat64
>
> ... and so on?
>
> - Second, that Reader may be (or not) a new decorator alternative.
> ZnBinaryDecoder? Wrapping a binary (buffered or not) stream. And this would
> not overload the API ^^.
>
> What do you think?
>

Hi Guillermo,
wouldn't a specialized wrapper work for adding this protocol where required?
I have to add such BinaryStream wrapper in VW and Squeak

http://www.squeaksource.com/STEM.html
http://www.cincomsmalltalk.com/publicRepository/SYSEXT-BinaryStream.html

For ByteArray, I didn't check recently in Pharo, but I know that it's quite
a mess in Squeak because some methods are in Alien, other in FFI, other in
base Squeak...
IMO all methods should be in core Squeak/Pharo because of general usage
(like decoding binary data).



>
>> The same functionality could be added to ByteArray in a slight variation
>> (with offsets), where similar integer encoding/decoding methods exist.
>>
>> Sven
>>
>
>
>
> --
>
>
>
> Guille Polito
>
> Research Engineer
>
> Centre de Recherche en Informatique, Signal et Automatique de Lille
>
> CRIStAL - UMR 9189
>
> French National Center for Scientific Research - *http://www.cnrs.fr
> <http://www.cnrs.fr>*
>
>
> *Web:* *http://guillep.github.io* <http://guillep.github.io>
>
> *Phone: *+33 06 52 70 66 13
>

Reply via email to