Skip to content

Commit 024d1ac

Browse files
committed
finishing it for the other ones too
1 parent 9258f08 commit 024d1ac

1 file changed

Lines changed: 94 additions & 17 deletions

File tree

src/getdata.rs

Lines changed: 94 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,13 @@ impl Dirfile {
9696
let nframes = self.nframes();
9797
let samples_per_frame = self.spf(field);
9898
let total_samples = nframes * (samples_per_frame as i64);
99-
99+
100100
let field_code = CString::new(field).expect("CString::new failed");
101101
let field_code_ptr = field_code.as_ptr();
102-
102+
103103
// Extract the data based on its type and convert to `Vec<f64>`.
104104
let data: Vec<f64> = match field_type {
105105
gd_type_t_GD_UINT8 => {
106-
// Handle unsigned 8-bit integer data.
107106
let mut raw_data = vec![0u8; total_samples as usize];
108107
unsafe {
109108
gd_getdata(
@@ -119,7 +118,6 @@ impl Dirfile {
119118
raw_data.iter().map(|&v| v as f64).collect()
120119
}
121120
gd_type_t_GD_INT8 => {
122-
// Handle signed 8-bit integer data.
123121
let mut raw_data = vec![0i8; total_samples as usize];
124122
unsafe {
125123
gd_getdata(
@@ -134,15 +132,97 @@ impl Dirfile {
134132
}
135133
raw_data.iter().map(|&v| v as f64).collect()
136134
}
137-
// Other data types (GD_UINT16, GD_INT16, GD_UINT32, etc.) follow a similar pattern.
138-
gd_type_t_GD_UINT16 => { /* ... */ }
139-
gd_type_t_GD_INT16 => { /* ... */ }
140-
gd_type_t_GD_UINT32 => { /* ... */ }
141-
gd_type_t_GD_INT32 => { /* ... */ }
142-
gd_type_t_GD_UINT64 => { /* ... */ }
143-
gd_type_t_GD_INT64 => { /* ... */ }
135+
gd_type_t_GD_UINT16 => {
136+
let mut raw_data = vec![0u16; total_samples as usize];
137+
unsafe {
138+
gd_getdata(
139+
self.dirfile_open,
140+
field_code_ptr,
141+
0, 0,
142+
nframes as usize,
143+
samples_per_frame as usize,
144+
gd_type_t_GD_UINT16,
145+
raw_data.as_mut_ptr() as *mut ::std::os::raw::c_void,
146+
);
147+
}
148+
raw_data.iter().map(|&v| v as f64).collect()
149+
}
150+
gd_type_t_GD_INT16 => {
151+
let mut raw_data = vec![0i16; total_samples as usize];
152+
unsafe {
153+
gd_getdata(
154+
self.dirfile_open,
155+
field_code_ptr,
156+
0, 0,
157+
nframes as usize,
158+
samples_per_frame as usize,
159+
gd_type_t_GD_INT16,
160+
raw_data.as_mut_ptr() as *mut ::std::os::raw::c_void,
161+
);
162+
}
163+
raw_data.iter().map(|&v| v as f64).collect()
164+
}
165+
gd_type_t_GD_UINT32 => {
166+
let mut raw_data = vec![0u32; total_samples as usize];
167+
unsafe {
168+
gd_getdata(
169+
self.dirfile_open,
170+
field_code_ptr,
171+
0, 0,
172+
nframes as usize,
173+
samples_per_frame as usize,
174+
gd_type_t_GD_UINT32,
175+
raw_data.as_mut_ptr() as *mut ::std::os::raw::c_void,
176+
);
177+
}
178+
raw_data.iter().map(|&v| v as f64).collect()
179+
}
180+
gd_type_t_GD_INT32 => {
181+
let mut raw_data = vec![0i32; total_samples as usize];
182+
unsafe {
183+
gd_getdata(
184+
self.dirfile_open,
185+
field_code_ptr,
186+
0, 0,
187+
nframes as usize,
188+
samples_per_frame as usize,
189+
gd_type_t_GD_INT32,
190+
raw_data.as_mut_ptr() as *mut ::std::os::raw::c_void,
191+
);
192+
}
193+
raw_data.iter().map(|&v| v as f64).collect()
194+
}
195+
gd_type_t_GD_UINT64 => {
196+
let mut raw_data = vec![0u64; total_samples as usize];
197+
unsafe {
198+
gd_getdata(
199+
self.dirfile_open,
200+
field_code_ptr,
201+
0, 0,
202+
nframes as usize,
203+
samples_per_frame as usize,
204+
gd_type_t_GD_UINT64,
205+
raw_data.as_mut_ptr() as *mut ::std::os::raw::c_void,
206+
);
207+
}
208+
raw_data.iter().map(|&v| v as f64).collect()
209+
}
210+
gd_type_t_GD_INT64 => {
211+
let mut raw_data = vec![0i64; total_samples as usize];
212+
unsafe {
213+
gd_getdata(
214+
self.dirfile_open,
215+
field_code_ptr,
216+
0, 0,
217+
nframes as usize,
218+
samples_per_frame as usize,
219+
gd_type_t_GD_INT64,
220+
raw_data.as_mut_ptr() as *mut ::std::os::raw::c_void,
221+
);
222+
}
223+
raw_data.iter().map(|&v| v as f64).collect()
224+
}
144225
gd_type_t_GD_FLOAT32 => {
145-
// Handle 32-bit floating-point data.
146226
let mut raw_data = vec![0.0f32; total_samples as usize];
147227
unsafe {
148228
gd_getdata(
@@ -158,7 +238,6 @@ impl Dirfile {
158238
raw_data.iter().map(|&v| v as f64).collect()
159239
}
160240
gd_type_t_GD_FLOAT64 => {
161-
// Handle 64-bit floating-point data directly.
162241
let mut raw_data = vec![0.0f64; total_samples as usize];
163242
unsafe {
164243
gd_getdata(
@@ -174,7 +253,6 @@ impl Dirfile {
174253
raw_data
175254
}
176255
gd_type_t_GD_STRING => {
177-
// Handle string data and attempt to convert to f64.
178256
let mut raw_data = vec![CString::new("").unwrap(); total_samples as usize];
179257
unsafe {
180258
gd_getdata(
@@ -193,14 +271,13 @@ impl Dirfile {
193271
.collect()
194272
}
195273
_ => {
196-
// Handle unknown field types.
197274
println!("Unknown field type: {}", field_type);
198275
Vec::new()
199276
}
200277
};
201-
278+
202279
data // Return the processed data.
203-
}
280+
}
204281
}
205282

206283
#[cfg(test)]

0 commit comments

Comments
 (0)