You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@thrift.apache.org by "Jens-G (via GitHub)" <gi...@apache.org> on 2026/06/01 21:34:51 UTC
[PR] THRIFT-6065: Make TMemoryStream growable so it can be written and then read [thrift]
Jens-G opened a new pull request, #3579:
URL: https://github.com/apache/thrift/pull/3579
## THRIFT-6065: Make TMemoryStream growable so it can be written and then read
### Problem
`TMemoryStream` could not be written to:
- `Write()` did `Data.set(Position + i, …)` into a **fixed-size** `Bytes`, which cannot grow, so writing to a freshly constructed stream was out of bounds. On the **neko** target the no-argument constructor never initialized `Position`, so the first write threw `"Invalid operation (+)"`.
- `Write()` never advanced `Position`.
- The constructor left `Position` at the end of any supplied data, so a stream built from existing bytes could not be read without first doing `Position = 0` (the only existing consumer, `ConstantsTest`, did exactly that workaround).
### Change
Back the stream with a **growable** buffer: writing past the current end enlarges the backing `Bytes` (capacity doubling, amortized O(1) appends) and advances `Position`; a separate `Length` tracks the logical size used by `Read`/`Peek`; the constructor always initializes `Position = 0`. `Read`/`Write` use `blit`. Cross-target `Bytes` API only.
This lets a single `TMemoryStream` serve as an in-memory transport for a write-then-read round-trip (write, set `Position = 0`, read) — the pattern that previously required a temporary file via `TFileStream`.
### Test
Adds to `lib/haxe/test` `StreamTest` (runs in the suite's Normal mode): an `Xtruct` round-trip through a single `TMemoryStream` over `TJSONProtocol` (write → rewind → read) plus a grow-on-write assertion (1000 single-byte appends read back intact).
Validated locally on neko (Haxe lib unit tests have no CI job, as for all Haxe lib testing here): `StreamTest` memory cases pass; a protocol-level round-trip of a recursive struct over a single `TMemoryStream` round-trips; and the existing `ConstantsTest` (the prior consumer, `new TStreamTransport(stream, stream)` + `readUuid`) still passes — confirming no regression.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@thrift.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] THRIFT-6065: Make TMemoryStream growable so it can be written and then read [thrift]
Posted by "Jens-G (via GitHub)" <gi...@apache.org>.
Jens-G merged PR #3579:
URL: https://github.com/apache/thrift/pull/3579
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@thrift.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org