1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use crate::imp::structs::qv::Qv;
#[repr(C)] #[derive(Debug, Clone, Copy)]
pub struct QvInt{
val : i64,
is_null : u32,
is_undefined : u32,
}
impl QvInt{
pub fn new(s : Qv<i64>)-> QvInt{
match s{
Qv::Val(i) => QvInt{ val : i, is_null : 0, is_undefined : 0 },
Qv::Null => QvInt{ val : 0, is_null : 1, is_undefined : 0 },
Qv::Undefined => QvInt{ val : 0, is_null : 0, is_undefined : 1 },
}
}
}
#[repr(C)] #[derive(Debug, Clone, Copy)]
pub struct OptInt{
val : i64,
is_valid : u32,
}
impl OptInt{
pub fn new(val : i64, is_valid : u32) -> OptInt{ OptInt{ val, is_valid } }
pub fn null_or(qv : Qv<i64>) -> OptInt{
match qv{
Qv::Val(i) => OptInt::new(i, 1),
Qv::Null => OptInt::new(0, 0),
_ => OptInt::new(1, 0),
}
}
pub fn undef_or(qv : Qv<i64>) -> OptInt{
match qv{
Qv::Val(i) => OptInt::new(i, 1),
Qv::Undefined => OptInt::new(0,0),
_ => OptInt::new(1, 0),
}
}
}
#[no_mangle] #[allow(non_snake_case)]
pub extern "C" fn QvInt_Value(p : QvInt) -> i64{
p.val
}
#[no_mangle] #[allow(non_snake_case)]
pub extern "C" fn QvInt_IsNull(p : QvInt) -> i8{
p.is_null as i8
}
#[no_mangle] #[allow(non_snake_case)]
pub extern "C" fn QvInt_IsUndefined(p : QvInt) -> i8{
p.is_undefined as i8
}
#[no_mangle] #[allow(non_snake_case)]
pub extern "C" fn OptInt_Value(p : OptInt) -> i64{
p.val
}
#[no_mangle] #[allow(non_snake_case)]
pub extern "C" fn OptInt_IsValid(p : OptInt) -> i8{
p.is_valid as i8
}