Source code for ifgen.struct.stream
"""
A module for implementing struct stream-related methods.
"""
# third-party
from vcorelib.io.file_writer import IndentedFileWriter
# internal
from ifgen.generation.interface import GenerateTask
[docs]
def struct_istream(task: GenerateTask, writer: IndentedFileWriter) -> None:
"""Generate an input-stream handling method."""
writer.write(
"inline byte_istream &operator>>"
f"(byte_istream &stream, {task.name} &instance)"
)
with writer.scope():
writer.write(
f"stream.read(instance.raw()->data(), {task.name}::size);"
)
writer.write("return stream;")
[docs]
def struct_ostream(task: GenerateTask, writer: IndentedFileWriter) -> None:
"""Generate an output-stream handling method."""
writer.write(
"inline byte_ostream &operator<<"
f"(byte_ostream &stream, const {task.name} &instance)"
)
with writer.scope():
writer.write(
f"stream.write(instance.raw_ro()->data(), {task.name}::size);"
)
writer.write("return stream;")
[docs]
def struct_stream_methods(
task: GenerateTask, writer: IndentedFileWriter
) -> None:
"""Generate struct stream read and write methods."""
writer.c_comment("Stream interfaces.")
struct_istream(task, writer)
struct_ostream(task, writer)