kdb/
kapi.rs

1//! Provides ffi definitions for the KDB C API.
2#![allow(missing_docs)]
3
4use crate::date_time_types::{Minute, Month, Second};
5use crate::k::{F, I, J, K, S, V};
6use crate::k_type::{MINUTE_ATOM, MONTH_ATOM, SECOND_ATOM, TIMESPAN_ATOM, TIMESTAMP_ATOM};
7
8pub type KCallback = extern "C" fn(arg1: I) -> *const K;
9
10pub(crate) unsafe fn tst(nanos: i64) -> *const K {
11    ktj(TIMESTAMP_ATOM.into(), nanos)
12}
13
14pub(crate) unsafe fn tsp(nanos: i64) -> *const K {
15    ktj(TIMESPAN_ATOM.into(), nanos)
16}
17
18pub(crate) unsafe fn ksec(sec: Second) -> *mut K {
19    let atom = ka(SECOND_ATOM.into());
20    (*atom).union.sec = sec;
21    atom
22}
23
24pub(crate) unsafe fn kmin(min: Minute) -> *mut K {
25    let atom = ka(MINUTE_ATOM.into());
26    (*atom).union.min = min;
27    atom
28}
29
30pub(crate) unsafe fn kmonth(m: Month) -> *mut K {
31    let atom = ka(MONTH_ATOM.into());
32    (*atom).union.m = m;
33    atom
34}
35
36#[cfg_attr(not(feature = "embedded"), link(name = "kdb"))]
37extern "C" {
38    pub fn b9(mode: I, x: *const K) -> *mut K;
39
40    pub fn d9(x: *const K) -> *const K;
41    pub fn dj(date: I) -> I;
42    pub fn dl(f: *mut V, n: I) -> *const K;
43    pub fn dot(x: *const K, y: *const K) -> *mut K;
44
45    pub fn ee(x: *mut K) -> *mut K;
46
47    pub fn ja(list: *mut *mut K, atom: *const V) -> *mut K;
48    pub fn js(list: *mut *mut K, symbol: S) -> *mut K;
49    pub fn jk(list: *mut *mut K, k: *const K) -> *mut K;
50    pub fn jv(list1: *mut *mut K, list2: *const K) -> *mut K;
51
52    pub fn k(handle: I, query: S, ...) -> *mut K;
53    pub fn ka(k_type: I) -> *mut K;
54    pub fn kb(boolean: I) -> *mut K;
55    pub fn kc(c_char: I) -> *mut K;
56    pub fn kd(date: I) -> *mut K;
57    pub fn ke(real: F) -> *mut K;
58    pub fn kf(float: F) -> *mut K;
59    pub fn kg(byte: I) -> *mut K;
60    pub fn kh(short: I) -> *mut K;
61    pub fn ki(int: I) -> *mut K;
62    pub fn kj(long: J) -> *mut K;
63    pub fn kp(c_str: S) -> *mut K;
64    pub fn kpn(c_str: S, len: J) -> *mut K;
65    pub fn krr(c_str: S) -> *mut K;
66    pub fn ks(c_str: S) -> *mut K;
67    pub fn kt(time: I) -> *mut K;
68    pub fn ktd(keyed_table: *const K) -> *const K;
69    pub fn ktj(begin: I, end: J) -> *const K;
70    pub fn ktn(k_type: I, len: J) -> *mut K;
71
72    #[cfg(feature = "uuid")]
73    pub fn ku(guid: uuid::Uuid) -> *mut K;
74    pub fn kz(date_time: F) -> *const K;
75
76    pub fn m9() -> V;
77
78    pub fn orr(c_str: S) -> *const K;
79    pub fn okx(x: *const K) -> I;
80
81    pub fn r0(k: *mut K) -> V;
82    pub fn r1(k: *mut K) -> *mut K;
83
84    pub fn sd1(d: I, cb: Option<KCallback>) -> *mut K;
85    pub fn sd0(d: I) -> V;
86    pub fn sd0x(d: I, f: I) -> V;
87    pub fn setm(m: I) -> I;
88    pub fn ss(c_str: S) -> S;
89    pub fn sn(c_str: S, len: I) -> S;
90
91    pub fn xT(dict: *const K) -> *const K;
92    pub fn xD(keys: *const K, values: *const K) -> *const K;
93
94    pub fn ymd(y: I, m: I, d: I) -> I;
95}
96
97#[cfg(not(feature = "embedded"))]
98#[link(name = "kdb")]
99extern "C" {
100    pub fn kclose(handle: I) -> V;
101    pub fn khp(hostname: S, port: I) -> I;
102    pub fn khpu(hostname: S, port: I, credentials: S) -> I;
103    pub fn khpun(hostname: S, port: I, credentials: S, timeout: I) -> I;
104}