to Bytes() - > Bytes- Module
- std.
bytes - Receiver
- Byte
Buffer - Minimum arity
- 0
- Maximum arity
- 0
Declaration and parameters
LinkAvailability
Included by default: Pending
Import std.bytes in language mode 5.21.
The current compiler selects std/bytes.tpz for this language mode. Availability in other released editions and inclusion in each installed distribution are Pending.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
b48527d0a174· 1005 - compiler/crates/topaz_resolve/src/stdlib.rs at
b48527d0a174· 52 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
b48527d0a174· 1005 - compiler/crates/topaz_self_frontend/topaz/checker/builtin_signatures.tpz at
b48527d0a174· 426 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
b48527d0a174· 1296 - compiler/crates/topaz_value/src/value/members.rs at
b48527d0a174· 260
Receiver
ByteBuffer
Parameter constraints
ByteBuffer.allocate accepts a nonnegative int length and an int initial value from 0 through 255. The initial value defaults to zero.
The new buffer has exactly that many copies of the initial byte. Zero length is valid and still requires a valid initial byte.
A negative length produces TPZ4001 at runtime. An invalid initial byte or an allocation that cannot be satisfied produces TPZ5001 at runtime.
ByteBuffer.fromBytes converts an immutable Bytes value into a mutable ByteBuffer value containing the same bytes.
ByteBuffer.toBytes converts the current buffer contents into an immutable Bytes value.
ByteBuffer.length is a read-only byte count property. Buffer operations never change its length.
Assignment, argument passing, return, capture, and aggregate storage follow collection value semantics.
Supplied expressions evaluate once from left to right before allocation or conversion. These operations have no I/O effects.
Related rule: Allocate buffers and convert byte valuesResult
The declared result type is Bytes.
Effects
Failures
Result and effects
LinkConvert the current buffer contents into an immutable Bytes value.
Resolved contracts
LinkRelated entries
LinkAllocate buffers and convert byte values
LinkAllocate buffers and convert byte values
ByteBuffer.allocate accepts a nonnegative int length and an int initial value from 0 through 255. The initial value defaults to zero.
The new buffer has exactly that many copies of the initial byte. Zero length is valid and still requires a valid initial byte.
A negative length produces TPZ4001 at runtime. An invalid initial byte or an allocation that cannot be satisfied produces TPZ5001 at runtime.
ByteBuffer.fromBytes converts an immutable Bytes value into a mutable ByteBuffer value containing the same bytes.
ByteBuffer.toBytes converts the current buffer contents into an immutable Bytes value.
ByteBuffer.length is a read-only byte count property. Buffer operations never change its length.
Assignment, argument passing, return, capture, and aggregate storage follow collection value semantics.
Supplied expressions evaluate once from left to right before allocation or conversion. These operations have no I/O effects.
Why
A fixed length gives binary algorithms stable byte positions. Explicit conversion distinguishes mutable construction from immutable byte data.
Source evidence
- compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 108 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 127 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 137 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 315 -
topaz.stdlib.contract.byte-buffer-storageatworking-tree - topaz.decision.collection-value-semantics.1 at
topaz.decisi
Allocate zero-filled and initialized buffers
Linkimport std.bytes { ByteBuffer }import std.ioio.writeLine(ByteBuffer.allocate(0).toBytes().toHex())io.writeLine(ByteBuffer.allocate(3).toBytes().toHex())io.writeLine(ByteBuffer.allocate(2, 255).toBytes().toHex())
000000 ffff
Expected result
Expected result
Execution completes. Exit code 0.
000000ffff
Source evidence
- compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 108 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 127 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 137 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 315 -
topaz.stdlib.contract.byte-buffer-storageatworking-tree - topaz.decision.collection-value-semantics.1 at
topaz.decisi
Keep the original buffer and converted bytes unchanged
Linkimport std.bytes { ByteBuffer }import std.iolet source = "ab".encodeUtf8()let buffer = ByteBuffer.fromBytes(source)let independent = ByteBuffer.fromBytes(source)let before = buffer.toBytes()let mut alias = bufferalias.set(0, 99)io.writeLine(source.toHex())io.writeLine(before.toHex())io.writeLine(independent.toBytes().toHex())io.writeLine(buffer.toBytes().toHex())
6162 6162 6162 6162
Expected result
Expected result
Execution completes. Exit code 0.
6162616261626162
Source evidence
- compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 108 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 127 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 137 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 315 -
topaz.stdlib.contract.byte-buffer-storageatworking-tree - topaz.decision.collection-value-semantics.1 at
topaz.decisi
Reject a negative buffer length
Linkimport std.bytes { ByteBuffer }ByteBuffer.allocate(-1)
No stdout.
Expected result
Expected result
Rejection during run. Nonzero exit.
TPZ4001byte-buffer-negative-bound atmain.tpz:2:1
Source evidence
- compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 108 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 127 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 137 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 315 -
topaz.stdlib.contract.byte-buffer-storageatworking-tree - topaz.decision.collection-value-semantics.1 at
topaz.decisi
Validate the initial byte of an empty buffer
Linkimport std.bytes { ByteBuffer }import std.ioByteBuffer.allocate(0, -1)io.writeLine("after")
No stdout.
Expected result
Source evidence
- compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 108 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 127 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 137 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 315 -
topaz.stdlib.contract.byte-buffer-storageatworking-tree - topaz.decision.collection-value-semantics.1 at
topaz.decisi
Validate the initial byte of an empty buffer
Linkimport std.bytes { ByteBuffer }import std.ioByteBuffer.allocate(0, 256)io.writeLine("after")
No stdout.
Expected result
Source evidence
- compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 108 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 127 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 137 - compiler/crates/topaz_value/src/value/builtins/byte_buffer.rs at
912a5e86e1f9· 315 -
topaz.stdlib.contract.byte-buffer-storageatworking-tree - topaz.decision.collection-value-semantics.1 at
topaz.decisi