python27_sys/
complexobject.rs1use libc::{c_double, c_int};
2
3use crate::object::*;
4use crate::pyport::Py_ssize_t;
5
6#[repr(C)]
7#[derive(Copy, Clone)]
8pub struct Py_complex {
9 pub real: c_double,
10 pub imag: c_double,
11}
12
13#[cfg_attr(windows, link(name = "pythonXY"))]
14extern "C" {
15 pub fn _Py_c_sum(left: Py_complex, right: Py_complex) -> Py_complex;
16 pub fn _Py_c_diff(left: Py_complex, right: Py_complex) -> Py_complex;
17 pub fn _Py_c_neg(complex: Py_complex) -> Py_complex;
18 pub fn _Py_c_prod(left: Py_complex, right: Py_complex) -> Py_complex;
19 pub fn _Py_c_quot(dividend: Py_complex, divisor: Py_complex) -> Py_complex;
20 pub fn _Py_c_pow(num: Py_complex, exp: Py_complex) -> Py_complex;
21 pub fn _Py_c_abs(arg: Py_complex) -> c_double;
22}
23
24#[repr(C)]
25#[derive(Copy, Clone)]
26pub struct PyComplexObject {
27 #[cfg(py_sys_config = "Py_TRACE_REFS")]
28 pub _ob_next: *mut PyObject,
29 #[cfg(py_sys_config = "Py_TRACE_REFS")]
30 pub _ob_prev: *mut PyObject,
31 pub ob_refcnt: Py_ssize_t,
32 pub ob_type: *mut PyTypeObject,
33 pub cval: Py_complex,
34}
35
36#[cfg_attr(windows, link(name = "pythonXY"))]
37extern "C" {
38 pub static mut PyComplex_Type: PyTypeObject;
39}
40
41#[inline(always)]
42pub unsafe fn PyComplex_Check(op: *mut PyObject) -> c_int {
43 PyObject_TypeCheck(op, &mut PyComplex_Type)
44}
45
46#[inline(always)]
47pub unsafe fn PyComplex_CheckExact(op: *mut PyObject) -> c_int {
48 let u: *mut PyTypeObject = &mut PyComplex_Type;
49 (Py_TYPE(op) == u) as c_int
50}
51
52#[cfg_attr(windows, link(name = "pythonXY"))]
53extern "C" {
54 pub fn PyComplex_FromCComplex(v: Py_complex) -> *mut PyObject;
55 pub fn PyComplex_FromDoubles(real: c_double, imag: c_double) -> *mut PyObject;
56 pub fn PyComplex_RealAsDouble(op: *mut PyObject) -> c_double;
57 pub fn PyComplex_ImagAsDouble(op: *mut PyObject) -> c_double;
58 pub fn PyComplex_AsCComplex(op: *mut PyObject) -> Py_complex;
59
60 ignore! {
61 fn _PyComplex_FormatAdvanced(
62 obj: *mut PyObject,
63 format_spec: *mut c_char,
64 format_spec_len: Py_ssize_t,
65 ) -> *mut PyObject;
66 }
67}