Thatâs exactly my feeling as well. Doru
On Apr 22, 2018, at 6:41 PM, Stephane Ducasse <stepharo.self@gmail.com> wrote:
Thanks a lot Sven. This is great to see all this positive energy to improve this part. From a core library stand point, streams were the last pieces that needed to be revisited. This is great to see this happening.
Stef
On Sun, Apr 22, 2018 at 11:04 AM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
On 22 Apr 2018, at 10:22, Tudor Girba <tudor@tudorgirba.com> wrote:
Hi,
I am so looking forward to playing with this (as a user).
For various reasons, we are still in Pharo 6.1, but encoding/decoding was always a troublesome issue in Pharo.
Well it should not be, not even in older Pharo versions, as long as you use everything correctly.
But the latest changes are a bold step forward.
Thanks a lot!
Cheers, Doru
On Apr 20, 2018, at 5:24 PM, Sven Van Caekenberghe <sven@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.
The same functionality could be added to ByteArray in a slight variation (with offsets), where similar integer encoding/decoding methods exist.
Sven
-- www.tudorgirba.com www.feenk.com
"From an abstract enough point of view, any two things are similar."
-- www.tudorgirba.com www.feenk.com "There are no old things, there are only old ways of looking at them."