|
NGen
|
Classes | |
| struct | RecordPrefix |
| Fixed-prefix wire header for a serialization record. More... | |
Enumerations | |
| enum class | Status { Ok , Eof } |
| Outcome of a wire-format read operation. More... | |
Functions | |
| void | encode_record_prefix (std::uint8_t *out, const RecordPrefix &p) |
Encode a RecordPrefix into the out buffer using field-by-field little-endian encoding. | |
| void | decode_record_prefix (const std::uint8_t *in, RecordPrefix &p) |
Decode a RecordPrefix from the in buffer. | |
| void | write_record_prefix (std::ostream &out, const RecordPrefix &p) |
Write a RecordPrefix to out by writing each field through byte_io's stream adapters. | |
| Status | read_record_prefix (std::istream &in, RecordPrefix &p) |
Read a RecordPrefix from in by reading each field through byte_io's stream adapters. | |
|
strong |
Outcome of a wire-format read operation.
read_record_prefix returns this directly: Ok if a full prefix arrived, Eof if the stream ended (cleanly or torn) before the prefix completed. There is no third "error" state at this layer because the wire-format primitive does not validate the bytes — magic / wire_version / payload-cap checks live at the validation layer in serialization_record.hpp, which returns expected<Status, std::string> and reserves the error arm for malformed records.
Sub-byte primitives (byte_io::read_*) still return bool — they are an implementation detail of the wire format with no meaningful three-state distinction.
| Enumerator | |
|---|---|
| Ok | |
| Eof | |
|
inline |
Decode a RecordPrefix from the in buffer.
The buffer MUST be at least RecordPrefix::PREFIX_BYTES bytes long.
Magic and wire-version validation are the caller's responsibility — this function only decodes the fields.
References models::bmi::protocols::serialization::wire_format::RecordPrefix::checkpoint_epoch, models::bmi::protocols::serialization::wire_format::RecordPrefix::id_length, models::bmi::protocols::serialization::byte_io::load_little_u8(), models::bmi::protocols::serialization::wire_format::RecordPrefix::magic, models::bmi::protocols::serialization::wire_format::RecordPrefix::payload_length, models::bmi::protocols::serialization::wire_format::RecordPrefix::simulation_timestamp, models::bmi::protocols::serialization::wire_format::RecordPrefix::time_step, and models::bmi::protocols::serialization::wire_format::RecordPrefix::wire_version.
|
inline |
Encode a RecordPrefix into the out buffer using field-by-field little-endian encoding.
The buffer MUST be at least RecordPrefix::PREFIX_BYTES bytes long; exactly PREFIX_BYTES bytes are written.
This is the source of truth for the on-disk prefix layout. Stream and direct-fd writers both go through it, so the encoded bytes are byte-identical regardless of how the caller delivers them to the underlying medium.
References models::bmi::protocols::serialization::wire_format::RecordPrefix::checkpoint_epoch, models::bmi::protocols::serialization::wire_format::RecordPrefix::id_length, models::bmi::protocols::serialization::wire_format::RecordPrefix::magic, models::bmi::protocols::serialization::wire_format::RecordPrefix::payload_length, models::bmi::protocols::serialization::wire_format::RecordPrefix::simulation_timestamp, models::bmi::protocols::serialization::byte_io::store_little_u8(), models::bmi::protocols::serialization::wire_format::RecordPrefix::time_step, and models::bmi::protocols::serialization::wire_format::RecordPrefix::wire_version.
Referenced by ngen::serialization::FileBackend::Writer::write().
|
inline |
Read a RecordPrefix from in by reading each field through byte_io's stream adapters.
Returns Status::Ok on a full read; Status::Eof if the stream ended before the prefix completed (EOF at start, or short read mid-prefix).
Magic and wire-version validation are the caller's responsibility — this function reports only "did a full prefix arrive." A reader that needs to distinguish "torn file at the prefix boundary" from "this is not a record" inspects magic and wire_version after a successful read.
References models::bmi::protocols::serialization::wire_format::RecordPrefix::checkpoint_epoch, Eof, models::bmi::protocols::serialization::wire_format::RecordPrefix::id_length, models::bmi::protocols::serialization::wire_format::RecordPrefix::magic, Ok, models::bmi::protocols::serialization::wire_format::RecordPrefix::payload_length, models::bmi::protocols::serialization::byte_io::read_i64_le(), models::bmi::protocols::serialization::byte_io::read_u16_le(), models::bmi::protocols::serialization::byte_io::read_u32_le(), models::bmi::protocols::serialization::byte_io::read_u64_le(), models::bmi::protocols::serialization::byte_io::read_u8(), models::bmi::protocols::serialization::wire_format::RecordPrefix::simulation_timestamp, models::bmi::protocols::serialization::wire_format::RecordPrefix::time_step, and models::bmi::protocols::serialization::wire_format::RecordPrefix::wire_version.
Referenced by models::bmi::protocols::read_validated_prefix().
|
inline |
Write a RecordPrefix to out by writing each field through byte_io's stream adapters.
Exactly PREFIX_BYTES bytes are emitted.
The caller is responsible for following the prefix on the stream with id_length bytes of id and payload_length bytes of payload — the prefix carries the lengths but does not carry the bodies.
References models::bmi::protocols::serialization::wire_format::RecordPrefix::checkpoint_epoch, models::bmi::protocols::serialization::wire_format::RecordPrefix::id_length, models::bmi::protocols::serialization::wire_format::RecordPrefix::magic, models::bmi::protocols::serialization::wire_format::RecordPrefix::payload_length, models::bmi::protocols::serialization::wire_format::RecordPrefix::simulation_timestamp, models::bmi::protocols::serialization::wire_format::RecordPrefix::time_step, models::bmi::protocols::serialization::wire_format::RecordPrefix::wire_version, models::bmi::protocols::serialization::byte_io::write_i64_le(), models::bmi::protocols::serialization::byte_io::write_u16_le(), models::bmi::protocols::serialization::byte_io::write_u32_le(), models::bmi::protocols::serialization::byte_io::write_u64_le(), and models::bmi::protocols::serialization::byte_io::write_u8().
Referenced by models::bmi::protocols::write_record(), and models::bmi::protocols::write_record().