oppai_sys/
lib.rs

1#![allow(non_camel_case_types)]
2
3// Modes
4pub const MODE_STD: u32 = 0;
5pub const MODE_TAIKO: u32 = 1;
6
7// Mods
8pub const MODS_NOMOD: u32 = 0;
9pub const MODS_NF: u32 = 1;
10pub const MODS_EZ: u32 = 2;
11pub const MODS_TD: u32 = 4;
12pub const MODS_HD: u32 = 8;
13pub const MODS_HR: u32 = 16;
14pub const MODS_SD: u32 = 32;
15pub const MODS_DT: u32 = 64;
16pub const MODS_RX: u32 = 128;
17pub const MODS_HT: u32 = 256;
18pub const MODS_NC: u32 = 512;
19pub const MODS_FL: u32 = 1024;
20pub const MODS_AT: u32 = 2048;
21pub const MODS_SO: u32 = 4096;
22pub const MODS_AP: u32 = 8192;
23pub const MODS_PF: u32 = 16384;
24pub const MODS_KEY4: u32 = 32768;
25pub const MODS_KEY5: u32 = 65536;
26pub const MODS_KEY6: u32 = 131072;
27pub const MODS_KEY7: u32 = 262144;
28pub const MODS_KEY8: u32 = 524288;
29pub const MODS_FADEIN: u32 = 1048576;
30pub const MODS_RANDOM: u32 = 2097152;
31pub const MODS_CINEMA: u32 = 4194304;
32pub const MODS_TARGET: u32 = 8388608;
33pub const MODS_KEY9: u32 = 16777216;
34pub const MODS_KEYCOOP: u32 = 33554432;
35pub const MODS_KEY1: u32 = 67108864;
36pub const MODS_KEY3: u32 = 134217728;
37pub const MODS_KEY2: u32 = 268435456;
38pub const MODS_SCOREV2: u32 = 536870912;
39pub const MODS_TOUCH_DEVICE: u32 = 4;
40pub const MODS_NOVIDEO: u32 = 4;
41pub const MODS_SPEED_CHANGING: u32 = 832;
42pub const MODS_MAP_CHANGING: u32 = 850;
43
44pub const ERR_MORE: i32 = -1;
45pub const ERR_SYNTAX: i32 = -2;
46pub const ERR_TRUNCATED: i32 = -3;
47pub const ERR_NOTIMPLEMENTED: i32 = -4;
48pub const ERR_IO: i32 = -5;
49pub const ERR_FORMAT: i32 = -6;
50pub const ERR_OOM: i32 = -7;
51pub const DIFF_SPEED: u32 = 0;
52pub const DIFF_AIM: u32 = 1;
53pub const OPPAI_VERSION_MAJOR: u32 = 3;
54pub const OPPAI_VERSION_MINOR: u32 = 2;
55pub const OPPAI_VERSION_PATCH: u32 = 3;
56pub const OBJ_CIRCLE: u32 = 1;
57pub const OBJ_SLIDER: u32 = 2;
58pub const OBJ_SPINNER: u32 = 8;
59pub const SOUND_NONE: u32 = 0;
60pub const SOUND_NORMAL: u32 = 1;
61pub const SOUND_WHISTLE: u32 = 2;
62pub const SOUND_FINISH: u32 = 4;
63pub const SOUND_CLAP: u32 = 8;
64pub const AUTOCALC_BIT: u32 = 1;
65pub const OWNS_MAP_BIT: u32 = 2;
66pub const M_BLOCK_SIZE: u32 = 4096;
67pub const AR0_MS: f64 = 1800.0;
68pub const AR5_MS: f64 = 1200.0;
69pub const AR10_MS: f64 = 450.0;
70pub const AR_MS_STEP1: f64 = 120.0;
71pub const AR_MS_STEP2: f64 = 150.0;
72pub const P_OVERRIDE_MODE: u32 = 1;
73pub const P_FOUND_AR: u32 = 2;
74pub const CIRCLESIZE_BUFF_TRESHOLD: f64 = 30.0;
75pub const PLAYFIELD_WIDTH: f64 = 512.0;
76pub const PLAYFIELD_HEIGHT: f64 = 384.0;
77pub const SINGLE_SPACING: f64 = 125.0;
78pub const STAR_SCALING_FACTOR: f64 = 0.0675;
79pub const EXTREME_SCALING_FACTOR: f64 = 0.5;
80pub const STRAIN_STEP: f64 = 400.0;
81pub const DECAY_WEIGHT: f64 = 0.9;
82pub const MAX_SPEED_BONUS: f64 = 45.0;
83pub const MIN_SPEED_BONUS: f64 = 75.0;
84pub const ANGLE_BONUS_SCALE: u32 = 90;
85pub const AIM_TIMING_THRESHOLD: u32 = 107;
86pub const SPEED_ANGLE_BONUS_BEGIN: f64 = 2.6179938779914944;
87pub const AIM_ANGLE_BONUS_BEGIN: f64 = 1.0471975511965976;
88pub const TAIKO_STAR_SCALING_FACTOR: f64 = 0.04125;
89pub const TAIKO_TYPE_CHANGE_BONUS: f64 = 0.75;
90pub const TAIKO_RHYTHM_CHANGE_BONUS: f64 = 1.0;
91pub const TAIKO_RHYTHM_CHANGE_BASE_THRESHOLD: f64 = 0.2;
92pub const TAIKO_RHYTHM_CHANGE_BASE: f64 = 2.0;
93
94// main struct
95pub type ezpp_t = *mut ezpp;
96extern "C" {
97    pub fn ezpp_new() -> ezpp_t;
98    pub fn ezpp_free(ez: ezpp_t);
99    pub fn ezpp(ez: ezpp_t, map: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int;
100    pub fn ezpp_pp(ez: ezpp_t) -> f32;
101    pub fn ezpp_stars(ez: ezpp_t) -> f32;
102    pub fn ezpp_set_autocalc(ez: ezpp_t, autocalc: ::std::os::raw::c_int);
103    pub fn ezpp_autocalc(ez: ezpp_t) -> ::std::os::raw::c_int;
104    pub fn ezpp_data(
105        ez: ezpp_t,
106        data: *mut ::std::os::raw::c_char,
107        data_size: ::std::os::raw::c_int,
108    ) -> ::std::os::raw::c_int;
109    pub fn ezpp_aim_stars(ez: ezpp_t) -> f32;
110    pub fn ezpp_speed_stars(ez: ezpp_t) -> f32;
111    pub fn ezpp_aim_pp(ez: ezpp_t) -> f32;
112    pub fn ezpp_speed_pp(ez: ezpp_t) -> f32;
113    pub fn ezpp_acc_pp(ez: ezpp_t) -> f32;
114    pub fn ezpp_accuracy_percent(ez: ezpp_t) -> f32;
115    pub fn ezpp_n300(ez: ezpp_t) -> ::std::os::raw::c_int;
116    pub fn ezpp_n100(ez: ezpp_t) -> ::std::os::raw::c_int;
117    pub fn ezpp_n50(ez: ezpp_t) -> ::std::os::raw::c_int;
118    pub fn ezpp_nmiss(ez: ezpp_t) -> ::std::os::raw::c_int;
119    pub fn ezpp_ar(ez: ezpp_t) -> f32;
120    pub fn ezpp_cs(ez: ezpp_t) -> f32;
121    pub fn ezpp_od(ez: ezpp_t) -> f32;
122    pub fn ezpp_hp(ez: ezpp_t) -> f32;
123    pub fn ezpp_artist(ez: ezpp_t) -> *mut ::std::os::raw::c_char;
124    pub fn ezpp_artist_unicode(ez: ezpp_t) -> *mut ::std::os::raw::c_char;
125    pub fn ezpp_title(ez: ezpp_t) -> *mut ::std::os::raw::c_char;
126    pub fn ezpp_title_unicode(ez: ezpp_t) -> *mut ::std::os::raw::c_char;
127    pub fn ezpp_version(ez: ezpp_t) -> *mut ::std::os::raw::c_char;
128    pub fn ezpp_creator(ez: ezpp_t) -> *mut ::std::os::raw::c_char;
129    pub fn ezpp_ncircles(ez: ezpp_t) -> ::std::os::raw::c_int;
130    pub fn ezpp_nsliders(ez: ezpp_t) -> ::std::os::raw::c_int;
131    pub fn ezpp_nspinners(ez: ezpp_t) -> ::std::os::raw::c_int;
132    pub fn ezpp_nobjects(ez: ezpp_t) -> ::std::os::raw::c_int;
133    pub fn ezpp_odms(ez: ezpp_t) -> f32;
134    pub fn ezpp_mode(ez: ezpp_t) -> ::std::os::raw::c_int;
135    pub fn ezpp_combo(ez: ezpp_t) -> ::std::os::raw::c_int;
136    pub fn ezpp_max_combo(ez: ezpp_t) -> ::std::os::raw::c_int;
137    pub fn ezpp_mods(ez: ezpp_t) -> ::std::os::raw::c_int;
138    pub fn ezpp_score_version(ez: ezpp_t) -> ::std::os::raw::c_int;
139    pub fn ezpp_time_at(ez: ezpp_t, i: ::std::os::raw::c_int) -> f32;
140    pub fn ezpp_strain_at(
141        ez: ezpp_t,
142        i: ::std::os::raw::c_int,
143        difficulty_type: ::std::os::raw::c_int,
144    ) -> f32;
145    pub fn ezpp_set_aim_stars(ez: ezpp_t, aim_stars: f32);
146    pub fn ezpp_set_speed_stars(ez: ezpp_t, speed_stars: f32);
147    pub fn ezpp_set_base_ar(ez: ezpp_t, ar: f32);
148    pub fn ezpp_set_base_od(ez: ezpp_t, od: f32);
149    pub fn ezpp_set_base_cs(ez: ezpp_t, cs: f32);
150    pub fn ezpp_set_base_hp(ez: ezpp_t, hp: f32);
151    pub fn ezpp_set_mode_override(ez: ezpp_t, mode_override: ::std::os::raw::c_int);
152    pub fn ezpp_set_mode(ez: ezpp_t, mode: ::std::os::raw::c_int);
153    pub fn ezpp_set_mods(ez: ezpp_t, mods: ::std::os::raw::c_int);
154    pub fn ezpp_set_combo(ez: ezpp_t, combo: ::std::os::raw::c_int);
155    pub fn ezpp_set_nmiss(ez: ezpp_t, nmiss: ::std::os::raw::c_int);
156    pub fn ezpp_set_score_version(ez: ezpp_t, score_version: ::std::os::raw::c_int);
157    pub fn ezpp_set_accuracy_percent(ez: ezpp_t, accuracy_percent: f32);
158    pub fn ezpp_set_accuracy(ez: ezpp_t, n100: ::std::os::raw::c_int, n50: ::std::os::raw::c_int);
159    pub fn ezpp_set_end(ez: ezpp_t, end: ::std::os::raw::c_int);
160    pub fn ezpp_set_end_time(ez: ezpp_t, end: f32);
161    pub fn ezpp_dup(ez: ezpp_t, mapfile: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int;
162    pub fn ezpp_data_dup(
163        ez: ezpp_t,
164        data: *mut ::std::os::raw::c_char,
165        data_size: ::std::os::raw::c_int,
166    ) -> ::std::os::raw::c_int;
167    pub fn errstr(err: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char;
168    pub fn oppai_version(
169        major: *mut ::std::os::raw::c_int,
170        minor: *mut ::std::os::raw::c_int,
171        patch: *mut ::std::os::raw::c_int,
172    );
173    pub fn oppai_version_str() -> *mut ::std::os::raw::c_char;
174}
175pub type _bindgen_ty_1 = u32;
176extern "C" {
177    pub fn info(fmt: *mut ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int;
178    pub fn get_inf() -> f32;
179    pub fn get_nan() -> f32;
180    pub fn v2f_sub(dst: *mut f32, a: *mut f32, b: *mut f32);
181    pub fn v2f_len(v: *mut f32) -> f32;
182    pub fn v2f_dot(a: *mut f32, b: *mut f32) -> f32;
183    pub fn is_nan(b: f32) -> ::std::os::raw::c_int;
184    pub fn is_inf(b: f32) -> ::std::os::raw::c_int;
185    pub fn whitespace(c: ::std::os::raw::c_char) -> ::std::os::raw::c_int;
186}
187#[repr(C)]
188#[derive(Debug, Copy, Clone)]
189pub struct slice {
190    pub start: *mut ::std::os::raw::c_char,
191    pub end: *mut ::std::os::raw::c_char,
192}
193#[test]
194fn bindgen_test_layout_slice() {
195    assert_eq!(
196        ::std::mem::size_of::<slice>(),
197        16usize,
198        concat!("Size of: ", stringify!(slice))
199    );
200    assert_eq!(
201        ::std::mem::align_of::<slice>(),
202        8usize,
203        concat!("Alignment of ", stringify!(slice))
204    );
205    assert_eq!(
206        unsafe { &(*(::std::ptr::null::<slice>())).start as *const _ as usize },
207        0usize,
208        concat!(
209            "Offset of field: ",
210            stringify!(slice),
211            "::",
212            stringify!(start)
213        )
214    );
215    assert_eq!(
216        unsafe { &(*(::std::ptr::null::<slice>())).end as *const _ as usize },
217        8usize,
218        concat!(
219            "Offset of field: ",
220            stringify!(slice),
221            "::",
222            stringify!(end)
223        )
224    );
225}
226pub type slice_t = slice;
227extern "C" {
228    pub fn slice_write(s: *mut slice_t, f: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int;
229    pub fn slice_whitespace(s: *mut slice_t) -> ::std::os::raw::c_int;
230    pub fn slice_trim(s: *mut slice_t);
231    pub fn slice_cmp(s: *mut slice_t, str: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int;
232    pub fn slice_len(s: *mut slice_t) -> ::std::os::raw::c_int;
233    pub fn slice_split(
234        s: *mut slice_t,
235        separator_list: *mut ::std::os::raw::c_char,
236        arr: *mut slice_t,
237        nmax: ::std::os::raw::c_int,
238        err: *mut ::std::os::raw::c_int,
239    ) -> ::std::os::raw::c_int;
240    pub fn array_reserve_i(
241        n: ::std::os::raw::c_int,
242        cap: *mut ::std::os::raw::c_int,
243        len: *mut ::std::os::raw::c_int,
244        data: *mut *mut ::std::os::raw::c_void,
245        esize: ::std::os::raw::c_int,
246    ) -> ::std::os::raw::c_int;
247    pub fn array_free_i(
248        cap: *mut ::std::os::raw::c_int,
249        len: *mut ::std::os::raw::c_int,
250        data: *mut *mut ::std::os::raw::c_void,
251        esize: ::std::os::raw::c_int,
252    );
253}
254#[repr(C)]
255#[derive(Debug, Copy, Clone)]
256pub struct timing {
257    pub time: f32,
258    pub ms_per_beat: f32,
259    pub change: ::std::os::raw::c_int,
260    pub px_per_beat: f32,
261    pub beat_len: f32,
262    pub velocity: f32,
263}
264#[test]
265fn bindgen_test_layout_timing() {
266    assert_eq!(
267        ::std::mem::size_of::<timing>(),
268        24usize,
269        concat!("Size of: ", stringify!(timing))
270    );
271    assert_eq!(
272        ::std::mem::align_of::<timing>(),
273        4usize,
274        concat!("Alignment of ", stringify!(timing))
275    );
276    assert_eq!(
277        unsafe { &(*(::std::ptr::null::<timing>())).time as *const _ as usize },
278        0usize,
279        concat!(
280            "Offset of field: ",
281            stringify!(timing),
282            "::",
283            stringify!(time)
284        )
285    );
286    assert_eq!(
287        unsafe { &(*(::std::ptr::null::<timing>())).ms_per_beat as *const _ as usize },
288        4usize,
289        concat!(
290            "Offset of field: ",
291            stringify!(timing),
292            "::",
293            stringify!(ms_per_beat)
294        )
295    );
296    assert_eq!(
297        unsafe { &(*(::std::ptr::null::<timing>())).change as *const _ as usize },
298        8usize,
299        concat!(
300            "Offset of field: ",
301            stringify!(timing),
302            "::",
303            stringify!(change)
304        )
305    );
306    assert_eq!(
307        unsafe { &(*(::std::ptr::null::<timing>())).px_per_beat as *const _ as usize },
308        12usize,
309        concat!(
310            "Offset of field: ",
311            stringify!(timing),
312            "::",
313            stringify!(px_per_beat)
314        )
315    );
316    assert_eq!(
317        unsafe { &(*(::std::ptr::null::<timing>())).beat_len as *const _ as usize },
318        16usize,
319        concat!(
320            "Offset of field: ",
321            stringify!(timing),
322            "::",
323            stringify!(beat_len)
324        )
325    );
326    assert_eq!(
327        unsafe { &(*(::std::ptr::null::<timing>())).velocity as *const _ as usize },
328        20usize,
329        concat!(
330            "Offset of field: ",
331            stringify!(timing),
332            "::",
333            stringify!(velocity)
334        )
335    );
336}
337pub type timing_t = timing;
338#[repr(C)]
339#[derive(Debug, Copy, Clone)]
340pub struct object {
341    pub time: f32,
342    pub type_: ::std::os::raw::c_int,
343    pub nsound_types: ::std::os::raw::c_int,
344    pub sound_types: *mut ::std::os::raw::c_int,
345    pub normpos: [f32; 2usize],
346    pub angle: f32,
347    pub strains: [f32; 2usize],
348    pub is_single: ::std::os::raw::c_int,
349    pub delta_time: f32,
350    pub d_distance: f32,
351    pub timing_point: ::std::os::raw::c_int,
352    pub pos: [f32; 2usize],
353    pub distance: f32,
354    pub repetitions: ::std::os::raw::c_int,
355    pub duration: f32,
356    pub tick_spacing: f32,
357    pub slider_is_drum_roll: ::std::os::raw::c_int,
358}
359#[test]
360fn bindgen_test_layout_object() {
361    assert_eq!(
362        ::std::mem::size_of::<object>(),
363        88usize,
364        concat!("Size of: ", stringify!(object))
365    );
366    assert_eq!(
367        ::std::mem::align_of::<object>(),
368        8usize,
369        concat!("Alignment of ", stringify!(object))
370    );
371    assert_eq!(
372        unsafe { &(*(::std::ptr::null::<object>())).time as *const _ as usize },
373        0usize,
374        concat!(
375            "Offset of field: ",
376            stringify!(object),
377            "::",
378            stringify!(time)
379        )
380    );
381    assert_eq!(
382        unsafe { &(*(::std::ptr::null::<object>())).type_ as *const _ as usize },
383        4usize,
384        concat!(
385            "Offset of field: ",
386            stringify!(object),
387            "::",
388            stringify!(type_)
389        )
390    );
391    assert_eq!(
392        unsafe { &(*(::std::ptr::null::<object>())).nsound_types as *const _ as usize },
393        8usize,
394        concat!(
395            "Offset of field: ",
396            stringify!(object),
397            "::",
398            stringify!(nsound_types)
399        )
400    );
401    assert_eq!(
402        unsafe { &(*(::std::ptr::null::<object>())).sound_types as *const _ as usize },
403        16usize,
404        concat!(
405            "Offset of field: ",
406            stringify!(object),
407            "::",
408            stringify!(sound_types)
409        )
410    );
411    assert_eq!(
412        unsafe { &(*(::std::ptr::null::<object>())).normpos as *const _ as usize },
413        24usize,
414        concat!(
415            "Offset of field: ",
416            stringify!(object),
417            "::",
418            stringify!(normpos)
419        )
420    );
421    assert_eq!(
422        unsafe { &(*(::std::ptr::null::<object>())).angle as *const _ as usize },
423        32usize,
424        concat!(
425            "Offset of field: ",
426            stringify!(object),
427            "::",
428            stringify!(angle)
429        )
430    );
431    assert_eq!(
432        unsafe { &(*(::std::ptr::null::<object>())).strains as *const _ as usize },
433        36usize,
434        concat!(
435            "Offset of field: ",
436            stringify!(object),
437            "::",
438            stringify!(strains)
439        )
440    );
441    assert_eq!(
442        unsafe { &(*(::std::ptr::null::<object>())).is_single as *const _ as usize },
443        44usize,
444        concat!(
445            "Offset of field: ",
446            stringify!(object),
447            "::",
448            stringify!(is_single)
449        )
450    );
451    assert_eq!(
452        unsafe { &(*(::std::ptr::null::<object>())).delta_time as *const _ as usize },
453        48usize,
454        concat!(
455            "Offset of field: ",
456            stringify!(object),
457            "::",
458            stringify!(delta_time)
459        )
460    );
461    assert_eq!(
462        unsafe { &(*(::std::ptr::null::<object>())).d_distance as *const _ as usize },
463        52usize,
464        concat!(
465            "Offset of field: ",
466            stringify!(object),
467            "::",
468            stringify!(d_distance)
469        )
470    );
471    assert_eq!(
472        unsafe { &(*(::std::ptr::null::<object>())).timing_point as *const _ as usize },
473        56usize,
474        concat!(
475            "Offset of field: ",
476            stringify!(object),
477            "::",
478            stringify!(timing_point)
479        )
480    );
481    assert_eq!(
482        unsafe { &(*(::std::ptr::null::<object>())).pos as *const _ as usize },
483        60usize,
484        concat!(
485            "Offset of field: ",
486            stringify!(object),
487            "::",
488            stringify!(pos)
489        )
490    );
491    assert_eq!(
492        unsafe { &(*(::std::ptr::null::<object>())).distance as *const _ as usize },
493        68usize,
494        concat!(
495            "Offset of field: ",
496            stringify!(object),
497            "::",
498            stringify!(distance)
499        )
500    );
501    assert_eq!(
502        unsafe { &(*(::std::ptr::null::<object>())).repetitions as *const _ as usize },
503        72usize,
504        concat!(
505            "Offset of field: ",
506            stringify!(object),
507            "::",
508            stringify!(repetitions)
509        )
510    );
511    assert_eq!(
512        unsafe { &(*(::std::ptr::null::<object>())).duration as *const _ as usize },
513        76usize,
514        concat!(
515            "Offset of field: ",
516            stringify!(object),
517            "::",
518            stringify!(duration)
519        )
520    );
521    assert_eq!(
522        unsafe { &(*(::std::ptr::null::<object>())).tick_spacing as *const _ as usize },
523        80usize,
524        concat!(
525            "Offset of field: ",
526            stringify!(object),
527            "::",
528            stringify!(tick_spacing)
529        )
530    );
531    assert_eq!(
532        unsafe { &(*(::std::ptr::null::<object>())).slider_is_drum_roll as *const _ as usize },
533        84usize,
534        concat!(
535            "Offset of field: ",
536            stringify!(object),
537            "::",
538            stringify!(slider_is_drum_roll)
539        )
540    );
541}
542pub type object_t = object;
543#[repr(C)]
544#[derive(Copy, Clone)]
545pub struct ezpp {
546    pub map: *mut ::std::os::raw::c_char,
547    pub data: *mut ::std::os::raw::c_char,
548    pub data_size: ::std::os::raw::c_int,
549    pub flags: ::std::os::raw::c_int,
550    pub format_version: ::std::os::raw::c_int,
551    pub mode: ::std::os::raw::c_int,
552    pub mode_override: ::std::os::raw::c_int,
553    pub original_mode: ::std::os::raw::c_int,
554    pub score_version: ::std::os::raw::c_int,
555    pub mods: ::std::os::raw::c_int,
556    pub combo: ::std::os::raw::c_int,
557    pub accuracy_percent: f32,
558    pub n300: ::std::os::raw::c_int,
559    pub n100: ::std::os::raw::c_int,
560    pub n50: ::std::os::raw::c_int,
561    pub nmiss: ::std::os::raw::c_int,
562    pub end: ::std::os::raw::c_int,
563    pub end_time: f32,
564    pub base_ar: f32,
565    pub base_cs: f32,
566    pub base_od: f32,
567    pub base_hp: f32,
568    pub max_combo: ::std::os::raw::c_int,
569    pub title: *mut ::std::os::raw::c_char,
570    pub title_unicode: *mut ::std::os::raw::c_char,
571    pub artist: *mut ::std::os::raw::c_char,
572    pub artist_unicode: *mut ::std::os::raw::c_char,
573    pub creator: *mut ::std::os::raw::c_char,
574    pub version: *mut ::std::os::raw::c_char,
575    pub ncircles: ::std::os::raw::c_int,
576    pub nsliders: ::std::os::raw::c_int,
577    pub nspinners: ::std::os::raw::c_int,
578    pub nobjects: ::std::os::raw::c_int,
579    pub ar: f32,
580    pub od: f32,
581    pub cs: f32,
582    pub hp: f32,
583    pub odms: f32,
584    pub sv: f32,
585    pub tick_rate: f32,
586    pub speed_mul: f32,
587    pub stars: f32,
588    pub aim_stars: f32,
589    pub aim_difficulty: f32,
590    pub aim_length_bonus: f32,
591    pub speed_stars: f32,
592    pub speed_difficulty: f32,
593    pub speed_length_bonus: f32,
594    pub pp: f32,
595    pub aim_pp: f32,
596    pub speed_pp: f32,
597    pub acc_pp: f32,
598    pub section: [::std::os::raw::c_char; 64usize],
599    pub buf: [::std::os::raw::c_char; 65535usize],
600    pub p_flags: ::std::os::raw::c_int,
601    pub objects: ezpp__bindgen_ty_1,
602    pub timing_points: ezpp__bindgen_ty_2,
603    pub interval_end: f32,
604    pub max_strain: f32,
605    pub highest_strains: ezpp__bindgen_ty_3,
606    pub block: *mut ::std::os::raw::c_char,
607    pub end_of_block: *mut ::std::os::raw::c_char,
608    pub blocks: ezpp__bindgen_ty_4,
609}
610#[repr(C)]
611#[derive(Debug, Copy, Clone)]
612pub struct ezpp__bindgen_ty_1 {
613    pub cap: ::std::os::raw::c_int,
614    pub len: ::std::os::raw::c_int,
615    pub data: *mut object_t,
616}
617#[test]
618fn bindgen_test_layout_ezpp__bindgen_ty_1() {
619    assert_eq!(
620        ::std::mem::size_of::<ezpp__bindgen_ty_1>(),
621        16usize,
622        concat!("Size of: ", stringify!(ezpp__bindgen_ty_1))
623    );
624    assert_eq!(
625        ::std::mem::align_of::<ezpp__bindgen_ty_1>(),
626        8usize,
627        concat!("Alignment of ", stringify!(ezpp__bindgen_ty_1))
628    );
629    assert_eq!(
630        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_1>())).cap as *const _ as usize },
631        0usize,
632        concat!(
633            "Offset of field: ",
634            stringify!(ezpp__bindgen_ty_1),
635            "::",
636            stringify!(cap)
637        )
638    );
639    assert_eq!(
640        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_1>())).len as *const _ as usize },
641        4usize,
642        concat!(
643            "Offset of field: ",
644            stringify!(ezpp__bindgen_ty_1),
645            "::",
646            stringify!(len)
647        )
648    );
649    assert_eq!(
650        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_1>())).data as *const _ as usize },
651        8usize,
652        concat!(
653            "Offset of field: ",
654            stringify!(ezpp__bindgen_ty_1),
655            "::",
656            stringify!(data)
657        )
658    );
659}
660#[repr(C)]
661#[derive(Debug, Copy, Clone)]
662pub struct ezpp__bindgen_ty_2 {
663    pub cap: ::std::os::raw::c_int,
664    pub len: ::std::os::raw::c_int,
665    pub data: *mut timing_t,
666}
667#[test]
668fn bindgen_test_layout_ezpp__bindgen_ty_2() {
669    assert_eq!(
670        ::std::mem::size_of::<ezpp__bindgen_ty_2>(),
671        16usize,
672        concat!("Size of: ", stringify!(ezpp__bindgen_ty_2))
673    );
674    assert_eq!(
675        ::std::mem::align_of::<ezpp__bindgen_ty_2>(),
676        8usize,
677        concat!("Alignment of ", stringify!(ezpp__bindgen_ty_2))
678    );
679    assert_eq!(
680        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_2>())).cap as *const _ as usize },
681        0usize,
682        concat!(
683            "Offset of field: ",
684            stringify!(ezpp__bindgen_ty_2),
685            "::",
686            stringify!(cap)
687        )
688    );
689    assert_eq!(
690        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_2>())).len as *const _ as usize },
691        4usize,
692        concat!(
693            "Offset of field: ",
694            stringify!(ezpp__bindgen_ty_2),
695            "::",
696            stringify!(len)
697        )
698    );
699    assert_eq!(
700        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_2>())).data as *const _ as usize },
701        8usize,
702        concat!(
703            "Offset of field: ",
704            stringify!(ezpp__bindgen_ty_2),
705            "::",
706            stringify!(data)
707        )
708    );
709}
710#[repr(C)]
711#[derive(Debug, Copy, Clone)]
712pub struct ezpp__bindgen_ty_3 {
713    pub cap: ::std::os::raw::c_int,
714    pub len: ::std::os::raw::c_int,
715    pub data: *mut f32,
716}
717#[test]
718fn bindgen_test_layout_ezpp__bindgen_ty_3() {
719    assert_eq!(
720        ::std::mem::size_of::<ezpp__bindgen_ty_3>(),
721        16usize,
722        concat!("Size of: ", stringify!(ezpp__bindgen_ty_3))
723    );
724    assert_eq!(
725        ::std::mem::align_of::<ezpp__bindgen_ty_3>(),
726        8usize,
727        concat!("Alignment of ", stringify!(ezpp__bindgen_ty_3))
728    );
729    assert_eq!(
730        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_3>())).cap as *const _ as usize },
731        0usize,
732        concat!(
733            "Offset of field: ",
734            stringify!(ezpp__bindgen_ty_3),
735            "::",
736            stringify!(cap)
737        )
738    );
739    assert_eq!(
740        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_3>())).len as *const _ as usize },
741        4usize,
742        concat!(
743            "Offset of field: ",
744            stringify!(ezpp__bindgen_ty_3),
745            "::",
746            stringify!(len)
747        )
748    );
749    assert_eq!(
750        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_3>())).data as *const _ as usize },
751        8usize,
752        concat!(
753            "Offset of field: ",
754            stringify!(ezpp__bindgen_ty_3),
755            "::",
756            stringify!(data)
757        )
758    );
759}
760#[repr(C)]
761#[derive(Debug, Copy, Clone)]
762pub struct ezpp__bindgen_ty_4 {
763    pub cap: ::std::os::raw::c_int,
764    pub len: ::std::os::raw::c_int,
765    pub data: *mut *mut ::std::os::raw::c_char,
766}
767#[test]
768fn bindgen_test_layout_ezpp__bindgen_ty_4() {
769    assert_eq!(
770        ::std::mem::size_of::<ezpp__bindgen_ty_4>(),
771        16usize,
772        concat!("Size of: ", stringify!(ezpp__bindgen_ty_4))
773    );
774    assert_eq!(
775        ::std::mem::align_of::<ezpp__bindgen_ty_4>(),
776        8usize,
777        concat!("Alignment of ", stringify!(ezpp__bindgen_ty_4))
778    );
779    assert_eq!(
780        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_4>())).cap as *const _ as usize },
781        0usize,
782        concat!(
783            "Offset of field: ",
784            stringify!(ezpp__bindgen_ty_4),
785            "::",
786            stringify!(cap)
787        )
788    );
789    assert_eq!(
790        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_4>())).len as *const _ as usize },
791        4usize,
792        concat!(
793            "Offset of field: ",
794            stringify!(ezpp__bindgen_ty_4),
795            "::",
796            stringify!(len)
797        )
798    );
799    assert_eq!(
800        unsafe { &(*(::std::ptr::null::<ezpp__bindgen_ty_4>())).data as *const _ as usize },
801        8usize,
802        concat!(
803            "Offset of field: ",
804            stringify!(ezpp__bindgen_ty_4),
805            "::",
806            stringify!(data)
807        )
808    );
809}
810#[test]
811fn bindgen_test_layout_ezpp() {
812    assert_eq!(
813        ::std::mem::size_of::<ezpp>(),
814        65936usize,
815        concat!("Size of: ", stringify!(ezpp))
816    );
817    assert_eq!(
818        ::std::mem::align_of::<ezpp>(),
819        8usize,
820        concat!("Alignment of ", stringify!(ezpp))
821    );
822    assert_eq!(
823        unsafe { &(*(::std::ptr::null::<ezpp>())).map as *const _ as usize },
824        0usize,
825        concat!("Offset of field: ", stringify!(ezpp), "::", stringify!(map))
826    );
827    assert_eq!(
828        unsafe { &(*(::std::ptr::null::<ezpp>())).data as *const _ as usize },
829        8usize,
830        concat!(
831            "Offset of field: ",
832            stringify!(ezpp),
833            "::",
834            stringify!(data)
835        )
836    );
837    assert_eq!(
838        unsafe { &(*(::std::ptr::null::<ezpp>())).data_size as *const _ as usize },
839        16usize,
840        concat!(
841            "Offset of field: ",
842            stringify!(ezpp),
843            "::",
844            stringify!(data_size)
845        )
846    );
847    assert_eq!(
848        unsafe { &(*(::std::ptr::null::<ezpp>())).flags as *const _ as usize },
849        20usize,
850        concat!(
851            "Offset of field: ",
852            stringify!(ezpp),
853            "::",
854            stringify!(flags)
855        )
856    );
857    assert_eq!(
858        unsafe { &(*(::std::ptr::null::<ezpp>())).format_version as *const _ as usize },
859        24usize,
860        concat!(
861            "Offset of field: ",
862            stringify!(ezpp),
863            "::",
864            stringify!(format_version)
865        )
866    );
867    assert_eq!(
868        unsafe { &(*(::std::ptr::null::<ezpp>())).mode as *const _ as usize },
869        28usize,
870        concat!(
871            "Offset of field: ",
872            stringify!(ezpp),
873            "::",
874            stringify!(mode)
875        )
876    );
877    assert_eq!(
878        unsafe { &(*(::std::ptr::null::<ezpp>())).mode_override as *const _ as usize },
879        32usize,
880        concat!(
881            "Offset of field: ",
882            stringify!(ezpp),
883            "::",
884            stringify!(mode_override)
885        )
886    );
887    assert_eq!(
888        unsafe { &(*(::std::ptr::null::<ezpp>())).original_mode as *const _ as usize },
889        36usize,
890        concat!(
891            "Offset of field: ",
892            stringify!(ezpp),
893            "::",
894            stringify!(original_mode)
895        )
896    );
897    assert_eq!(
898        unsafe { &(*(::std::ptr::null::<ezpp>())).score_version as *const _ as usize },
899        40usize,
900        concat!(
901            "Offset of field: ",
902            stringify!(ezpp),
903            "::",
904            stringify!(score_version)
905        )
906    );
907    assert_eq!(
908        unsafe { &(*(::std::ptr::null::<ezpp>())).mods as *const _ as usize },
909        44usize,
910        concat!(
911            "Offset of field: ",
912            stringify!(ezpp),
913            "::",
914            stringify!(mods)
915        )
916    );
917    assert_eq!(
918        unsafe { &(*(::std::ptr::null::<ezpp>())).combo as *const _ as usize },
919        48usize,
920        concat!(
921            "Offset of field: ",
922            stringify!(ezpp),
923            "::",
924            stringify!(combo)
925        )
926    );
927    assert_eq!(
928        unsafe { &(*(::std::ptr::null::<ezpp>())).accuracy_percent as *const _ as usize },
929        52usize,
930        concat!(
931            "Offset of field: ",
932            stringify!(ezpp),
933            "::",
934            stringify!(accuracy_percent)
935        )
936    );
937    assert_eq!(
938        unsafe { &(*(::std::ptr::null::<ezpp>())).n300 as *const _ as usize },
939        56usize,
940        concat!(
941            "Offset of field: ",
942            stringify!(ezpp),
943            "::",
944            stringify!(n300)
945        )
946    );
947    assert_eq!(
948        unsafe { &(*(::std::ptr::null::<ezpp>())).n100 as *const _ as usize },
949        60usize,
950        concat!(
951            "Offset of field: ",
952            stringify!(ezpp),
953            "::",
954            stringify!(n100)
955        )
956    );
957    assert_eq!(
958        unsafe { &(*(::std::ptr::null::<ezpp>())).n50 as *const _ as usize },
959        64usize,
960        concat!("Offset of field: ", stringify!(ezpp), "::", stringify!(n50))
961    );
962    assert_eq!(
963        unsafe { &(*(::std::ptr::null::<ezpp>())).nmiss as *const _ as usize },
964        68usize,
965        concat!(
966            "Offset of field: ",
967            stringify!(ezpp),
968            "::",
969            stringify!(nmiss)
970        )
971    );
972    assert_eq!(
973        unsafe { &(*(::std::ptr::null::<ezpp>())).end as *const _ as usize },
974        72usize,
975        concat!("Offset of field: ", stringify!(ezpp), "::", stringify!(end))
976    );
977    assert_eq!(
978        unsafe { &(*(::std::ptr::null::<ezpp>())).end_time as *const _ as usize },
979        76usize,
980        concat!(
981            "Offset of field: ",
982            stringify!(ezpp),
983            "::",
984            stringify!(end_time)
985        )
986    );
987    assert_eq!(
988        unsafe { &(*(::std::ptr::null::<ezpp>())).base_ar as *const _ as usize },
989        80usize,
990        concat!(
991            "Offset of field: ",
992            stringify!(ezpp),
993            "::",
994            stringify!(base_ar)
995        )
996    );
997    assert_eq!(
998        unsafe { &(*(::std::ptr::null::<ezpp>())).base_cs as *const _ as usize },
999        84usize,
1000        concat!(
1001            "Offset of field: ",
1002            stringify!(ezpp),
1003            "::",
1004            stringify!(base_cs)
1005        )
1006    );
1007    assert_eq!(
1008        unsafe { &(*(::std::ptr::null::<ezpp>())).base_od as *const _ as usize },
1009        88usize,
1010        concat!(
1011            "Offset of field: ",
1012            stringify!(ezpp),
1013            "::",
1014            stringify!(base_od)
1015        )
1016    );
1017    assert_eq!(
1018        unsafe { &(*(::std::ptr::null::<ezpp>())).base_hp as *const _ as usize },
1019        92usize,
1020        concat!(
1021            "Offset of field: ",
1022            stringify!(ezpp),
1023            "::",
1024            stringify!(base_hp)
1025        )
1026    );
1027    assert_eq!(
1028        unsafe { &(*(::std::ptr::null::<ezpp>())).max_combo as *const _ as usize },
1029        96usize,
1030        concat!(
1031            "Offset of field: ",
1032            stringify!(ezpp),
1033            "::",
1034            stringify!(max_combo)
1035        )
1036    );
1037    assert_eq!(
1038        unsafe { &(*(::std::ptr::null::<ezpp>())).title as *const _ as usize },
1039        104usize,
1040        concat!(
1041            "Offset of field: ",
1042            stringify!(ezpp),
1043            "::",
1044            stringify!(title)
1045        )
1046    );
1047    assert_eq!(
1048        unsafe { &(*(::std::ptr::null::<ezpp>())).title_unicode as *const _ as usize },
1049        112usize,
1050        concat!(
1051            "Offset of field: ",
1052            stringify!(ezpp),
1053            "::",
1054            stringify!(title_unicode)
1055        )
1056    );
1057    assert_eq!(
1058        unsafe { &(*(::std::ptr::null::<ezpp>())).artist as *const _ as usize },
1059        120usize,
1060        concat!(
1061            "Offset of field: ",
1062            stringify!(ezpp),
1063            "::",
1064            stringify!(artist)
1065        )
1066    );
1067    assert_eq!(
1068        unsafe { &(*(::std::ptr::null::<ezpp>())).artist_unicode as *const _ as usize },
1069        128usize,
1070        concat!(
1071            "Offset of field: ",
1072            stringify!(ezpp),
1073            "::",
1074            stringify!(artist_unicode)
1075        )
1076    );
1077    assert_eq!(
1078        unsafe { &(*(::std::ptr::null::<ezpp>())).creator as *const _ as usize },
1079        136usize,
1080        concat!(
1081            "Offset of field: ",
1082            stringify!(ezpp),
1083            "::",
1084            stringify!(creator)
1085        )
1086    );
1087    assert_eq!(
1088        unsafe { &(*(::std::ptr::null::<ezpp>())).version as *const _ as usize },
1089        144usize,
1090        concat!(
1091            "Offset of field: ",
1092            stringify!(ezpp),
1093            "::",
1094            stringify!(version)
1095        )
1096    );
1097    assert_eq!(
1098        unsafe { &(*(::std::ptr::null::<ezpp>())).ncircles as *const _ as usize },
1099        152usize,
1100        concat!(
1101            "Offset of field: ",
1102            stringify!(ezpp),
1103            "::",
1104            stringify!(ncircles)
1105        )
1106    );
1107    assert_eq!(
1108        unsafe { &(*(::std::ptr::null::<ezpp>())).nsliders as *const _ as usize },
1109        156usize,
1110        concat!(
1111            "Offset of field: ",
1112            stringify!(ezpp),
1113            "::",
1114            stringify!(nsliders)
1115        )
1116    );
1117    assert_eq!(
1118        unsafe { &(*(::std::ptr::null::<ezpp>())).nspinners as *const _ as usize },
1119        160usize,
1120        concat!(
1121            "Offset of field: ",
1122            stringify!(ezpp),
1123            "::",
1124            stringify!(nspinners)
1125        )
1126    );
1127    assert_eq!(
1128        unsafe { &(*(::std::ptr::null::<ezpp>())).nobjects as *const _ as usize },
1129        164usize,
1130        concat!(
1131            "Offset of field: ",
1132            stringify!(ezpp),
1133            "::",
1134            stringify!(nobjects)
1135        )
1136    );
1137    assert_eq!(
1138        unsafe { &(*(::std::ptr::null::<ezpp>())).ar as *const _ as usize },
1139        168usize,
1140        concat!("Offset of field: ", stringify!(ezpp), "::", stringify!(ar))
1141    );
1142    assert_eq!(
1143        unsafe { &(*(::std::ptr::null::<ezpp>())).od as *const _ as usize },
1144        172usize,
1145        concat!("Offset of field: ", stringify!(ezpp), "::", stringify!(od))
1146    );
1147    assert_eq!(
1148        unsafe { &(*(::std::ptr::null::<ezpp>())).cs as *const _ as usize },
1149        176usize,
1150        concat!("Offset of field: ", stringify!(ezpp), "::", stringify!(cs))
1151    );
1152    assert_eq!(
1153        unsafe { &(*(::std::ptr::null::<ezpp>())).hp as *const _ as usize },
1154        180usize,
1155        concat!("Offset of field: ", stringify!(ezpp), "::", stringify!(hp))
1156    );
1157    assert_eq!(
1158        unsafe { &(*(::std::ptr::null::<ezpp>())).odms as *const _ as usize },
1159        184usize,
1160        concat!(
1161            "Offset of field: ",
1162            stringify!(ezpp),
1163            "::",
1164            stringify!(odms)
1165        )
1166    );
1167    assert_eq!(
1168        unsafe { &(*(::std::ptr::null::<ezpp>())).sv as *const _ as usize },
1169        188usize,
1170        concat!("Offset of field: ", stringify!(ezpp), "::", stringify!(sv))
1171    );
1172    assert_eq!(
1173        unsafe { &(*(::std::ptr::null::<ezpp>())).tick_rate as *const _ as usize },
1174        192usize,
1175        concat!(
1176            "Offset of field: ",
1177            stringify!(ezpp),
1178            "::",
1179            stringify!(tick_rate)
1180        )
1181    );
1182    assert_eq!(
1183        unsafe { &(*(::std::ptr::null::<ezpp>())).speed_mul as *const _ as usize },
1184        196usize,
1185        concat!(
1186            "Offset of field: ",
1187            stringify!(ezpp),
1188            "::",
1189            stringify!(speed_mul)
1190        )
1191    );
1192    assert_eq!(
1193        unsafe { &(*(::std::ptr::null::<ezpp>())).stars as *const _ as usize },
1194        200usize,
1195        concat!(
1196            "Offset of field: ",
1197            stringify!(ezpp),
1198            "::",
1199            stringify!(stars)
1200        )
1201    );
1202    assert_eq!(
1203        unsafe { &(*(::std::ptr::null::<ezpp>())).aim_stars as *const _ as usize },
1204        204usize,
1205        concat!(
1206            "Offset of field: ",
1207            stringify!(ezpp),
1208            "::",
1209            stringify!(aim_stars)
1210        )
1211    );
1212    assert_eq!(
1213        unsafe { &(*(::std::ptr::null::<ezpp>())).aim_difficulty as *const _ as usize },
1214        208usize,
1215        concat!(
1216            "Offset of field: ",
1217            stringify!(ezpp),
1218            "::",
1219            stringify!(aim_difficulty)
1220        )
1221    );
1222    assert_eq!(
1223        unsafe { &(*(::std::ptr::null::<ezpp>())).aim_length_bonus as *const _ as usize },
1224        212usize,
1225        concat!(
1226            "Offset of field: ",
1227            stringify!(ezpp),
1228            "::",
1229            stringify!(aim_length_bonus)
1230        )
1231    );
1232    assert_eq!(
1233        unsafe { &(*(::std::ptr::null::<ezpp>())).speed_stars as *const _ as usize },
1234        216usize,
1235        concat!(
1236            "Offset of field: ",
1237            stringify!(ezpp),
1238            "::",
1239            stringify!(speed_stars)
1240        )
1241    );
1242    assert_eq!(
1243        unsafe { &(*(::std::ptr::null::<ezpp>())).speed_difficulty as *const _ as usize },
1244        220usize,
1245        concat!(
1246            "Offset of field: ",
1247            stringify!(ezpp),
1248            "::",
1249            stringify!(speed_difficulty)
1250        )
1251    );
1252    assert_eq!(
1253        unsafe { &(*(::std::ptr::null::<ezpp>())).speed_length_bonus as *const _ as usize },
1254        224usize,
1255        concat!(
1256            "Offset of field: ",
1257            stringify!(ezpp),
1258            "::",
1259            stringify!(speed_length_bonus)
1260        )
1261    );
1262    assert_eq!(
1263        unsafe { &(*(::std::ptr::null::<ezpp>())).pp as *const _ as usize },
1264        228usize,
1265        concat!("Offset of field: ", stringify!(ezpp), "::", stringify!(pp))
1266    );
1267    assert_eq!(
1268        unsafe { &(*(::std::ptr::null::<ezpp>())).aim_pp as *const _ as usize },
1269        232usize,
1270        concat!(
1271            "Offset of field: ",
1272            stringify!(ezpp),
1273            "::",
1274            stringify!(aim_pp)
1275        )
1276    );
1277    assert_eq!(
1278        unsafe { &(*(::std::ptr::null::<ezpp>())).speed_pp as *const _ as usize },
1279        236usize,
1280        concat!(
1281            "Offset of field: ",
1282            stringify!(ezpp),
1283            "::",
1284            stringify!(speed_pp)
1285        )
1286    );
1287    assert_eq!(
1288        unsafe { &(*(::std::ptr::null::<ezpp>())).acc_pp as *const _ as usize },
1289        240usize,
1290        concat!(
1291            "Offset of field: ",
1292            stringify!(ezpp),
1293            "::",
1294            stringify!(acc_pp)
1295        )
1296    );
1297    assert_eq!(
1298        unsafe { &(*(::std::ptr::null::<ezpp>())).section as *const _ as usize },
1299        244usize,
1300        concat!(
1301            "Offset of field: ",
1302            stringify!(ezpp),
1303            "::",
1304            stringify!(section)
1305        )
1306    );
1307    assert_eq!(
1308        unsafe { &(*(::std::ptr::null::<ezpp>())).buf as *const _ as usize },
1309        308usize,
1310        concat!("Offset of field: ", stringify!(ezpp), "::", stringify!(buf))
1311    );
1312    assert_eq!(
1313        unsafe { &(*(::std::ptr::null::<ezpp>())).p_flags as *const _ as usize },
1314        65844usize,
1315        concat!(
1316            "Offset of field: ",
1317            stringify!(ezpp),
1318            "::",
1319            stringify!(p_flags)
1320        )
1321    );
1322    assert_eq!(
1323        unsafe { &(*(::std::ptr::null::<ezpp>())).objects as *const _ as usize },
1324        65848usize,
1325        concat!(
1326            "Offset of field: ",
1327            stringify!(ezpp),
1328            "::",
1329            stringify!(objects)
1330        )
1331    );
1332    assert_eq!(
1333        unsafe { &(*(::std::ptr::null::<ezpp>())).timing_points as *const _ as usize },
1334        65864usize,
1335        concat!(
1336            "Offset of field: ",
1337            stringify!(ezpp),
1338            "::",
1339            stringify!(timing_points)
1340        )
1341    );
1342    assert_eq!(
1343        unsafe { &(*(::std::ptr::null::<ezpp>())).interval_end as *const _ as usize },
1344        65880usize,
1345        concat!(
1346            "Offset of field: ",
1347            stringify!(ezpp),
1348            "::",
1349            stringify!(interval_end)
1350        )
1351    );
1352    assert_eq!(
1353        unsafe { &(*(::std::ptr::null::<ezpp>())).max_strain as *const _ as usize },
1354        65884usize,
1355        concat!(
1356            "Offset of field: ",
1357            stringify!(ezpp),
1358            "::",
1359            stringify!(max_strain)
1360        )
1361    );
1362    assert_eq!(
1363        unsafe { &(*(::std::ptr::null::<ezpp>())).highest_strains as *const _ as usize },
1364        65888usize,
1365        concat!(
1366            "Offset of field: ",
1367            stringify!(ezpp),
1368            "::",
1369            stringify!(highest_strains)
1370        )
1371    );
1372    assert_eq!(
1373        unsafe { &(*(::std::ptr::null::<ezpp>())).block as *const _ as usize },
1374        65904usize,
1375        concat!(
1376            "Offset of field: ",
1377            stringify!(ezpp),
1378            "::",
1379            stringify!(block)
1380        )
1381    );
1382    assert_eq!(
1383        unsafe { &(*(::std::ptr::null::<ezpp>())).end_of_block as *const _ as usize },
1384        65912usize,
1385        concat!(
1386            "Offset of field: ",
1387            stringify!(ezpp),
1388            "::",
1389            stringify!(end_of_block)
1390        )
1391    );
1392    assert_eq!(
1393        unsafe { &(*(::std::ptr::null::<ezpp>())).blocks as *const _ as usize },
1394        65920usize,
1395        concat!(
1396            "Offset of field: ",
1397            stringify!(ezpp),
1398            "::",
1399            stringify!(blocks)
1400        )
1401    );
1402}
1403extern "C" {
1404    pub fn m_reserve(ez: ezpp_t, min_size: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
1405    pub fn m_alloc(ez: ezpp_t, size: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void;
1406    pub fn m_strndup(
1407        ez: ezpp_t,
1408        s: *mut ::std::os::raw::c_char,
1409        n: ::std::os::raw::c_int,
1410    ) -> *mut ::std::os::raw::c_char;
1411    pub fn m_free(ez: ezpp_t);
1412    pub static mut od10_ms: [f32; 2usize];
1413    pub static mut od0_ms: [f32; 2usize];
1414    pub static mut od_ms_step: [f32; 2usize];
1415    pub fn mods_apply(ez: ezpp_t) -> ::std::os::raw::c_int;
1416    pub static mut playfield_center: [f32; 2usize];
1417    pub fn print_line(line: *mut slice_t);
1418    pub fn p_warn(e: *mut ::std::os::raw::c_char, line: *mut slice_t) -> ::std::os::raw::c_int;
1419    pub fn p_consume_til(
1420        s: *mut slice_t,
1421        separators: *mut ::std::os::raw::c_char,
1422        dst: *mut slice_t,
1423    ) -> ::std::os::raw::c_int;
1424    pub fn p_float(value: *mut slice_t) -> f32;
1425    pub fn p_section_name(s: *mut slice_t, name: *mut slice_t) -> ::std::os::raw::c_int;
1426    pub fn p_property(
1427        s: *mut slice_t,
1428        name: *mut slice_t,
1429        value: *mut slice_t,
1430    ) -> ::std::os::raw::c_int;
1431    pub fn p_slicedup(ez: ezpp_t, s: *mut slice_t) -> *mut ::std::os::raw::c_char;
1432    pub fn p_metadata(ez: ezpp_t, line: *mut slice_t) -> ::std::os::raw::c_int;
1433    pub fn p_general(ez: ezpp_t, line: *mut slice_t) -> ::std::os::raw::c_int;
1434    pub fn p_difficulty(ez: ezpp_t, line: *mut slice_t) -> ::std::os::raw::c_int;
1435    pub fn p_timing(ez: ezpp_t, line: *mut slice_t) -> ::std::os::raw::c_int;
1436    pub fn p_objects(ez: ezpp_t, line: *mut slice_t) -> ::std::os::raw::c_int;
1437    pub fn p_line(ez: ezpp_t, line: *mut slice_t) -> ::std::os::raw::c_int;
1438    pub fn p_end(ez: ezpp_t);
1439    pub fn p_reset(ez: ezpp_t);
1440    pub fn p_map(ez: ezpp_t, f: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int;
1441    pub fn p_map_mem(
1442        ez: ezpp_t,
1443        data: *mut ::std::os::raw::c_char,
1444        data_size: ::std::os::raw::c_int,
1445    ) -> ::std::os::raw::c_int;
1446    pub static mut decay_base: [f32; 2usize];
1447    pub static mut weight_scaling: [f32; 2usize];
1448    pub fn d_spacing_weight(
1449        distance: f32,
1450        delta_time: f32,
1451        prev_distance: f32,
1452        prev_delta_time: f32,
1453        angle: f32,
1454        type_: ::std::os::raw::c_int,
1455        is_single: *mut ::std::os::raw::c_int,
1456    ) -> f32;
1457    pub fn d_calc_strain(
1458        type_: ::std::os::raw::c_int,
1459        o: *mut object_t,
1460        prev: *mut object_t,
1461        speedmul: f32,
1462    );
1463    pub fn dbl_desc(
1464        a: *const ::std::os::raw::c_void,
1465        b: *const ::std::os::raw::c_void,
1466    ) -> ::std::os::raw::c_int;
1467    pub fn d_update_max_strains(
1468        ez: ezpp_t,
1469        decay_factor: f32,
1470        cur_time: f32,
1471        prev_time: f32,
1472        cur_strain: f32,
1473        prev_strain: f32,
1474        first_obj: ::std::os::raw::c_int,
1475    ) -> ::std::os::raw::c_int;
1476    pub fn d_weigh_strains(ez: ezpp_t, pdiff: *mut f32, ptotal: *mut f32);
1477    pub fn d_calc_individual(ez: ezpp_t, type_: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
1478    pub fn d_length_bonus(stars: f32, difficulty: f32) -> f32;
1479    pub fn d_std(ez: ezpp_t) -> ::std::os::raw::c_int;
1480}
1481#[repr(C)]
1482#[derive(Debug, Copy, Clone)]
1483pub struct taiko_object {
1484    pub hit: ::std::os::raw::c_int,
1485    pub strain: f32,
1486    pub time: f32,
1487    pub time_elapsed: f32,
1488    pub rim: ::std::os::raw::c_int,
1489    pub same_since: ::std::os::raw::c_int,
1490    pub last_switch_even: ::std::os::raw::c_int,
1491}
1492#[test]
1493fn bindgen_test_layout_taiko_object() {
1494    assert_eq!(
1495        ::std::mem::size_of::<taiko_object>(),
1496        28usize,
1497        concat!("Size of: ", stringify!(taiko_object))
1498    );
1499    assert_eq!(
1500        ::std::mem::align_of::<taiko_object>(),
1501        4usize,
1502        concat!("Alignment of ", stringify!(taiko_object))
1503    );
1504    assert_eq!(
1505        unsafe { &(*(::std::ptr::null::<taiko_object>())).hit as *const _ as usize },
1506        0usize,
1507        concat!(
1508            "Offset of field: ",
1509            stringify!(taiko_object),
1510            "::",
1511            stringify!(hit)
1512        )
1513    );
1514    assert_eq!(
1515        unsafe { &(*(::std::ptr::null::<taiko_object>())).strain as *const _ as usize },
1516        4usize,
1517        concat!(
1518            "Offset of field: ",
1519            stringify!(taiko_object),
1520            "::",
1521            stringify!(strain)
1522        )
1523    );
1524    assert_eq!(
1525        unsafe { &(*(::std::ptr::null::<taiko_object>())).time as *const _ as usize },
1526        8usize,
1527        concat!(
1528            "Offset of field: ",
1529            stringify!(taiko_object),
1530            "::",
1531            stringify!(time)
1532        )
1533    );
1534    assert_eq!(
1535        unsafe { &(*(::std::ptr::null::<taiko_object>())).time_elapsed as *const _ as usize },
1536        12usize,
1537        concat!(
1538            "Offset of field: ",
1539            stringify!(taiko_object),
1540            "::",
1541            stringify!(time_elapsed)
1542        )
1543    );
1544    assert_eq!(
1545        unsafe { &(*(::std::ptr::null::<taiko_object>())).rim as *const _ as usize },
1546        16usize,
1547        concat!(
1548            "Offset of field: ",
1549            stringify!(taiko_object),
1550            "::",
1551            stringify!(rim)
1552        )
1553    );
1554    assert_eq!(
1555        unsafe { &(*(::std::ptr::null::<taiko_object>())).same_since as *const _ as usize },
1556        20usize,
1557        concat!(
1558            "Offset of field: ",
1559            stringify!(taiko_object),
1560            "::",
1561            stringify!(same_since)
1562        )
1563    );
1564    assert_eq!(
1565        unsafe { &(*(::std::ptr::null::<taiko_object>())).last_switch_even as *const _ as usize },
1566        24usize,
1567        concat!(
1568            "Offset of field: ",
1569            stringify!(taiko_object),
1570            "::",
1571            stringify!(last_switch_even)
1572        )
1573    );
1574}
1575pub type taiko_object_t = taiko_object;
1576extern "C" {
1577    pub fn taiko_change_bonus(cur: *mut taiko_object_t, prev: *mut taiko_object_t) -> f32;
1578    pub fn taiko_rhythm_bonus(cur: *mut taiko_object_t, prev: *mut taiko_object_t) -> f32;
1579    pub fn taiko_strain(cur: *mut taiko_object_t, prev: *mut taiko_object_t);
1580    pub fn swap_ptrs(a: *mut *mut ::std::os::raw::c_void, b: *mut *mut ::std::os::raw::c_void);
1581    pub fn d_taiko(ez: ezpp_t) -> ::std::os::raw::c_int;
1582    pub fn d_calc(ez: ezpp_t) -> ::std::os::raw::c_int;
1583    pub fn acc_calc(
1584        n300: ::std::os::raw::c_int,
1585        n100: ::std::os::raw::c_int,
1586        n50: ::std::os::raw::c_int,
1587        misses: ::std::os::raw::c_int,
1588    ) -> f32;
1589    pub fn acc_round(
1590        acc_percent: f32,
1591        nobjects: ::std::os::raw::c_int,
1592        misses: ::std::os::raw::c_int,
1593        n300: *mut ::std::os::raw::c_int,
1594        n100: *mut ::std::os::raw::c_int,
1595        n50: *mut ::std::os::raw::c_int,
1596    );
1597    pub fn taiko_acc_calc(
1598        n300: ::std::os::raw::c_int,
1599        n150: ::std::os::raw::c_int,
1600        nmiss: ::std::os::raw::c_int,
1601    ) -> f32;
1602    pub fn taiko_acc_round(
1603        acc_percent: f32,
1604        nobjects: ::std::os::raw::c_int,
1605        nmisses: ::std::os::raw::c_int,
1606        n300: *mut ::std::os::raw::c_int,
1607        n150: *mut ::std::os::raw::c_int,
1608    );
1609    pub fn base_pp(stars: f32) -> f32;
1610    pub fn pp_std(ez: ezpp_t) -> ::std::os::raw::c_int;
1611    pub fn pp_taiko(ez: ezpp_t) -> ::std::os::raw::c_int;
1612    pub fn params_from_map(ez: ezpp_t) -> ::std::os::raw::c_int;
1613    pub fn calc(ez: ezpp_t) -> ::std::os::raw::c_int;
1614    pub fn free_owned_map(ez: ezpp_t);
1615    pub fn memclone(
1616        p: *mut ::std::os::raw::c_void,
1617        size: ::std::os::raw::c_int,
1618    ) -> *mut ::std::os::raw::c_void;
1619    pub fn strclone(s: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
1620}
1621pub type __builtin_va_list = [__va_list_tag; 1usize];
1622#[repr(C)]
1623#[derive(Debug, Copy, Clone)]
1624pub struct __va_list_tag {
1625    pub gp_offset: ::std::os::raw::c_uint,
1626    pub fp_offset: ::std::os::raw::c_uint,
1627    pub overflow_arg_area: *mut ::std::os::raw::c_void,
1628    pub reg_save_area: *mut ::std::os::raw::c_void,
1629}
1630#[test]
1631fn bindgen_test_layout___va_list_tag() {
1632    assert_eq!(
1633        ::std::mem::size_of::<__va_list_tag>(),
1634        24usize,
1635        concat!("Size of: ", stringify!(__va_list_tag))
1636    );
1637    assert_eq!(
1638        ::std::mem::align_of::<__va_list_tag>(),
1639        8usize,
1640        concat!("Alignment of ", stringify!(__va_list_tag))
1641    );
1642    assert_eq!(
1643        unsafe { &(*(::std::ptr::null::<__va_list_tag>())).gp_offset as *const _ as usize },
1644        0usize,
1645        concat!(
1646            "Offset of field: ",
1647            stringify!(__va_list_tag),
1648            "::",
1649            stringify!(gp_offset)
1650        )
1651    );
1652    assert_eq!(
1653        unsafe { &(*(::std::ptr::null::<__va_list_tag>())).fp_offset as *const _ as usize },
1654        4usize,
1655        concat!(
1656            "Offset of field: ",
1657            stringify!(__va_list_tag),
1658            "::",
1659            stringify!(fp_offset)
1660        )
1661    );
1662    assert_eq!(
1663        unsafe { &(*(::std::ptr::null::<__va_list_tag>())).overflow_arg_area as *const _ as usize },
1664        8usize,
1665        concat!(
1666            "Offset of field: ",
1667            stringify!(__va_list_tag),
1668            "::",
1669            stringify!(overflow_arg_area)
1670        )
1671    );
1672    assert_eq!(
1673        unsafe { &(*(::std::ptr::null::<__va_list_tag>())).reg_save_area as *const _ as usize },
1674        16usize,
1675        concat!(
1676            "Offset of field: ",
1677            stringify!(__va_list_tag),
1678            "::",
1679            stringify!(reg_save_area)
1680        )
1681    );
1682}
1683#[repr(C)]
1684#[derive(Debug, Copy, Clone)]
1685pub struct __locale_data {
1686    pub _address: u8,
1687}