@@ -2,6 +2,7 @@ use flatbuffers::{FlatBufferBuilder, WIPOffset};
2
2
use itertools:: Itertools ;
3
3
use vortex:: flatbuffers as fba;
4
4
use vortex:: { ArrayData , Context , ViewContext } ;
5
+ use vortex_buffer:: Buffer ;
5
6
use vortex_dtype:: DType ;
6
7
use vortex_error:: { vortex_err, VortexError } ;
7
8
use vortex_flatbuffers:: { FlatBufferRoot , WriteFlatBuffer } ;
@@ -14,15 +15,14 @@ pub enum IPCMessage<'a> {
14
15
Context ( IPCContext < ' a > ) ,
15
16
Schema ( IPCSchema < ' a > ) ,
16
17
Chunk ( IPCChunk < ' a > ) ,
18
+ Page ( IPCPage < ' a > ) ,
17
19
}
18
20
19
21
pub struct IPCContext < ' a > ( pub & ' a ViewContext ) ;
20
-
21
22
pub struct IPCSchema < ' a > ( pub & ' a DType ) ;
22
-
23
23
pub struct IPCChunk < ' a > ( pub & ' a ViewContext , pub & ' a ArrayData ) ;
24
-
25
24
pub struct IPCArray < ' a > ( pub & ' a ViewContext , pub & ' a ArrayData ) ;
25
+ pub struct IPCPage < ' a > ( pub & ' a Buffer ) ;
26
26
27
27
impl FlatBufferRoot for IPCMessage < ' _ > { }
28
28
@@ -37,6 +37,7 @@ impl WriteFlatBuffer for IPCMessage<'_> {
37
37
Self :: Context ( f) => f. write_flatbuffer ( fbb) . as_union_value ( ) ,
38
38
Self :: Schema ( f) => f. write_flatbuffer ( fbb) . as_union_value ( ) ,
39
39
Self :: Chunk ( f) => f. write_flatbuffer ( fbb) . as_union_value ( ) ,
40
+ Self :: Page ( f) => f. write_flatbuffer ( fbb) . as_union_value ( ) ,
40
41
} ;
41
42
42
43
let mut msg = fb:: MessageBuilder :: new ( fbb) ;
@@ -45,6 +46,7 @@ impl WriteFlatBuffer for IPCMessage<'_> {
45
46
Self :: Context ( _) => fb:: MessageHeader :: Context ,
46
47
Self :: Schema ( _) => fb:: MessageHeader :: Schema ,
47
48
Self :: Chunk ( _) => fb:: MessageHeader :: Chunk ,
49
+ Self :: Page ( _) => fb:: MessageHeader :: Page ,
48
50
} ) ;
49
51
msg. add_header ( header) ;
50
52
msg. finish ( )
@@ -205,3 +207,24 @@ impl<'a> WriteFlatBuffer for IPCArray<'a> {
205
207
)
206
208
}
207
209
}
210
+
211
+ impl < ' a > WriteFlatBuffer for IPCPage < ' a > {
212
+ type Target < ' t > = fb:: Page < ' t > ;
213
+
214
+ fn write_flatbuffer < ' fb > (
215
+ & self ,
216
+ fbb : & mut FlatBufferBuilder < ' fb > ,
217
+ ) -> WIPOffset < Self :: Target < ' fb > > {
218
+ let buffer_size = self . 0 . len ( ) ;
219
+ let aligned_size = ( buffer_size + ( ALIGNMENT - 1 ) ) & !( ALIGNMENT - 1 ) ;
220
+ let padding_size = aligned_size - buffer_size;
221
+
222
+ fb:: Page :: create (
223
+ fbb,
224
+ & fb:: PageArgs {
225
+ buffer_size : buffer_size as u32 ,
226
+ padding : padding_size as u16 ,
227
+ } ,
228
+ )
229
+ }
230
+ }
0 commit comments