diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-03-26 21:09:32 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-03-26 21:09:32 +0000 |
| commit | b6dc495cf53e882d1c2e332d18322db1e8def9e4 (patch) | |
| tree | 4ecd953d959e09ec7fae75f0ec08cd3db89aaa07 /src/main | |
| parent | cf04670f145879bc3877326698a4d3d0b9f2a988 (diff) | |
Serialize Patio compilation units to flatbuffers
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java index 614f368c..e7dd1522 100644 --- a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java +++ b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java @@ -17,6 +17,46 @@ import java.util.Optional; import java.util.function.Function; public class PatioToFlatbuffers { + // == Compilation units == + + public static int serializeCompilationUnit( + FlatBufferBuilder builder, + PatioCompilationUnit compilationUnit + ) { + var sourceFbs = SourceToFlatbuffers.serializeSource( + builder, + compilationUnit.source(), + Optional.empty() + ); + + var elementsOffsetsFbs = compilationUnit.elements().stream() + .mapToInt(element -> serializeCompilationUnitElement(builder, element, compilationUnit.source())) + .toArray(); + var elementsVectorFbs = PatioCompilationUnitFbs.createElementsVector(builder, elementsOffsetsFbs); + + PatioCompilationUnitFbs.startPatioCompilationUnitFbs(builder); + PatioCompilationUnitFbs.addSource(builder, sourceFbs); + PatioCompilationUnitFbs.addElements(builder, elementsVectorFbs); + return PatioCompilationUnitFbs.endPatioCompilationUnitFbs(builder); + } + + public static PatioCompilationUnit deserializeCompilationUnit( + PatioCompilationUnitFbs compilationUnitFbs + ) { + var source = SourceToFlatbuffers.deserializeSource( + compilationUnitFbs.source(), + Optional.empty() + ); + + var elements = deserializeVector( + compilationUnitFbs::elements, + compilationUnitFbs.elementsLength(), + elementFbs -> deserializeCompilationUnitElement(elementFbs, source) + ); + + return new PatioCompilationUnit(elements, source); + } + // == Compilation unit elements == public static int serializeCompilationUnitElement( |
