zserio/ztype/array_traits/
float32_array_trait.rs1use crate::error::Result;
2use crate::ztype;
3use crate::ztype::array_traits::array_trait;
4use crate::ztype::array_traits::packing_context_node::PackingContextNode;
5use bitreader::BitReader;
6use rust_bitwriter::BitWriter;
7
8pub struct Float32ArrayTrait {}
9
10impl array_trait::ArrayTrait<f32> for Float32ArrayTrait {
11 fn is_bitsizeof_constant(&self) -> bool {
12 true
13 }
14
15 fn needs_bitsizeof_position(&self) -> bool {
16 false
17 }
18
19 fn bitsize_of(&self, _bit_position: u64, _: &f32) -> Result<u64> {
20 Ok(32)
21 }
22
23 fn initialize_offsets(&self, bit_position: u64, value: &f32) -> Result<u64> {
24 Ok(bit_position + self.bitsize_of(bit_position, value)?)
25 }
26
27 fn read(&self, reader: &mut BitReader, value: &mut f32, _index: usize) -> Result<()> {
28 *value = ztype::read_float32(reader)?;
29 Ok(())
30 }
31
32 fn write(&self, writer: &mut BitWriter, value: &f32) -> Result<()> {
33 ztype::write_float32(writer, *value)
34 }
35
36 fn to_u64(&self, _: &f32) -> u64 {
37 0 }
39 fn from_u64(&self, _: u64) -> f32 {
40 0.0 }
42
43 fn init_context(&self, context_node: &mut PackingContextNode, element: &f32) -> Result<()> {
44 context_node.context.as_mut().unwrap().init(self, element)
45 }
46
47 fn bitsize_of_packed(
48 &self,
49 context_node: &mut PackingContextNode,
50 bit_position: u64,
51 element: &f32,
52 ) -> Result<u64> {
53 context_node
54 .context
55 .as_mut()
56 .unwrap()
57 .bitsize_of(self, bit_position, element)
58 }
59
60 fn initialize_offsets_packed(
61 &self,
62 context_node: &mut PackingContextNode,
63 bit_position: u64,
64 element: &f32,
65 ) -> Result<u64> {
66 Ok(bit_position
67 + context_node
68 .context
69 .as_mut()
70 .unwrap()
71 .bitsize_of(self, bit_position, element)?)
72 }
73
74 fn read_packed(
75 &self,
76 context_node: &mut PackingContextNode,
77 reader: &mut BitReader,
78 value: &mut f32,
79 index: usize,
80 ) -> Result<()> {
81 context_node
82 .context
83 .as_mut()
84 .unwrap()
85 .read(self, reader, value, index)
86 }
87
88 fn write_packed(
89 &self,
90 context_node: &mut PackingContextNode,
91 writer: &mut BitWriter,
92 element: &f32,
93 ) -> Result<()> {
94 context_node
95 .context
96 .as_mut()
97 .unwrap()
98 .write(self, writer, element)
99 }
100}