unsafe extern "C" {
fn printf(_: *const ::core::ffi::c_char, ...) -> ::core::ffi::c_int;
static mut __stdinp: *mut FILE;
static mut __stdoutp: *mut FILE;
static mut __stderrp: *mut FILE;
fn fclose(_: *mut FILE) -> ::core::ffi::c_int;
fn fflush(_: *mut FILE) -> ::core::ffi::c_int;
fn fgets(
_: *mut ::core::ffi::c_char,
__size: ::core::ffi::c_int,
_: *mut FILE,
) -> *mut ::core::ffi::c_char;
fn fopen(
__filename: *const ::core::ffi::c_char,
__mode: *const ::core::ffi::c_char,
) -> *mut FILE;
fn fprintf(_: *mut FILE, _: *const ::core::ffi::c_char, ...) -> ::core::ffi::c_int;
fn fread(
__ptr: *mut ::core::ffi::c_void,
__size: size_t,
__nitems: size_t,
__stream: *mut FILE,
) -> ::core::ffi::c_ulong;
fn fseek(_: *mut FILE, _: ::core::ffi::c_long, _: ::core::ffi::c_int) -> ::core::ffi::c_int;
fn ftell(_: *mut FILE) -> ::core::ffi::c_long;
fn fwrite(
__ptr: *const ::core::ffi::c_void,
__size: size_t,
__nitems: size_t,
__stream: *mut FILE,
) -> ::core::ffi::c_ulong;
fn remove(_: *const ::core::ffi::c_char) -> ::core::ffi::c_int;
fn sprintf(
_: *mut ::core::ffi::c_char,
_: *const ::core::ffi::c_char,
...
) -> ::core::ffi::c_int;
fn sscanf(
_: *const ::core::ffi::c_char,
_: *const ::core::ffi::c_char,
...
) -> ::core::ffi::c_int;
fn signal(
_: ::core::ffi::c_int,
_: Option<unsafe extern "C" fn(::core::ffi::c_int) -> ()>,
) -> Option<unsafe extern "C" fn(::core::ffi::c_int) -> ()>;
fn getrusage(_: ::core::ffi::c_int, _: *mut rusage) -> ::core::ffi::c_int;
fn wait(_: *mut ::core::ffi::c_int) -> pid_t;
fn malloc(__size: size_t) -> *mut ::core::ffi::c_void;
fn calloc(__count: size_t, __size: size_t) -> *mut ::core::ffi::c_void;
fn free(_: *mut ::core::ffi::c_void);
fn realloc(__ptr: *mut ::core::ffi::c_void, __size: size_t) -> *mut ::core::ffi::c_void;
fn exit(_: ::core::ffi::c_int) -> !;
fn labs(_: ::core::ffi::c_long) -> ::core::ffi::c_long;
fn qsort(
__base: *mut ::core::ffi::c_void,
__nel: size_t,
__width: size_t,
__compar: Option<
unsafe extern "C" fn(
*const ::core::ffi::c_void,
*const ::core::ffi::c_void,
) -> ::core::ffi::c_int,
>,
);
fn strtod(
_: *const ::core::ffi::c_char,
_: *mut *mut ::core::ffi::c_char,
) -> ::core::ffi::c_double;
fn strtol(
__str: *const ::core::ffi::c_char,
__endptr: *mut *mut ::core::ffi::c_char,
__base: ::core::ffi::c_int,
) -> ::core::ffi::c_long;
fn acos(_: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn asin(_: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn atan2(_: ::core::ffi::c_double, _: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn cos(_: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn sin(_: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn log(_: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn fabs(_: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn pow(_: ::core::ffi::c_double, _: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn sqrt(_: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn ceil(_: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn floor(_: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn rint(_: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn fmod(_: ::core::ffi::c_double, _: ::core::ffi::c_double) -> ::core::ffi::c_double;
fn kill(_: pid_t, _: ::core::ffi::c_int) -> ::core::ffi::c_int;
fn memcpy(
__dst: *mut ::core::ffi::c_void,
__src: *const ::core::ffi::c_void,
__n: size_t,
) -> *mut ::core::ffi::c_void;
fn memset(
__b: *mut ::core::ffi::c_void,
__c: ::core::ffi::c_int,
__len: size_t,
) -> *mut ::core::ffi::c_void;
fn strcat(
__s1: *mut ::core::ffi::c_char,
__s2: *const ::core::ffi::c_char,
) -> *mut ::core::ffi::c_char;
fn strcmp(
__s1: *const ::core::ffi::c_char,
__s2: *const ::core::ffi::c_char,
) -> ::core::ffi::c_int;
fn strcpy(
__dst: *mut ::core::ffi::c_char,
__src: *const ::core::ffi::c_char,
) -> *mut ::core::ffi::c_char;
fn strlen(__s: *const ::core::ffi::c_char) -> size_t;
fn strncat(
__s1: *mut ::core::ffi::c_char,
__s2: *const ::core::ffi::c_char,
__n: size_t,
) -> *mut ::core::ffi::c_char;
fn strncpy(
__dst: *mut ::core::ffi::c_char,
__src: *const ::core::ffi::c_char,
__n: size_t,
) -> *mut ::core::ffi::c_char;
fn strtok(
__str: *mut ::core::ffi::c_char,
__sep: *const ::core::ffi::c_char,
) -> *mut ::core::ffi::c_char;
static mut _DefaultRuneLocale: _RuneLocale;
fn __maskrune(_: __darwin_ct_rune_t, _: ::core::ffi::c_ulong) -> ::core::ffi::c_int;
fn fork() -> pid_t;
fn getcwd(_: *mut ::core::ffi::c_char, __size: size_t) -> *mut ::core::ffi::c_char;
fn getpid() -> pid_t;
fn rmdir(_: *const ::core::ffi::c_char) -> ::core::ffi::c_int;
fn sleep(_: ::core::ffi::c_uint) -> ::core::ffi::c_uint;
fn unlink(_: *const ::core::ffi::c_char) -> ::core::ffi::c_int;
fn gethostname(_: *mut ::core::ffi::c_char, __namelen: size_t) -> ::core::ffi::c_int;
fn mkdir(_: *const ::core::ffi::c_char, _: mode_t) -> ::core::ffi::c_int;
fn stat(_: *const ::core::ffi::c_char, _: *mut stat) -> ::core::ffi::c_int;
fn ctime(_: *const time_t) -> *mut ::core::ffi::c_char;
fn time(_: *mut time_t) -> time_t;
}
pub type __uint16_t = u16;
pub type __int32_t = i32;
pub type __uint32_t = u32;
pub type __int64_t = i64;
pub type __uint64_t = u64;
pub type __darwin_ct_rune_t = ::core::ffi::c_int;
pub type __darwin_size_t = usize;
pub type __darwin_wchar_t = ::libc::wchar_t;
pub type __darwin_rune_t = __darwin_wchar_t;
pub type __darwin_time_t = ::core::ffi::c_long;
pub type __darwin_blkcnt_t = __int64_t;
pub type __darwin_blksize_t = __int32_t;
pub type __darwin_dev_t = __int32_t;
pub type __darwin_gid_t = __uint32_t;
pub type __darwin_ino64_t = __uint64_t;
pub type __darwin_mode_t = __uint16_t;
pub type __darwin_off_t = __int64_t;
pub type __darwin_pid_t = __int32_t;
pub type __darwin_suseconds_t = __int32_t;
pub type __darwin_uid_t = __uint32_t;
pub type size_t = __darwin_size_t;
pub type fpos_t = __darwin_off_t;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct __sbuf {
pub _base: *mut ::core::ffi::c_uchar,
pub _size: ::core::ffi::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct __sFILE {
pub _p: *mut ::core::ffi::c_uchar,
pub _r: ::core::ffi::c_int,
pub _w: ::core::ffi::c_int,
pub _flags: ::core::ffi::c_short,
pub _file: ::core::ffi::c_short,
pub _bf: __sbuf,
pub _lbfsize: ::core::ffi::c_int,
pub _cookie: *mut ::core::ffi::c_void,
pub _close: Option<unsafe extern "C" fn(*mut ::core::ffi::c_void) -> ::core::ffi::c_int>,
pub _read: Option<
unsafe extern "C" fn(
*mut ::core::ffi::c_void,
*mut ::core::ffi::c_char,
::core::ffi::c_int,
) -> ::core::ffi::c_int,
>,
pub _seek: Option<
unsafe extern "C" fn(*mut ::core::ffi::c_void, fpos_t, ::core::ffi::c_int) -> fpos_t,
>,
pub _write: Option<
unsafe extern "C" fn(
*mut ::core::ffi::c_void,
*const ::core::ffi::c_char,
::core::ffi::c_int,
) -> ::core::ffi::c_int,
>,
pub _ub: __sbuf,
pub _ur: ::core::ffi::c_int,
pub _ubuf: [::core::ffi::c_uchar; 3],
pub _nbuf: [::core::ffi::c_uchar; 1],
pub _lb: __sbuf,
pub _blksize: ::core::ffi::c_int,
pub _offset: fpos_t,
}
pub type FILE = __sFILE;
pub type off_t = __darwin_off_t;
pub type pid_t = __darwin_pid_t;
pub type uid_t = __darwin_uid_t;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct timeval {
pub tv_sec: __darwin_time_t,
pub tv_usec: __darwin_suseconds_t,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct rusage {
pub ru_utime: timeval,
pub ru_stime: timeval,
pub ru_maxrss: ::core::ffi::c_long,
pub ru_ixrss: ::core::ffi::c_long,
pub ru_idrss: ::core::ffi::c_long,
pub ru_isrss: ::core::ffi::c_long,
pub ru_minflt: ::core::ffi::c_long,
pub ru_majflt: ::core::ffi::c_long,
pub ru_nswap: ::core::ffi::c_long,
pub ru_inblock: ::core::ffi::c_long,
pub ru_oublock: ::core::ffi::c_long,
pub ru_msgsnd: ::core::ffi::c_long,
pub ru_msgrcv: ::core::ffi::c_long,
pub ru_nsignals: ::core::ffi::c_long,
pub ru_nvcsw: ::core::ffi::c_long,
pub ru_nivcsw: ::core::ffi::c_long,
}
pub type dev_t = __darwin_dev_t;
pub type mode_t = __darwin_mode_t;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct _RuneEntry {
pub __min: __darwin_rune_t,
pub __max: __darwin_rune_t,
pub __map: __darwin_rune_t,
pub __types: *mut __uint32_t,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct _RuneRange {
pub __nranges: ::core::ffi::c_int,
pub __ranges: *mut _RuneEntry,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct _RuneCharClass {
pub __name: [::core::ffi::c_char; 14],
pub __mask: __uint32_t,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct _RuneLocale {
pub __magic: [::core::ffi::c_char; 8],
pub __encoding: [::core::ffi::c_char; 32],
pub __sgetrune: Option<
unsafe extern "C" fn(
*const ::core::ffi::c_char,
__darwin_size_t,
*mut *const ::core::ffi::c_char,
) -> __darwin_rune_t,
>,
pub __sputrune: Option<
unsafe extern "C" fn(
__darwin_rune_t,
*mut ::core::ffi::c_char,
__darwin_size_t,
*mut *mut ::core::ffi::c_char,
) -> ::core::ffi::c_int,
>,
pub __invalid_rune: __darwin_rune_t,
pub __runetype: [__uint32_t; 256],
pub __maplower: [__darwin_rune_t; 256],
pub __mapupper: [__darwin_rune_t; 256],
pub __runetype_ext: _RuneRange,
pub __maplower_ext: _RuneRange,
pub __mapupper_ext: _RuneRange,
pub __variable: *mut ::core::ffi::c_void,
pub __variable_len: ::core::ffi::c_int,
pub __ncharclasses: ::core::ffi::c_int,
pub __charclasses: *mut _RuneCharClass,
}
pub type gid_t = __darwin_gid_t;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct timespec {
pub tv_sec: __darwin_time_t,
pub tv_nsec: ::core::ffi::c_long,
}
pub type time_t = __darwin_time_t;
pub type blkcnt_t = __darwin_blkcnt_t;
pub type blksize_t = __darwin_blksize_t;
pub type nlink_t = __uint16_t;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct stat {
pub st_dev: dev_t,
pub st_mode: mode_t,
pub st_nlink: nlink_t,
pub st_ino: __darwin_ino64_t,
pub st_uid: uid_t,
pub st_gid: gid_t,
pub st_rdev: dev_t,
pub st_atimespec: timespec,
pub st_mtimespec: timespec,
pub st_ctimespec: timespec,
pub st_birthtimespec: timespec,
pub st_size: off_t,
pub st_blocks: blkcnt_t,
pub st_blksize: blksize_t,
pub st_flags: __uint32_t,
pub st_gen: __uint32_t,
pub st_lspare: __int32_t,
pub st_qspare: [__int64_t; 2],
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct nodeST {
pub row: ::core::ffi::c_int,
pub col: ::core::ffi::c_int,
pub next: *mut nodeST,
pub prev: *mut nodeST,
pub pred: *mut nodeST,
pub level: ::core::ffi::c_uint,
pub group: ::core::ffi::c_int,
pub incost: ::core::ffi::c_int,
pub outcost: ::core::ffi::c_int,
}
pub type nodeT = nodeST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct neighborST {
pub neighbor: *mut nodeT,
pub arcrow: ::core::ffi::c_int,
pub arccol: ::core::ffi::c_int,
pub arcdir: ::core::ffi::c_int,
}
pub type neighborT = neighborST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct boundaryST {
pub node: [nodeT; 1],
pub neighborlist: *mut neighborT,
pub boundarylist: *mut *mut nodeT,
pub nneighbor: ::core::ffi::c_long,
pub nboundary: ::core::ffi::c_long,
}
pub type boundaryT = boundaryST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct costST {
pub offset: ::core::ffi::c_short,
pub sigsq: ::core::ffi::c_short,
pub dzmax: ::core::ffi::c_short,
pub laycost: ::core::ffi::c_short,
}
pub type costT = costST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct smoothcostST {
pub offset: ::core::ffi::c_short,
pub sigsq: ::core::ffi::c_short,
}
pub type smoothcostT = smoothcostST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct bidircostST {
pub posweight: ::core::ffi::c_short,
pub negweight: ::core::ffi::c_short,
}
pub type bidircostT = bidircostST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct incrcostST {
pub poscost: ::core::ffi::c_short,
pub negcost: ::core::ffi::c_short,
}
pub type incrcostT = incrcostST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct candidateST {
pub from: *mut nodeT,
pub to: *mut nodeT,
pub violation: ::core::ffi::c_long,
pub arcrow: ::core::ffi::c_int,
pub arccol: ::core::ffi::c_int,
pub arcdir: ::core::ffi::c_schar,
}
pub type candidateT = candidateST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct bucketST {
pub size: ::core::ffi::c_long,
pub curr: ::core::ffi::c_long,
pub maxind: ::core::ffi::c_long,
pub minind: ::core::ffi::c_long,
pub bucket: *mut *mut nodeT,
pub bucketbase: *mut *mut nodeT,
pub wrapped: ::core::ffi::c_schar,
}
pub type bucketT = bucketST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct scndryarcST {
pub arcrow: ::core::ffi::c_int,
pub arccol: ::core::ffi::c_int,
pub from: *mut nodeT,
pub to: *mut nodeT,
pub fromdir: ::core::ffi::c_schar,
}
pub type scndryarcT = scndryarcST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct nodesuppST {
pub row: ::core::ffi::c_int,
pub col: ::core::ffi::c_int,
pub neighbornodes: *mut *mut nodeT,
pub outarcs: *mut *mut scndryarcT,
pub noutarcs: ::core::ffi::c_int,
}
pub type nodesuppT = nodesuppST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct paramST {
pub orbitradius: ::core::ffi::c_double,
pub altitude: ::core::ffi::c_double,
pub earthradius: ::core::ffi::c_double,
pub bperp: ::core::ffi::c_double,
pub transmitmode: ::core::ffi::c_schar,
pub baseline: ::core::ffi::c_double,
pub baselineangle: ::core::ffi::c_double,
pub nlooksrange: ::core::ffi::c_long,
pub nlooksaz: ::core::ffi::c_long,
pub nlooksother: ::core::ffi::c_long,
pub ncorrlooks: ::core::ffi::c_double,
pub ncorrlooksrange: ::core::ffi::c_long,
pub ncorrlooksaz: ::core::ffi::c_long,
pub nearrange: ::core::ffi::c_double,
pub dr: ::core::ffi::c_double,
pub da: ::core::ffi::c_double,
pub rangeres: ::core::ffi::c_double,
pub azres: ::core::ffi::c_double,
pub lambda: ::core::ffi::c_double,
pub kds: ::core::ffi::c_double,
pub specularexp: ::core::ffi::c_double,
pub dzrcritfactor: ::core::ffi::c_double,
pub shadow: ::core::ffi::c_schar,
pub dzeimin: ::core::ffi::c_double,
pub laywidth: ::core::ffi::c_long,
pub layminei: ::core::ffi::c_double,
pub sloperatiofactor: ::core::ffi::c_double,
pub sigsqei: ::core::ffi::c_double,
pub drho: ::core::ffi::c_double,
pub rhosconst1: ::core::ffi::c_double,
pub rhosconst2: ::core::ffi::c_double,
pub cstd1: ::core::ffi::c_double,
pub cstd2: ::core::ffi::c_double,
pub cstd3: ::core::ffi::c_double,
pub defaultcorr: ::core::ffi::c_double,
pub rhominfactor: ::core::ffi::c_double,
pub dzlaypeak: ::core::ffi::c_double,
pub azdzfactor: ::core::ffi::c_double,
pub dzeifactor: ::core::ffi::c_double,
pub dzeiweight: ::core::ffi::c_double,
pub dzlayfactor: ::core::ffi::c_double,
pub layconst: ::core::ffi::c_double,
pub layfalloffconst: ::core::ffi::c_double,
pub sigsqshortmin: ::core::ffi::c_long,
pub sigsqlayfactor: ::core::ffi::c_double,
pub defoazdzfactor: ::core::ffi::c_double,
pub defothreshfactor: ::core::ffi::c_double,
pub defomax: ::core::ffi::c_double,
pub sigsqcorr: ::core::ffi::c_double,
pub defolayconst: ::core::ffi::c_double,
pub eval: ::core::ffi::c_schar,
pub unwrapped: ::core::ffi::c_schar,
pub regrowconncomps: ::core::ffi::c_schar,
pub initonly: ::core::ffi::c_schar,
pub initmethod: ::core::ffi::c_schar,
pub costmode: ::core::ffi::c_schar,
pub dumpall: ::core::ffi::c_schar,
pub verbose: ::core::ffi::c_schar,
pub amplitude: ::core::ffi::c_schar,
pub havemagnitude: ::core::ffi::c_schar,
pub flipphasesign: ::core::ffi::c_schar,
pub onetilereopt: ::core::ffi::c_schar,
pub rmtileinit: ::core::ffi::c_schar,
pub initmaxflow: ::core::ffi::c_long,
pub arcmaxflowconst: ::core::ffi::c_long,
pub maxflow: ::core::ffi::c_long,
pub krowei: ::core::ffi::c_long,
pub kcolei: ::core::ffi::c_long,
pub kpardpsi: ::core::ffi::c_long,
pub kperpdpsi: ::core::ffi::c_long,
pub threshold: ::core::ffi::c_double,
pub initdzr: ::core::ffi::c_double,
pub initdzstep: ::core::ffi::c_double,
pub maxcost: ::core::ffi::c_double,
pub costscale: ::core::ffi::c_double,
pub costscaleambight: ::core::ffi::c_double,
pub dnomincangle: ::core::ffi::c_double,
pub srcrow: ::core::ffi::c_long,
pub srccol: ::core::ffi::c_long,
pub p: ::core::ffi::c_double,
pub bidirlpn: ::core::ffi::c_schar,
pub nshortcycle: ::core::ffi::c_long,
pub maxnewnodeconst: ::core::ffi::c_double,
pub maxnflowcycles: ::core::ffi::c_long,
pub maxcyclefraction: ::core::ffi::c_double,
pub nconnnodemin: ::core::ffi::c_long,
pub cs2scalefactor: ::core::ffi::c_long,
pub nmajorprune: ::core::ffi::c_long,
pub prunecostthresh: ::core::ffi::c_long,
pub edgemasktop: ::core::ffi::c_long,
pub edgemaskbot: ::core::ffi::c_long,
pub edgemaskleft: ::core::ffi::c_long,
pub edgemaskright: ::core::ffi::c_long,
pub parentpid: ::core::ffi::c_long,
pub ntilerow: ::core::ffi::c_long,
pub ntilecol: ::core::ffi::c_long,
pub rowovrlp: ::core::ffi::c_long,
pub colovrlp: ::core::ffi::c_long,
pub piecefirstrow: ::core::ffi::c_long,
pub piecefirstcol: ::core::ffi::c_long,
pub piecenrow: ::core::ffi::c_long,
pub piecencol: ::core::ffi::c_long,
pub tilecostthresh: ::core::ffi::c_long,
pub minregionsize: ::core::ffi::c_long,
pub nthreads: ::core::ffi::c_long,
pub scndryarcflowmax: ::core::ffi::c_long,
pub tileedgeweight: ::core::ffi::c_double,
pub assembleonly: ::core::ffi::c_schar,
pub rmtmptile: ::core::ffi::c_schar,
pub tiledir: [::core::ffi::c_char; 512],
pub minconncompfrac: ::core::ffi::c_double,
pub conncompthresh: ::core::ffi::c_long,
pub maxncomps: ::core::ffi::c_long,
pub conncompouttype: ::core::ffi::c_int,
}
pub type paramT = paramST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct infileST {
pub infile: [::core::ffi::c_char; 512],
pub magfile: [::core::ffi::c_char; 512],
pub ampfile: [::core::ffi::c_char; 512],
pub ampfile2: [::core::ffi::c_char; 512],
pub weightfile: [::core::ffi::c_char; 512],
pub corrfile: [::core::ffi::c_char; 512],
pub estfile: [::core::ffi::c_char; 512],
pub costinfile: [::core::ffi::c_char; 512],
pub bytemaskfile: [::core::ffi::c_char; 512],
pub dotilemaskfile: [::core::ffi::c_char; 512],
pub infileformat: ::core::ffi::c_schar,
pub unwrappedinfileformat: ::core::ffi::c_schar,
pub magfileformat: ::core::ffi::c_schar,
pub corrfileformat: ::core::ffi::c_schar,
pub weightfileformat: ::core::ffi::c_schar,
pub ampfileformat: ::core::ffi::c_schar,
pub estfileformat: ::core::ffi::c_schar,
}
pub type infileT = infileST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct outfileST {
pub outfile: [::core::ffi::c_char; 512],
pub initfile: [::core::ffi::c_char; 512],
pub flowfile: [::core::ffi::c_char; 512],
pub eifile: [::core::ffi::c_char; 512],
pub rowcostfile: [::core::ffi::c_char; 512],
pub colcostfile: [::core::ffi::c_char; 512],
pub mstrowcostfile: [::core::ffi::c_char; 512],
pub mstcolcostfile: [::core::ffi::c_char; 512],
pub mstcostsfile: [::core::ffi::c_char; 512],
pub corrdumpfile: [::core::ffi::c_char; 512],
pub rawcorrdumpfile: [::core::ffi::c_char; 512],
pub conncompfile: [::core::ffi::c_char; 512],
pub costoutfile: [::core::ffi::c_char; 512],
pub logfile: [::core::ffi::c_char; 512],
pub outfileformat: ::core::ffi::c_schar,
}
pub type outfileT = outfileST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct tileparamST {
pub firstcol: ::core::ffi::c_long,
pub ncol: ::core::ffi::c_long,
pub firstrow: ::core::ffi::c_long,
pub nrow: ::core::ffi::c_long,
}
pub type tileparamT = tileparamST;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct conncompsizeST {
pub tilenum: ::core::ffi::c_uint,
pub icomptile: ::core::ffi::c_uint,
pub icompfull: ::core::ffi::c_uint,
pub npix: ::core::ffi::c_long,
}
pub type conncompsizeT = conncompsizeST;
pub type totalcostT = ::core::ffi::c_double;
pub type bucket = bucket_st;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct bucket_st {
pub p_first: *mut node,
}
pub type node = node_st;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct node_st {
pub first: *mut arc,
pub current: *mut arc,
pub suspended: *mut arc,
pub price: ::core::ffi::c_double,
pub q_next: *mut node_st,
pub b_next: *mut node_st,
pub b_prev: *mut node_st,
pub rank: ::core::ffi::c_long,
pub excess: excess_t,
pub inp: ::core::ffi::c_schar,
}
pub type excess_t = ::core::ffi::c_long;
pub type arc = arc_st;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct arc_st {
pub r_cap: ::core::ffi::c_short,
pub cost: ::core::ffi::c_short,
pub head: *mut node_st,
pub sister: *mut arc_st,
}
pub const L: C2RustUnnamed = 4;
pub const B: C2RustUnnamed = 2;
pub const R: C2RustUnnamed = 3;
pub const T: C2RustUnnamed = 1;
pub const C: C2RustUnnamed = 0;
pub const TL: C2RustUnnamed = 7;
pub const BL: C2RustUnnamed = 6;
pub const BR: C2RustUnnamed = 8;
pub const TR: C2RustUnnamed = 5;
pub type C2RustUnnamed = ::core::ffi::c_uint;
pub const __DARWIN_NULL: *mut ::core::ffi::c_void = ::core::ptr::null_mut::<::core::ffi::c_void>();
pub const SEEK_SET: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const SEEK_CUR: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const SEEK_END: ::core::ffi::c_int = 2 as ::core::ffi::c_int;
pub const SCHAR_MAX: ::core::ffi::c_int = 127 as ::core::ffi::c_int;
pub const SCHAR_MIN: ::core::ffi::c_int = -(128 as ::core::ffi::c_int);
pub const UCHAR_MAX: ::core::ffi::c_int = 255 as ::core::ffi::c_int;
pub const SHRT_MAX: ::core::ffi::c_int = 32767 as ::core::ffi::c_int;
pub const UINT_MAX: ::core::ffi::c_uint = 0xffffffff as ::core::ffi::c_uint;
pub const LONG_MAX: ::core::ffi::c_long = 0x7fffffffffffffff as ::core::ffi::c_long;
pub const LONG_MIN: ::core::ffi::c_long =
-(0x7fffffffffffffff as ::core::ffi::c_long) - 1 as ::core::ffi::c_long;
pub const SIGHUP: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const SIGINT: ::core::ffi::c_int = 2 as ::core::ffi::c_int;
pub const SIGQUIT: ::core::ffi::c_int = 3 as ::core::ffi::c_int;
pub const SIGILL: ::core::ffi::c_int = 4 as ::core::ffi::c_int;
pub const SIGABRT: ::core::ffi::c_int = 6 as ::core::ffi::c_int;
pub const SIGFPE: ::core::ffi::c_int = 8 as ::core::ffi::c_int;
pub const SIGKILL: ::core::ffi::c_int = 9 as ::core::ffi::c_int;
pub const SIGBUS: ::core::ffi::c_int = 10 as ::core::ffi::c_int;
pub const SIGSEGV: ::core::ffi::c_int = 11 as ::core::ffi::c_int;
pub const SIGPIPE: ::core::ffi::c_int = 13 as ::core::ffi::c_int;
pub const SIGALRM: ::core::ffi::c_int = 14 as ::core::ffi::c_int;
pub const SIGTERM: ::core::ffi::c_int = 15 as ::core::ffi::c_int;
pub const SIG_DFL: Option<unsafe extern "C" fn(::core::ffi::c_int) -> ()> = None;
pub const RUSAGE_SELF: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const RUSAGE_CHILDREN: ::core::ffi::c_int = -(1 as ::core::ffi::c_int);
#[inline(always)]
unsafe extern "C" fn __inline_isfinitef(mut __x: ::core::ffi::c_float) -> ::core::ffi::c_int {
return (__x == __x && __x.abs() != ::core::f32::INFINITY) as ::core::ffi::c_int;
}
#[inline(always)]
unsafe extern "C" fn __inline_isfinited(mut __x: ::core::ffi::c_double) -> ::core::ffi::c_int {
return (__x == __x && __x.abs() != ::core::f64::INFINITY) as ::core::ffi::c_int;
}
pub const _CTYPE_A: ::core::ffi::c_long = 0x100 as ::core::ffi::c_long;
pub const _CTYPE_D: ::core::ffi::c_long = 0x400 as ::core::ffi::c_long;
#[inline]
unsafe extern "C" fn isascii(mut _c: ::core::ffi::c_int) -> ::core::ffi::c_int {
return (_c & !(0x7f as ::core::ffi::c_int) == 0 as ::core::ffi::c_int) as ::core::ffi::c_int;
}
#[inline]
unsafe extern "C" fn __istype(
mut _c: __darwin_ct_rune_t,
mut _f: ::core::ffi::c_ulong,
) -> ::core::ffi::c_int {
return if isascii(_c as ::core::ffi::c_int) != 0 {
(_DefaultRuneLocale.__runetype[_c as usize] as ::core::ffi::c_ulong & _f != 0)
as ::core::ffi::c_int
} else {
(__maskrune(_c, _f) != 0) as ::core::ffi::c_int
};
}
#[unsafe(no_mangle)]
#[inline]
// #[linkage = "external"]
pub unsafe extern "C" fn isalnum(mut _c: ::core::ffi::c_int) -> ::core::ffi::c_int {
return __istype(
_c as __darwin_ct_rune_t,
(_CTYPE_A | _CTYPE_D) as ::core::ffi::c_ulong,
);
}
pub const PROGRAMNAME: [::core::ffi::c_char; 7] =
unsafe { ::core::mem::transmute::<[u8; 7], [::core::ffi::c_char; 7]>(*b"snaphu\0") };
pub const VERSION: [::core::ffi::c_char; 6] =
unsafe { ::core::mem::transmute::<[u8; 6], [::core::ffi::c_char; 6]>(*b"2.0.7\0") };
pub const PI: ::core::ffi::c_double = 3.14159265358979323846f64;
pub const TWOPI: ::core::ffi::c_double = 6.28318530717958647692f64;
pub const SQRTHALF: ::core::ffi::c_double = 0.70710678118654752440f64;
pub const MAXSTRLEN: ::core::ffi::c_int = 512 as ::core::ffi::c_int;
pub const MAXLINELEN: ::core::ffi::c_int = 2048 as ::core::ffi::c_int;
pub const TRUE: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const FALSE: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const LARGESHORT: ::core::ffi::c_int = 32000 as ::core::ffi::c_int;
pub const LARGEINT: ::core::ffi::c_int = 2000000000 as ::core::ffi::c_int;
pub const LARGEFLOAT: ::core::ffi::c_double = 1.0e35f64;
pub const VERYFAR: ::core::ffi::c_int = LARGEINT;
pub const GROUNDROW: ::core::ffi::c_int = -(2 as ::core::ffi::c_int);
pub const GROUNDCOL: ::core::ffi::c_int = -(2 as ::core::ffi::c_int);
pub const BOUNDARYROW: ::core::ffi::c_int = -(4 as ::core::ffi::c_int);
pub const BOUNDARYCOL: ::core::ffi::c_int = -(4 as ::core::ffi::c_int);
pub const MAXGROUPBASE: ::core::ffi::c_int = LARGEINT;
pub const ONTREE: ::core::ffi::c_int = -(1 as ::core::ffi::c_int);
pub const INBUCKET: ::core::ffi::c_int = -(2 as ::core::ffi::c_int);
pub const NOTINBUCKET: ::core::ffi::c_int = -(3 as ::core::ffi::c_int);
pub const PRUNED: ::core::ffi::c_int = -(4 as ::core::ffi::c_int);
pub const MASKED: ::core::ffi::c_int = -(5 as ::core::ffi::c_int);
pub const BOUNDARYPTR: ::core::ffi::c_int = -(6 as ::core::ffi::c_int);
pub const BOUNDARYCANDIDATE: ::core::ffi::c_int = -(7 as ::core::ffi::c_int);
pub const BOUNDARYLEVEL: ::core::ffi::c_int = LARGEINT;
pub const MINBOUNDARYSIZE: ::core::ffi::c_int = 100 as ::core::ffi::c_int;
pub const MINSCALARCOST: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const INITARRSIZE: ::core::ffi::c_int = 500 as ::core::ffi::c_int;
pub const CANDIDATEBAGSTEP: ::core::ffi::c_int = 500 as ::core::ffi::c_int;
pub const NEGBUCKETFRACTION: ::core::ffi::c_double = 1.0f64;
pub const POSBUCKETFRACTION: ::core::ffi::c_double = 1.0f64;
pub const CLIPFACTOR: ::core::ffi::c_double = 0.6666666667f64;
pub const NSOURCELISTMEMINCR: ::core::ffi::c_int = 1024 as ::core::ffi::c_int;
pub const NLISTMEMINCR: ::core::ffi::c_int = 1024 as ::core::ffi::c_int;
pub const DEF_OUTFILE: [::core::ffi::c_char; 11] =
unsafe { ::core::mem::transmute::<[u8; 11], [::core::ffi::c_char; 11]>(*b"snaphu.out\0") };
pub const DEF_SYSCONFFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_WEIGHTFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_AMPFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_AMPFILE2: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_MAGFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_CORRFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_ESTFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_COSTINFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_BYTEMASKFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_DOTILEMASKFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_INITFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_FLOWFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_EIFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_ROWCOSTFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_COLCOSTFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_MSTROWCOSTFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_MSTCOLCOSTFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_MSTCOSTSFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_CORRDUMPFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_RAWCORRDUMPFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_CONNCOMPFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_COSTOUTFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_LOGFILE: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const MAXITERATION: ::core::ffi::c_int = 5000 as ::core::ffi::c_int;
pub const POSSHORTRANGE: ::core::ffi::c_int = SHRT_MAX;
pub const MAXRES: ::core::ffi::c_int = SCHAR_MAX;
pub const MINRES: ::core::ffi::c_int = SCHAR_MIN;
pub const PROBCOSTP: ::core::ffi::c_double = -99.999f64;
pub const NULLFILE: [::core::ffi::c_char; 10] =
unsafe { ::core::mem::transmute::<[u8; 10], [::core::ffi::c_char; 10]>(*b"/dev/null\0") };
pub const DEF_VERBOSESTREAM: *mut ::core::ffi::c_void = NULL;
pub const DEF_COUNTERSTREAM: *mut ::core::ffi::c_void = NULL;
pub const DEF_INITONLY: ::core::ffi::c_int = FALSE;
pub const DEF_INITMETHOD: ::core::ffi::c_int = MSTINIT;
pub const DEF_UNWRAPPED: ::core::ffi::c_int = FALSE;
pub const DEF_REGROWCONNCOMPS: ::core::ffi::c_int = FALSE;
pub const DEF_EVAL: ::core::ffi::c_int = FALSE;
pub const DEF_WEIGHT: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const DEF_COSTMODE: ::core::ffi::c_int = TOPO;
pub const DEF_VERBOSE: ::core::ffi::c_int = FALSE;
pub const DEF_AMPLITUDE: ::core::ffi::c_int = TRUE;
pub const AUTOCALCSTATMAX: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const MAXNSHORTCYCLE: ::core::ffi::c_int = 8192 as ::core::ffi::c_int;
pub const USEMAXCYCLEFRACTION: ::core::ffi::c_int = -(123 as ::core::ffi::c_int);
pub const COMPLEX_DATA: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const FLOAT_DATA: ::core::ffi::c_int = 2 as ::core::ffi::c_int;
pub const ALT_LINE_DATA: ::core::ffi::c_int = 3 as ::core::ffi::c_int;
pub const ALT_SAMPLE_DATA: ::core::ffi::c_int = 4 as ::core::ffi::c_int;
pub const TILEINITFILEFORMAT: ::core::ffi::c_int = ALT_LINE_DATA;
pub const TILEINITFILEROOT: [::core::ffi::c_char; 17] = unsafe {
::core::mem::transmute::<[u8; 17], [::core::ffi::c_char; 17]>(*b"snaphu_tileinit_\0")
};
pub const ABNORMAL_EXIT: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const NORMAL_EXIT: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const DUMP_PATH: [::core::ffi::c_char; 6] =
unsafe { ::core::mem::transmute::<[u8; 6], [::core::ffi::c_char; 6]>(*b"/tmp/\0") };
pub const NARMS: ::core::ffi::c_int = 8 as ::core::ffi::c_int;
pub const ARMLEN: ::core::ffi::c_int = 5 as ::core::ffi::c_int;
pub const ARCUBOUND: ::core::ffi::c_int = 200 as ::core::ffi::c_int;
pub const MSTINIT: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const MCFINIT: ::core::ffi::c_int = 2 as ::core::ffi::c_int;
pub const BIGGESTDZRHOMAX: ::core::ffi::c_double = 10000.0f64;
pub const SECONDSPERPIXEL: ::core::ffi::c_double = 0.000001f64;
pub const MAXTHREADS: ::core::ffi::c_int = 64 as ::core::ffi::c_int;
pub const TMPTILEDIRROOT: [::core::ffi::c_char; 14] =
unsafe { ::core::mem::transmute::<[u8; 14], [::core::ffi::c_char; 14]>(*b"snaphu_tiles_\0") };
pub const TILEDIRMODE: ::core::ffi::c_int = 511 as ::core::ffi::c_int;
pub const TMPTILEROOT: [::core::ffi::c_char; 9] =
unsafe { ::core::mem::transmute::<[u8; 9], [::core::ffi::c_char; 9]>(*b"tmptile_\0") };
pub const TMPTILECOSTSUFFIX: [::core::ffi::c_char; 6] =
unsafe { ::core::mem::transmute::<[u8; 6], [::core::ffi::c_char; 6]>(*b"cost_\0") };
pub const TMPTILEOUTFORMAT: ::core::ffi::c_int = ALT_LINE_DATA;
pub const REGIONSUFFIX: [::core::ffi::c_char; 9] =
unsafe { ::core::mem::transmute::<[u8; 9], [::core::ffi::c_char; 9]>(*b"_regions\0") };
pub const LOGFILEROOT: [::core::ffi::c_char; 12] =
unsafe { ::core::mem::transmute::<[u8; 12], [::core::ffi::c_char; 12]>(*b"tmptilelog_\0") };
pub const RIGHT: ::core::ffi::c_int = 1;
pub const DOWN: ::core::ffi::c_int = 2;
pub const LEFT: ::core::ffi::c_int = 3;
pub const UP: ::core::ffi::c_int = 4 as ::core::ffi::c_int;
pub const TILEDPSICOLFACTOR: ::core::ffi::c_double = 0.8f64;
pub const TILEOVRLPWARNTHRESH: ::core::ffi::c_int = 400 as ::core::ffi::c_int;
pub const PINGPONG: ::core::ffi::c_int = 2 as ::core::ffi::c_int;
pub const SINGLEANTTRANSMIT: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const NOSTATCOSTS: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const TOPO: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const DEFO: ::core::ffi::c_int = 2 as ::core::ffi::c_int;
pub const SMOOTH: ::core::ffi::c_int = 3 as ::core::ffi::c_int;
pub const CONNCOMPOUTTYPEUCHAR: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const CONNCOMPOUTTYPEUINT: ::core::ffi::c_int = 4 as ::core::ffi::c_int;
pub const DEF_ORBITRADIUS: ::core::ffi::c_double = 7153000.0f64;
pub const DEF_ALTITUDE: ::core::ffi::c_double = 0.0f64;
pub const DEF_EARTHRADIUS: ::core::ffi::c_double = 6378000.0f64;
pub const DEF_BASELINE: ::core::ffi::c_double = 150.0f64;
pub const DEF_BASELINEANGLE: ::core::ffi::c_double = 1.25f64 * PI;
pub const DEF_BPERP: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const DEF_TRANSMITMODE: ::core::ffi::c_int = PINGPONG;
pub const DEF_NLOOKSRANGE: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const DEF_NLOOKSAZ: ::core::ffi::c_int = 5 as ::core::ffi::c_int;
pub const DEF_NLOOKSOTHER: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const DEF_NCORRLOOKS: ::core::ffi::c_double = 23.8f64;
pub const DEF_NCORRLOOKSRANGE: ::core::ffi::c_int = 3 as ::core::ffi::c_int;
pub const DEF_NCORRLOOKSAZ: ::core::ffi::c_int = 15 as ::core::ffi::c_int;
pub const DEF_NEARRANGE: ::core::ffi::c_double = 831000.0f64;
pub const DEF_DR: ::core::ffi::c_double = 8.0f64;
pub const DEF_DA: ::core::ffi::c_double = 20.0f64;
pub const DEF_RANGERES: ::core::ffi::c_double = 10.0f64;
pub const DEF_AZRES: ::core::ffi::c_double = 6.0f64;
pub const DEF_LAMBDA: ::core::ffi::c_double = 0.0565647f64;
pub const DEF_KDS: ::core::ffi::c_double = 0.02f64;
pub const DEF_SPECULAREXP: ::core::ffi::c_double = 8.0f64;
pub const DEF_DZRCRITFACTOR: ::core::ffi::c_double = 2.0f64;
pub const DEF_SHADOW: ::core::ffi::c_int = FALSE;
pub const DEF_DZEIMIN: ::core::ffi::c_double = -4.0f64;
pub const DEF_LAYWIDTH: ::core::ffi::c_int = 16 as ::core::ffi::c_int;
pub const DEF_LAYMINEI: ::core::ffi::c_double = 1.25f64;
pub const DEF_SLOPERATIOFACTOR: ::core::ffi::c_double = 1.18f64;
pub const DEF_SIGSQEI: ::core::ffi::c_double = 100.0f64;
pub const DEF_DRHO: ::core::ffi::c_double = 0.005f64;
pub const DEF_RHOSCONST1: ::core::ffi::c_double = 1.3f64;
pub const DEF_RHOSCONST2: ::core::ffi::c_double = 0.14f64;
pub const DEF_CSTD1: ::core::ffi::c_double = 0.4f64;
pub const DEF_CSTD2: ::core::ffi::c_double = 0.35f64;
pub const DEF_CSTD3: ::core::ffi::c_double = 0.06f64;
pub const DEF_DEFAULTCORR: ::core::ffi::c_double = 0.01f64;
pub const DEF_RHOMINFACTOR: ::core::ffi::c_double = 1.3f64;
pub const DEF_DZLAYPEAK: ::core::ffi::c_double = -2.0f64;
pub const DEF_AZDZFACTOR: ::core::ffi::c_double = 0.99f64;
pub const DEF_DZEIFACTOR: ::core::ffi::c_double = 4.0f64;
pub const DEF_DZEIWEIGHT: ::core::ffi::c_double = 0.5f64;
pub const DEF_DZLAYFACTOR: ::core::ffi::c_double = 1.0f64;
pub const DEF_LAYCONST: ::core::ffi::c_double = 0.9f64;
pub const DEF_LAYFALLOFFCONST: ::core::ffi::c_double = 2.0f64;
pub const DEF_SIGSQSHORTMIN: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const DEF_SIGSQLAYFACTOR: ::core::ffi::c_double = 0.1f64;
pub const DEF_DEFOAZDZFACTOR: ::core::ffi::c_double = 1.0f64;
pub const DEF_DEFOTHRESHFACTOR: ::core::ffi::c_double = 1.2f64;
pub const DEF_DEFOMAX: ::core::ffi::c_double = 1.2f64;
pub const DEF_SIGSQCORR: ::core::ffi::c_double = 0.05f64;
pub const DEF_DEFOLAYCONST: ::core::ffi::c_double = 0.9f64;
pub const DEF_FLIPPHASESIGN: ::core::ffi::c_int = FALSE;
pub const DEF_ONETILEREOPT: ::core::ffi::c_int = FALSE;
pub const DEF_RMTILEINIT: ::core::ffi::c_int = TRUE;
pub const DEF_MAXFLOW: ::core::ffi::c_int = 4 as ::core::ffi::c_int;
pub const DEF_KROWEI: ::core::ffi::c_int = 65 as ::core::ffi::c_int;
pub const DEF_KCOLEI: ::core::ffi::c_int = 257 as ::core::ffi::c_int;
pub const DEF_KPARDPSI: ::core::ffi::c_int = 7 as ::core::ffi::c_int;
pub const DEF_KPERPDPSI: ::core::ffi::c_int = 7 as ::core::ffi::c_int;
pub const DEF_THRESHOLD: ::core::ffi::c_double = 0.001f64;
pub const DEF_INITDZR: ::core::ffi::c_double = 2048.0f64;
pub const DEF_INITDZSTEP: ::core::ffi::c_double = 100.0f64;
pub const DEF_MAXCOST: ::core::ffi::c_double = 1000.0f64;
pub const DEF_COSTSCALE: ::core::ffi::c_double = 100.0f64;
pub const DEF_COSTSCALEAMBIGHT: ::core::ffi::c_double = 80.0f64;
pub const DEF_DNOMINCANGLE: ::core::ffi::c_double = 0.01f64;
pub const DEF_SRCROW: ::core::ffi::c_int = -(1 as ::core::ffi::c_int);
pub const DEF_SRCCOL: ::core::ffi::c_int = -(1 as ::core::ffi::c_int);
pub const DEF_P: ::core::ffi::c_double = PROBCOSTP;
pub const DEF_BIDIRLPN: ::core::ffi::c_int = TRUE;
pub const DEF_NSHORTCYCLE: ::core::ffi::c_int = 200 as ::core::ffi::c_int;
pub const DEF_MAXNEWNODECONST: ::core::ffi::c_double = 0.0008f64;
pub const DEF_MAXCYCLEFRACTION: ::core::ffi::c_double = 0.00001f64;
pub const DEF_NCONNNODEMIN: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const DEF_MAXNFLOWCYCLES: ::core::ffi::c_int = USEMAXCYCLEFRACTION;
pub const DEF_INITMAXFLOW: ::core::ffi::c_int = 9999 as ::core::ffi::c_int;
pub const INITMAXCOSTINCR: ::core::ffi::c_int = 200 as ::core::ffi::c_int;
pub const NOSTATINITMAXFLOW: ::core::ffi::c_int = 15 as ::core::ffi::c_int;
pub const DEF_ARCMAXFLOWCONST: ::core::ffi::c_int = 3 as ::core::ffi::c_int;
pub const DEF_DUMPALL: ::core::ffi::c_int = FALSE;
pub const DUMP_INITFILE: [::core::ffi::c_char; 12] =
unsafe { ::core::mem::transmute::<[u8; 12], [::core::ffi::c_char; 12]>(*b"snaphu.init\0") };
pub const DUMP_FLOWFILE: [::core::ffi::c_char; 12] =
unsafe { ::core::mem::transmute::<[u8; 12], [::core::ffi::c_char; 12]>(*b"snaphu.flow\0") };
pub const DUMP_EIFILE: [::core::ffi::c_char; 10] =
unsafe { ::core::mem::transmute::<[u8; 10], [::core::ffi::c_char; 10]>(*b"snaphu.ei\0") };
pub const DUMP_ROWCOSTFILE: [::core::ffi::c_char; 15] =
unsafe { ::core::mem::transmute::<[u8; 15], [::core::ffi::c_char; 15]>(*b"snaphu.rowcost\0") };
pub const DUMP_COLCOSTFILE: [::core::ffi::c_char; 15] =
unsafe { ::core::mem::transmute::<[u8; 15], [::core::ffi::c_char; 15]>(*b"snaphu.colcost\0") };
pub const DUMP_MSTROWCOSTFILE: [::core::ffi::c_char; 18] = unsafe {
::core::mem::transmute::<[u8; 18], [::core::ffi::c_char; 18]>(*b"snaphu.mstrowcost\0")
};
pub const DUMP_MSTCOLCOSTFILE: [::core::ffi::c_char; 18] = unsafe {
::core::mem::transmute::<[u8; 18], [::core::ffi::c_char; 18]>(*b"snaphu.mstcolcost\0")
};
pub const DUMP_MSTCOSTSFILE: [::core::ffi::c_char; 16] =
unsafe { ::core::mem::transmute::<[u8; 16], [::core::ffi::c_char; 16]>(*b"snaphu.mstcosts\0") };
pub const DUMP_CORRDUMPFILE: [::core::ffi::c_char; 12] =
unsafe { ::core::mem::transmute::<[u8; 12], [::core::ffi::c_char; 12]>(*b"snaphu.corr\0") };
pub const DUMP_RAWCORRDUMPFILE: [::core::ffi::c_char; 15] =
unsafe { ::core::mem::transmute::<[u8; 15], [::core::ffi::c_char; 15]>(*b"snaphu.rawcorr\0") };
pub const INCRCOSTFILEPOS: [::core::ffi::c_char; 19] = unsafe {
::core::mem::transmute::<[u8; 19], [::core::ffi::c_char; 19]>(*b"snaphu.incrcostpos\0")
};
pub const INCRCOSTFILENEG: [::core::ffi::c_char; 19] = unsafe {
::core::mem::transmute::<[u8; 19], [::core::ffi::c_char; 19]>(*b"snaphu.incrcostneg\0")
};
pub const DEF_CS2SCALEFACTOR: ::core::ffi::c_int = 8 as ::core::ffi::c_int;
pub const DEF_NMAJORPRUNE: ::core::ffi::c_int = LARGEINT;
pub const DEF_PRUNECOSTTHRESH: ::core::ffi::c_int = LARGEINT;
pub const DEF_EDGEMASKTOP: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const DEF_EDGEMASKBOT: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const DEF_EDGEMASKLEFT: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const DEF_EDGEMASKRIGHT: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const CONNCOMPMEMINCR: ::core::ffi::c_int = 1024 as ::core::ffi::c_int;
pub const DEF_NTILEROW: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const DEF_NTILECOL: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const DEF_ROWOVRLP: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const DEF_COLOVRLP: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const DEF_PIECEFIRSTROW: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const DEF_PIECEFIRSTCOL: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const DEF_PIECENROW: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const DEF_PIECENCOL: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const DEF_TILECOSTTHRESH: ::core::ffi::c_int = 500 as ::core::ffi::c_int;
pub const DEF_MINREGIONSIZE: ::core::ffi::c_int = 100 as ::core::ffi::c_int;
pub const DEF_NTHREADS: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const DEF_SCNDRYARCFLOWMAX: ::core::ffi::c_int = 8 as ::core::ffi::c_int;
pub const DEF_TILEEDGEWEIGHT: ::core::ffi::c_double = 2.5f64;
pub const DEF_TILEDIR: [::core::ffi::c_char; 1] =
unsafe { ::core::mem::transmute::<[u8; 1], [::core::ffi::c_char; 1]>(*b"\0") };
pub const DEF_ASSEMBLEONLY: ::core::ffi::c_int = FALSE;
pub const DEF_RMTMPTILE: ::core::ffi::c_int = TRUE;
pub const DEF_MINCONNCOMPFRAC: ::core::ffi::c_double = 0.01f64;
pub const DEF_CONNCOMPTHRESH: ::core::ffi::c_int = 300 as ::core::ffi::c_int;
pub const DEF_MAXNCOMPS: ::core::ffi::c_int = 32 as ::core::ffi::c_int;
pub const DEF_CONNCOMPOUTTYPE: ::core::ffi::c_int = CONNCOMPOUTTYPEUCHAR;
pub const DEF_INFILEFORMAT: ::core::ffi::c_int = COMPLEX_DATA;
pub const DEF_UNWRAPPEDINFILEFORMAT: ::core::ffi::c_int = ALT_LINE_DATA;
pub const DEF_MAGFILEFORMAT: ::core::ffi::c_int = FLOAT_DATA;
pub const DEF_OUTFILEFORMAT: ::core::ffi::c_int = ALT_LINE_DATA;
pub const DEF_CORRFILEFORMAT: ::core::ffi::c_int = ALT_LINE_DATA;
pub const DEF_ESTFILEFORMAT: ::core::ffi::c_int = ALT_LINE_DATA;
pub const DEF_AMPFILEFORMAT: ::core::ffi::c_int = ALT_SAMPLE_DATA;
pub const OPTIONSHELPFULL: [::core::ffi::c_char; 2369] = unsafe {
::core::mem::transmute::<
[u8; 2369],
[::core::ffi::c_char; 2369],
>(
*b"usage: snaphu [options] infile linelength [options]\noptions:\n -t use topography mode costs (default)\n -d use deformation mode costs\n -s use smooth-solution mode costs\n -C <confstr> parse argument string as config line as from conf file\n -f <filename> read configuration parameters from file\n -o <filename> write output to file\n -a <filename> read amplitude data from file\n -A <filename> read power data from file\n -m <filename> read interferogram magnitude data from file\n -M <filename> read byte mask data from file\n -c <filename> read correlation data from file\n -e <filename> read coarse unwrapped-phase estimate from file\n -w <filename> read scalar weights from file\n -b <decimal> perpendicular baseline (meters, topo mode only)\n -p <decimal> Lp-norm parameter p\n -i do initialization and exit\n -n do not use statistical costs (with -p or -i)\n -u infile is already unwrapped; initialization not needed\n -q quantify cost of unwrapped input file then exit\n -g <filename> grow connected components mask and write to file\n -G <filename> grow connected components mask for unwrapped input\n -S single-tile reoptimization after multi-tile init\n -k keep temporary tile outputs\n -l <filename> log runtime parameters to file\n -v give verbose output\n --mst use MST algorithm for initialization (default)\n --mcf use MCF algorithm for initialization\n --aa <filename1> <filename2> read amplitude from next two files\n --AA <filename1> <filename2> read power from next two files\n --costinfile <filename> read statistical costs from file\n --costoutfile <filename> write statistical costs to file\n --tile <nrow> <ncol> <rowovrlp> <colovrlp> unwrap as nrow x ncol tiles\n --nproc <integer> number of processors used in tile mode\n --tiledir <dirname> use specified directory for tiles\n --assemble assemble unwrapped tiles in tiledir\n --piece <firstrow> <firstcol> <nrow> <ncol> unwrap subset of image\n --debug, --dumpall dump all intermediate data arrays\n --copyright, --info print copyright and bug report info\n -h, --help print this help text\n\n\0",
)
};
pub const OPTIONSHELPBRIEF: [::core::ffi::c_char; 1176] = unsafe {
::core::mem::transmute::<
[u8; 1176],
[::core::ffi::c_char; 1176],
>(
*b"usage: snaphu [options] infile linelength [options]\nmost common options:\n -t use topography mode costs (default)\n -d use deformation mode costs\n -s use smooth-solution mode costs\n -C <confstr> parse argument string as config line as from conf file\n -f <filename> read configuration parameters from file\n -o <filename> write output to file\n -a <filename> read amplitude data from file\n -c <filename> read correlation data from file\n -M <filename> read byte mask data from file\n -b <decimal> perpendicular baseline (meters)\n -i do initialization and exit\n -S single-tile reoptimization after multi-tile init\n -l <filename> log runtime parameters to file\n -u infile is already unwrapped; initialization not needed\n -v give verbose output\n --mst use MST algorithm for initialization (default)\n --mcf use MCF algorithm for initialization\n --tile <nrow> <ncol> <rowovrlp> <colovrlp> unwrap as nrow x ncol tiles\n --nproc <integer> number of processors used in tile mode\n\ntype snaphu -h for a complete list of options\n\n\0",
)
};
pub const COPYRIGHT: [::core::ffi::c_char; 2360] = unsafe {
::core::mem::transmute::<
[u8; 2360],
[::core::ffi::c_char; 2360],
>(
*b"Written by Curtis W. Chen\nCopyright 2002,2017 Board of Trustees, Leland Stanford Jr. University\n\nExcept as noted below, permission to use, copy, modify, and\ndistribute, this software and its documentation for any purpose is\nhereby granted without fee, provided that the above copyright notice\nappear in all copies and that both that copyright notice and this\npermission notice appear in supporting documentation, and that the\nname of the copyright holders be used in advertising or publicity\npertaining to distribution of the software with specific, written\nprior permission, and that no fee is charged for further distribution\nof this software, or any modifications thereof. The copyright holder\nmakes no representations about the suitability of this software for\nany purpose. It is provided \"as is\" without express or implied\nwarranty.\n\nTHE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS\nSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER\nRESULTING FROM LOSS OF USE, DATA, PROFITS, QPA OR GPA, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT\nOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\nThe parts of this software derived from the CS2 minimum cost flow\nsolver written by A. V. Goldberg and B. Cherkassky are governed by the\nterms of the copyright holder of that software. Permission has been\ngranted to use and distrubute that software for strictly noncommercial\npurposes as part of this package, provided that the following\ncopyright notice from the original distribution and URL accompany the\nsoftware:\n\n COPYRIGHT C 1995 IG Systems, Inc. Permission to use for\n evaluation purposes is granted provided that proper\n acknowledgments are given. For a commercial licence, contact\n igsys@eclipse.net (http://www.igsystems.com/cs2).\n\n This software comes with NO WARRANTY, expressed or implied. By way\n of example, but not limitation, we make no representations of\n warranties of merchantability or fitness for any particular\n purpose or that the use of the software components or\n documentation will not infringe any patents, copyrights,\n trademarks, or other rights.\n\n\nPlease send snaphu bug reports to snaphu@gmail.com\n\n\0",
)
};
pub const INITTOTALCOST: ::core::ffi::c_double = LARGEFLOAT;
#[unsafe(no_mangle)]
pub static mut dumpresults_global: ::core::ffi::c_char = FALSE as ::core::ffi::c_char;
#[unsafe(no_mangle)]
pub static mut requestedstop_global: ::core::ffi::c_char = FALSE as ::core::ffi::c_char;
#[unsafe(no_mangle)]
pub static mut sp0: *mut FILE = ::core::ptr::null::<FILE>() as *mut FILE;
#[unsafe(no_mangle)]
pub static mut sp1: *mut FILE = ::core::ptr::null::<FILE>() as *mut FILE;
#[unsafe(no_mangle)]
pub static mut sp2: *mut FILE = ::core::ptr::null::<FILE>() as *mut FILE;
#[unsafe(no_mangle)]
pub static mut sp3: *mut FILE = ::core::ptr::null::<FILE>() as *mut FILE;
#[unsafe(no_mangle)]
pub static mut NONTREEARC: [nodeT; 1] = [nodeST {
row: 0,
col: 0,
next: ::core::ptr::null_mut::<nodeST>(),
prev: ::core::ptr::null_mut::<nodeST>(),
pred: ::core::ptr::null_mut::<nodeST>(),
level: 0,
group: 0,
incost: 0,
outcost: 0,
}; 1];
#[unsafe(no_mangle)]
pub static mut CalcCost: Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
> = None;
#[unsafe(no_mangle)]
pub static mut EvalCost: Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
> = None;
#[unsafe(no_mangle)]
pub unsafe extern "C" fn run_main(
mut argc: ::core::ffi::c_int,
mut argv: *mut *mut ::core::ffi::c_char,
) -> ::core::ffi::c_int {
let mut infiles: [infileT; 1] = [infileST {
infile: [0; 512],
magfile: [0; 512],
ampfile: [0; 512],
ampfile2: [0; 512],
weightfile: [0; 512],
corrfile: [0; 512],
estfile: [0; 512],
costinfile: [0; 512],
bytemaskfile: [0; 512],
dotilemaskfile: [0; 512],
infileformat: 0,
unwrappedinfileformat: 0,
magfileformat: 0,
corrfileformat: 0,
weightfileformat: 0,
ampfileformat: 0,
estfileformat: 0,
}; 1];
let mut outfiles: [outfileT; 1] = [outfileST {
outfile: [0; 512],
initfile: [0; 512],
flowfile: [0; 512],
eifile: [0; 512],
rowcostfile: [0; 512],
colcostfile: [0; 512],
mstrowcostfile: [0; 512],
mstcolcostfile: [0; 512],
mstcostsfile: [0; 512],
corrdumpfile: [0; 512],
rawcorrdumpfile: [0; 512],
conncompfile: [0; 512],
costoutfile: [0; 512],
logfile: [0; 512],
outfileformat: 0,
}; 1];
let mut params: [paramT; 1] = [paramST {
orbitradius: 0.,
altitude: 0.,
earthradius: 0.,
bperp: 0.,
transmitmode: 0,
baseline: 0.,
baselineangle: 0.,
nlooksrange: 0,
nlooksaz: 0,
nlooksother: 0,
ncorrlooks: 0.,
ncorrlooksrange: 0,
ncorrlooksaz: 0,
nearrange: 0.,
dr: 0.,
da: 0.,
rangeres: 0.,
azres: 0.,
lambda: 0.,
kds: 0.,
specularexp: 0.,
dzrcritfactor: 0.,
shadow: 0,
dzeimin: 0.,
laywidth: 0,
layminei: 0.,
sloperatiofactor: 0.,
sigsqei: 0.,
drho: 0.,
rhosconst1: 0.,
rhosconst2: 0.,
cstd1: 0.,
cstd2: 0.,
cstd3: 0.,
defaultcorr: 0.,
rhominfactor: 0.,
dzlaypeak: 0.,
azdzfactor: 0.,
dzeifactor: 0.,
dzeiweight: 0.,
dzlayfactor: 0.,
layconst: 0.,
layfalloffconst: 0.,
sigsqshortmin: 0,
sigsqlayfactor: 0.,
defoazdzfactor: 0.,
defothreshfactor: 0.,
defomax: 0.,
sigsqcorr: 0.,
defolayconst: 0.,
eval: 0,
unwrapped: 0,
regrowconncomps: 0,
initonly: 0,
initmethod: 0,
costmode: 0,
dumpall: 0,
verbose: 0,
amplitude: 0,
havemagnitude: 0,
flipphasesign: 0,
onetilereopt: 0,
rmtileinit: 0,
initmaxflow: 0,
arcmaxflowconst: 0,
maxflow: 0,
krowei: 0,
kcolei: 0,
kpardpsi: 0,
kperpdpsi: 0,
threshold: 0.,
initdzr: 0.,
initdzstep: 0.,
maxcost: 0.,
costscale: 0.,
costscaleambight: 0.,
dnomincangle: 0.,
srcrow: 0,
srccol: 0,
p: 0.,
bidirlpn: 0,
nshortcycle: 0,
maxnewnodeconst: 0.,
maxnflowcycles: 0,
maxcyclefraction: 0.,
nconnnodemin: 0,
cs2scalefactor: 0,
nmajorprune: 0,
prunecostthresh: 0,
edgemasktop: 0,
edgemaskbot: 0,
edgemaskleft: 0,
edgemaskright: 0,
parentpid: 0,
ntilerow: 0,
ntilecol: 0,
rowovrlp: 0,
colovrlp: 0,
piecefirstrow: 0,
piecefirstcol: 0,
piecenrow: 0,
piecencol: 0,
tilecostthresh: 0,
minregionsize: 0,
nthreads: 0,
scndryarcflowmax: 0,
tileedgeweight: 0.,
assembleonly: 0,
rmtmptile: 0,
tiledir: [0; 512],
minconncompfrac: 0.,
conncompthresh: 0,
maxncomps: 0,
conncompouttype: 0,
}; 1];
let mut tstart: time_t = 0;
let mut cputimestart: ::core::ffi::c_double = 0.;
let mut linelen: ::core::ffi::c_long = 0;
let mut nlines: ::core::ffi::c_long = 0;
StartTimers(&raw mut tstart, &raw mut cputimestart);
SetStreamPointers();
fprintf(
sp1,
b"\n%s v%s\n\0" as *const u8 as *const ::core::ffi::c_char,
PROGRAMNAME.as_ptr(),
VERSION.as_ptr(),
);
SetDefaults(
&raw mut infiles as *mut infileT,
&raw mut outfiles as *mut outfileT,
&raw mut params as *mut paramT,
);
ReadConfigFile(
DEF_SYSCONFFILE.as_ptr() as *mut ::core::ffi::c_char,
&raw mut infiles as *mut infileT,
&raw mut outfiles as *mut outfileT,
&raw mut linelen,
&raw mut params as *mut paramT,
);
ProcessArgs(
argc,
argv as *mut *mut ::core::ffi::c_char,
&raw mut infiles as *mut infileT,
&raw mut outfiles as *mut outfileT,
&raw mut linelen,
&raw mut params as *mut paramT,
);
SetVerboseOut(&raw mut params as *mut paramT);
SetDumpAll(
&raw mut outfiles as *mut outfileT,
&raw mut params as *mut paramT,
);
nlines = GetNLines(
&raw mut infiles as *mut infileT,
linelen,
&raw mut params as *mut paramT,
);
CheckParams(
&raw mut infiles as *mut infileT,
&raw mut outfiles as *mut outfileT,
linelen,
nlines,
&raw mut params as *mut paramT,
);
WriteConfigLogFile(
argc,
argv as *mut *mut ::core::ffi::c_char,
&raw mut infiles as *mut infileT,
&raw mut outfiles as *mut outfileT,
linelen,
&raw mut params as *mut paramT,
);
Unwrap(
&raw mut infiles as *mut infileT,
&raw mut outfiles as *mut outfileT,
&raw mut params as *mut paramT,
linelen,
nlines,
);
fprintf(
sp1,
b"Program %s done\n\0" as *const u8 as *const ::core::ffi::c_char,
PROGRAMNAME.as_ptr(),
);
DisplayElapsedTime(tstart, cputimestart);
exit(NORMAL_EXIT);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ChildResetStreamPointers(
mut pid: pid_t,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut logfp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut logfile: [::core::ffi::c_char; 512] = [0; 512];
let mut cwd: [::core::ffi::c_char; 512] = [0; 512];
fflush(::core::ptr::null_mut::<FILE>());
sprintf(
&raw mut logfile as *mut ::core::ffi::c_char,
b"%s/%s%ld_%ld\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
LOGFILEROOT.as_ptr(),
tilerow,
tilecol,
);
logfp = fopen(
&raw mut logfile as *mut ::core::ffi::c_char,
b"w\0" as *const u8 as *const ::core::ffi::c_char,
) as *mut FILE;
if logfp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Unable to open log file %s\nAbort\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut logfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
fprintf(
logfp,
b"%s (pid %ld): unwrapping tile at row %ld, column %ld\n\n\0" as *const u8
as *const ::core::ffi::c_char,
PROGRAMNAME.as_ptr(),
pid as ::core::ffi::c_long,
tilerow,
tilecol,
);
if !getcwd(
&raw mut cwd as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
)
.is_null()
{
fprintf(
logfp,
b"Current working directory is %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut cwd as *mut ::core::ffi::c_char,
);
}
if sp2 == __stdoutp || sp2 == __stderrp {
sp2 = logfp;
}
if sp1 == __stdoutp || sp1 == __stderrp {
sp1 = logfp;
}
if sp0 == __stdoutp || sp0 == __stderrp {
sp0 = logfp;
}
if sp3 != __stdoutp && sp3 != __stderrp && sp3 != __stdinp && !sp3.is_null() {
fclose(sp3);
}
sp3 = fopen(
NULLFILE.as_ptr(),
b"w\0" as *const u8 as *const ::core::ffi::c_char,
) as *mut FILE;
if sp3.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Unable to open null file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
NULLFILE.as_ptr(),
);
exit(ABNORMAL_EXIT);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Unwrap(
mut infiles: *mut infileT,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut optiter: ::core::ffi::c_long = 0;
let mut noptiter: ::core::ffi::c_long = 0;
let mut nexttilerow: ::core::ffi::c_long = 0;
let mut nexttilecol: ::core::ffi::c_long = 0;
let mut ntilerow: ::core::ffi::c_long = 0;
let mut ntilecol: ::core::ffi::c_long = 0;
let mut nthreads: ::core::ffi::c_long = 0;
let mut nchildren: ::core::ffi::c_long = 0;
let mut sleepinterval: ::core::ffi::c_long = 0;
let mut tileparams: [tileparamT; 1] = [tileparamST {
firstcol: 0,
ncol: 0,
firstrow: 0,
nrow: 0,
}; 1];
let mut iterinfiles: [infileT; 1] = [infileST {
infile: [0; 512],
magfile: [0; 512],
ampfile: [0; 512],
ampfile2: [0; 512],
weightfile: [0; 512],
corrfile: [0; 512],
estfile: [0; 512],
costinfile: [0; 512],
bytemaskfile: [0; 512],
dotilemaskfile: [0; 512],
infileformat: 0,
unwrappedinfileformat: 0,
magfileformat: 0,
corrfileformat: 0,
weightfileformat: 0,
ampfileformat: 0,
estfileformat: 0,
}; 1];
let mut iteroutfiles: [outfileT; 1] = [outfileST {
outfile: [0; 512],
initfile: [0; 512],
flowfile: [0; 512],
eifile: [0; 512],
rowcostfile: [0; 512],
colcostfile: [0; 512],
mstrowcostfile: [0; 512],
mstcolcostfile: [0; 512],
mstcostsfile: [0; 512],
corrdumpfile: [0; 512],
rawcorrdumpfile: [0; 512],
conncompfile: [0; 512],
costoutfile: [0; 512],
logfile: [0; 512],
outfileformat: 0,
}; 1];
let mut tileoutfiles: [outfileT; 1] = [outfileST {
outfile: [0; 512],
initfile: [0; 512],
flowfile: [0; 512],
eifile: [0; 512],
rowcostfile: [0; 512],
colcostfile: [0; 512],
mstrowcostfile: [0; 512],
mstcolcostfile: [0; 512],
mstcostsfile: [0; 512],
corrdumpfile: [0; 512],
rawcorrdumpfile: [0; 512],
conncompfile: [0; 512],
costoutfile: [0; 512],
logfile: [0; 512],
outfileformat: 0,
}; 1];
let mut iterparams: [paramT; 1] = [paramST {
orbitradius: 0.,
altitude: 0.,
earthradius: 0.,
bperp: 0.,
transmitmode: 0,
baseline: 0.,
baselineangle: 0.,
nlooksrange: 0,
nlooksaz: 0,
nlooksother: 0,
ncorrlooks: 0.,
ncorrlooksrange: 0,
ncorrlooksaz: 0,
nearrange: 0.,
dr: 0.,
da: 0.,
rangeres: 0.,
azres: 0.,
lambda: 0.,
kds: 0.,
specularexp: 0.,
dzrcritfactor: 0.,
shadow: 0,
dzeimin: 0.,
laywidth: 0,
layminei: 0.,
sloperatiofactor: 0.,
sigsqei: 0.,
drho: 0.,
rhosconst1: 0.,
rhosconst2: 0.,
cstd1: 0.,
cstd2: 0.,
cstd3: 0.,
defaultcorr: 0.,
rhominfactor: 0.,
dzlaypeak: 0.,
azdzfactor: 0.,
dzeifactor: 0.,
dzeiweight: 0.,
dzlayfactor: 0.,
layconst: 0.,
layfalloffconst: 0.,
sigsqshortmin: 0,
sigsqlayfactor: 0.,
defoazdzfactor: 0.,
defothreshfactor: 0.,
defomax: 0.,
sigsqcorr: 0.,
defolayconst: 0.,
eval: 0,
unwrapped: 0,
regrowconncomps: 0,
initonly: 0,
initmethod: 0,
costmode: 0,
dumpall: 0,
verbose: 0,
amplitude: 0,
havemagnitude: 0,
flipphasesign: 0,
onetilereopt: 0,
rmtileinit: 0,
initmaxflow: 0,
arcmaxflowconst: 0,
maxflow: 0,
krowei: 0,
kcolei: 0,
kpardpsi: 0,
kperpdpsi: 0,
threshold: 0.,
initdzr: 0.,
initdzstep: 0.,
maxcost: 0.,
costscale: 0.,
costscaleambight: 0.,
dnomincangle: 0.,
srcrow: 0,
srccol: 0,
p: 0.,
bidirlpn: 0,
nshortcycle: 0,
maxnewnodeconst: 0.,
maxnflowcycles: 0,
maxcyclefraction: 0.,
nconnnodemin: 0,
cs2scalefactor: 0,
nmajorprune: 0,
prunecostthresh: 0,
edgemasktop: 0,
edgemaskbot: 0,
edgemaskleft: 0,
edgemaskright: 0,
parentpid: 0,
ntilerow: 0,
ntilecol: 0,
rowovrlp: 0,
colovrlp: 0,
piecefirstrow: 0,
piecefirstcol: 0,
piecenrow: 0,
piecencol: 0,
tilecostthresh: 0,
minregionsize: 0,
nthreads: 0,
scndryarcflowmax: 0,
tileedgeweight: 0.,
assembleonly: 0,
rmtmptile: 0,
tiledir: [0; 512],
minconncompfrac: 0.,
conncompthresh: 0,
maxncomps: 0,
conncompouttype: 0,
}; 1];
let mut tileinitfile: [::core::ffi::c_char; 512] = [0; 512];
let mut pid: pid_t = 0;
let mut childstatus: ::core::ffi::c_int = 0;
let mut tilecputimestart: ::core::ffi::c_double = 0.;
let mut tiletstart: time_t = 0;
let mut dotilemask: *mut *mut ::core::ffi::c_schar =
::core::ptr::null_mut::<*mut ::core::ffi::c_schar>();
memset(
&raw mut tileparams as *mut tileparamT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<tileparamT>() as size_t,
);
memset(
&raw mut iterinfiles as *mut infileT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<infileT>() as size_t,
);
memset(
&raw mut iteroutfiles as *mut outfileT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<outfileT>() as size_t,
);
memset(
&raw mut tileoutfiles as *mut outfileT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<outfileT>() as size_t,
);
memset(
&raw mut iterparams as *mut paramT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<paramT>() as size_t,
);
memset(
&raw mut tileinitfile as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
if (*params).onetilereopt != 0 {
noptiter = 2 as ::core::ffi::c_long;
} else {
noptiter = 1 as ::core::ffi::c_long;
}
optiter = 0 as ::core::ffi::c_long;
while optiter < noptiter {
memcpy(
&raw mut iterinfiles as *mut infileT as *mut ::core::ffi::c_void,
infiles as *const ::core::ffi::c_void,
::core::mem::size_of::<infileT>() as size_t,
);
memcpy(
&raw mut iteroutfiles as *mut outfileT as *mut ::core::ffi::c_void,
outfiles as *const ::core::ffi::c_void,
::core::mem::size_of::<outfileT>() as size_t,
);
memcpy(
&raw mut iterparams as *mut paramT as *mut ::core::ffi::c_void,
params as *const ::core::ffi::c_void,
::core::mem::size_of::<paramT>() as size_t,
);
if optiter == 0 as ::core::ffi::c_long {
if noptiter > 1 as ::core::ffi::c_long {
SetTileInitOutfile(
&raw mut (*(&raw mut iteroutfiles as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
(*(&raw mut iterparams as *mut paramT)).parentpid,
);
StrNCopy(
&raw mut tileinitfile as *mut ::core::ffi::c_char,
&raw mut (*(&raw mut iteroutfiles as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
(*(&raw mut iteroutfiles as *mut outfileT)).outfileformat =
TILEINITFILEFORMAT as ::core::ffi::c_schar;
fprintf(
sp1,
b"Starting first-round tile-mode unwrapping\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
} else if optiter == 1 as ::core::ffi::c_long {
StrNCopy(
&raw mut (*(&raw mut iterinfiles as *mut infileT)).infile
as *mut ::core::ffi::c_char,
&raw mut tileinitfile as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
(*(&raw mut iterinfiles as *mut infileT)).unwrappedinfileformat =
TILEINITFILEFORMAT as ::core::ffi::c_schar;
(*(&raw mut iterparams as *mut paramT)).unwrapped = TRUE as ::core::ffi::c_schar;
(*(&raw mut iterparams as *mut paramT)).ntilerow = 1 as ::core::ffi::c_long;
(*(&raw mut iterparams as *mut paramT)).ntilecol = 1 as ::core::ffi::c_long;
(*(&raw mut iterparams as *mut paramT)).rowovrlp = 0 as ::core::ffi::c_long;
(*(&raw mut iterparams as *mut paramT)).colovrlp = 0 as ::core::ffi::c_long;
fprintf(
sp1,
b"Starting second-round single-tile unwrapping\n\0" as *const u8
as *const ::core::ffi::c_char,
);
} else {
fprintf(
sp0,
b"ERROR: illegal optiter value in Unwrap()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
ntilerow = (*(&raw mut iterparams as *mut paramT)).ntilerow;
ntilecol = (*(&raw mut iterparams as *mut paramT)).ntilecol;
nthreads = (*(&raw mut iterparams as *mut paramT)).nthreads;
dumpresults_global = FALSE as ::core::ffi::c_char;
requestedstop_global = FALSE as ::core::ffi::c_char;
if ntilerow == 1 as ::core::ffi::c_long && ntilecol == 1 as ::core::ffi::c_long {
(*(&raw mut tileparams as *mut tileparamT)).firstrow =
(*(&raw mut iterparams as *mut paramT)).piecefirstrow;
(*(&raw mut tileparams as *mut tileparamT)).firstcol =
(*(&raw mut iterparams as *mut paramT)).piecefirstcol;
(*(&raw mut tileparams as *mut tileparamT)).nrow =
(*(&raw mut iterparams as *mut paramT)).piecenrow;
(*(&raw mut tileparams as *mut tileparamT)).ncol =
(*(&raw mut iterparams as *mut paramT)).piecencol;
UnwrapTile(
&raw mut iterinfiles as *mut infileT,
&raw mut iteroutfiles as *mut outfileT,
&raw mut iterparams as *mut paramT,
&raw mut tileparams as *mut tileparamT,
nlines,
linelen,
);
} else {
if (*(&raw mut iterparams as *mut paramT)).assembleonly == 0 {
dotilemask =
SetUpDoTileMask(&raw mut iterinfiles as *mut infileT, ntilerow, ntilecol);
MakeTileDir(
&raw mut iterparams as *mut paramT,
&raw mut iteroutfiles as *mut outfileT,
);
if nthreads > 1 as ::core::ffi::c_long {
nexttilerow = 0 as ::core::ffi::c_long;
nexttilecol = 0 as ::core::ffi::c_long;
nchildren = 0 as ::core::ffi::c_long;
sleepinterval = ceil(
(nlines * linelen) as ::core::ffi::c_double
/ (ntilerow * ntilecol) as ::core::ffi::c_double
* SECONDSPERPIXEL,
) as ::core::ffi::c_long;
CatchSignals(Some(
KillChildrenExit as unsafe extern "C" fn(::core::ffi::c_int) -> (),
));
loop {
if nchildren < nthreads && nexttilerow < ntilerow {
if *(*dotilemask.offset(nexttilerow as isize))
.offset(nexttilecol as isize)
!= 0
{
sleep(sleepinterval as ::core::ffi::c_uint);
fflush(::core::ptr::null_mut::<FILE>());
pid = fork();
} else {
pid = (*(&raw mut iterparams as *mut paramT)).parentpid as pid_t;
}
if pid < 0 as pid_t {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while forking\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
kill(0 as pid_t, SIGKILL);
exit(ABNORMAL_EXIT);
} else if pid == 0 as pid_t {
CatchSignals(Some(
SignalExit as unsafe extern "C" fn(::core::ffi::c_int) -> (),
));
StartTimers(&raw mut tiletstart, &raw mut tilecputimestart);
pid = getpid();
fprintf(
sp1,
b"Unwrapping tile at row %ld, column %ld (pid %ld)\n\0"
as *const u8
as *const ::core::ffi::c_char,
nexttilerow,
nexttilecol,
pid as ::core::ffi::c_long,
);
SetupTile(
nlines,
linelen,
&raw mut iterparams as *mut paramT,
&raw mut tileparams as *mut tileparamT,
&raw mut iteroutfiles as *mut outfileT,
&raw mut tileoutfiles as *mut outfileT,
nexttilerow,
nexttilecol,
);
ChildResetStreamPointers(
pid,
nexttilerow,
nexttilecol,
&raw mut iterparams as *mut paramT,
);
UnwrapTile(
&raw mut iterinfiles as *mut infileT,
&raw mut tileoutfiles as *mut outfileT,
&raw mut iterparams as *mut paramT,
&raw mut tileparams as *mut tileparamT,
nlines,
linelen,
);
DisplayElapsedTime(tiletstart, tilecputimestart);
exit(NORMAL_EXIT);
}
nexttilecol += 1;
if nexttilecol == ntilecol {
nexttilecol = 0 as ::core::ffi::c_long;
nexttilerow += 1;
}
if pid as ::core::ffi::c_long
!= (*(&raw mut iterparams as *mut paramT)).parentpid
{
nchildren += 1;
}
} else {
pid = wait(&raw mut childstatus);
if !(*&raw mut childstatus & 0o177 as ::core::ffi::c_int
== 0 as ::core::ffi::c_int)
|| *&raw mut childstatus >> 8 as ::core::ffi::c_int
& 0xff as ::core::ffi::c_int
!= 0 as ::core::ffi::c_int
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Unexpected or abnormal exit of child process %ld\nAbort\n\0"
as *const u8
as *const ::core::ffi::c_char,
pid as ::core::ffi::c_long,
);
signal(
SIGTERM,
::core::mem::transmute::<
::libc::intptr_t,
Option<unsafe extern "C" fn(::core::ffi::c_int) -> ()>,
>(
1 as ::core::ffi::c_int as ::libc::intptr_t
),
);
kill(0 as pid_t, SIGTERM);
exit(ABNORMAL_EXIT);
}
nchildren -= 1;
if !(nchildren == 0 as ::core::ffi::c_long) {
continue;
}
sleep(sleepinterval as ::core::ffi::c_uint);
break;
}
}
CatchSignals(SIG_DFL);
} else {
nexttilerow = 0 as ::core::ffi::c_long;
while nexttilerow < ntilerow {
nexttilecol = 0 as ::core::ffi::c_long;
while nexttilecol < ntilecol {
if *(*dotilemask.offset(nexttilerow as isize))
.offset(nexttilecol as isize)
!= 0
{
fprintf(
sp1,
b"Unwrapping tile at row %ld, column %ld\n\0" as *const u8
as *const ::core::ffi::c_char,
nexttilerow,
nexttilecol,
);
SetupTile(
nlines,
linelen,
&raw mut iterparams as *mut paramT,
&raw mut tileparams as *mut tileparamT,
&raw mut iteroutfiles as *mut outfileT,
&raw mut tileoutfiles as *mut outfileT,
nexttilerow,
nexttilecol,
);
UnwrapTile(
&raw mut iterinfiles as *mut infileT,
&raw mut tileoutfiles as *mut outfileT,
&raw mut iterparams as *mut paramT,
&raw mut tileparams as *mut tileparamT,
nlines,
linelen,
);
}
nexttilecol += 1;
}
nexttilerow += 1;
}
}
Free2DArray(
dotilemask as *mut *mut ::core::ffi::c_void,
ntilerow as ::core::ffi::c_uint,
);
}
AssembleTiles(
&raw mut iteroutfiles as *mut outfileT,
&raw mut iterparams as *mut paramT,
nlines,
linelen,
);
}
if (*(&raw mut iterparams as *mut paramT)).rmtileinit as ::core::ffi::c_int != 0
&& optiter > 0 as ::core::ffi::c_long
{
unlink(&raw mut tileinitfile as *mut ::core::ffi::c_char);
}
optiter += 1;
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn UnwrapTile(
mut infiles: *mut infileT,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
mut tileparams: *mut tileparamT,
mut nlines: ::core::ffi::c_long,
mut linelen: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut nnoderow: ::core::ffi::c_long = 0;
let mut narcrow: ::core::ffi::c_long = 0;
let mut n_0: ::core::ffi::c_long = 0;
let mut ngroundarcs: ::core::ffi::c_long = 0;
let mut iincrcostfile: ::core::ffi::c_long = 0;
let mut nflow: ::core::ffi::c_long = 0;
let mut ncycle: ::core::ffi::c_long = 0;
let mut mostflow: ::core::ffi::c_long = 0;
let mut nflowdone: ::core::ffi::c_long = 0;
let mut candidatelistsize: ::core::ffi::c_long = 0;
let mut candidatebagsize: ::core::ffi::c_long = 0;
let mut isource: ::core::ffi::c_long = 0;
let mut nsource: ::core::ffi::c_long = 0;
let mut nnondecreasedcostiter: ::core::ffi::c_long = 0;
let mut nconnectedarr: *mut ::core::ffi::c_long =
::core::ptr::null_mut::<::core::ffi::c_long>();
let mut nnodesperrow: *mut ::core::ffi::c_int = ::core::ptr::null_mut::<::core::ffi::c_int>();
let mut narcsperrow: *mut ::core::ffi::c_int = ::core::ptr::null_mut::<::core::ffi::c_int>();
let mut flows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut mstcosts: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut wrappedphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut unwrappedphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut mag: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut unwrappedest: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut incrcosts: *mut *mut incrcostT = ::core::ptr::null_mut::<*mut incrcostT>();
let mut costs: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut totalcost: totalcostT = 0.;
let mut oldtotalcost: totalcostT = 0.;
let mut mintotalcost: totalcostT = 0.;
let mut sourcelist: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
let mut source: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut apexes: *mut *mut *mut nodeT = ::core::ptr::null_mut::<*mut *mut nodeT>();
let mut nodes_0: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
let mut ground: [nodeT; 1] = [nodeST {
row: 0,
col: 0,
next: ::core::ptr::null_mut::<nodeST>(),
prev: ::core::ptr::null_mut::<nodeST>(),
pred: ::core::ptr::null_mut::<nodeST>(),
level: 0,
group: 0,
incost: 0,
outcost: 0,
}; 1];
let mut candidatebag: *mut candidateT = ::core::ptr::null_mut::<candidateT>();
let mut candidatelist: *mut candidateT = ::core::ptr::null_mut::<candidateT>();
let mut iscandidate: *mut *mut ::core::ffi::c_schar =
::core::ptr::null_mut::<*mut ::core::ffi::c_schar>();
let mut notfirstloop: ::core::ffi::c_schar = 0;
let mut allmasked: ::core::ffi::c_schar = 0;
let mut bkts: *mut bucketT = ::core::ptr::null_mut::<bucketT>();
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
ReadInputFile(
infiles,
&raw mut mag,
&raw mut wrappedphase,
&raw mut flows,
linelen,
nlines,
params,
tileparams,
);
ReadMagnitude(mag, infiles, linelen, nlines, tileparams);
ReadByteMask(mag, infiles, linelen, nlines, tileparams, params);
allmasked = CheckMagMasking(mag, nrow, ncol);
unwrappedest = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
if strlen(&raw mut (*infiles).estfile as *mut ::core::ffi::c_char) != 0 {
ReadUnwrappedEstimateFile(
&raw mut unwrappedest,
infiles,
linelen,
nlines,
params,
tileparams,
);
FlattenWrappedPhase(wrappedphase, unwrappedest, nrow, ncol);
}
BuildCostArrays(
&raw mut costs,
&raw mut mstcosts,
mag,
wrappedphase,
unwrappedest,
linelen,
nlines,
nrow,
ncol,
params,
tileparams,
infiles,
outfiles,
);
if (*params).eval != 0 {
mostflow = Short2DRowColAbsMax(flows, nrow, ncol);
fprintf(
sp1,
b"Maximum flow on network: %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
mostflow,
);
totalcost = EvaluateTotalCost(
costs,
flows,
nrow,
ncol,
::core::ptr::null_mut::<::core::ffi::c_int>(),
params,
);
fprintf(
sp1,
b"Total solution cost: %.9g\n\0" as *const u8 as *const ::core::ffi::c_char,
totalcost,
);
Free2DArray(
costs,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
mag as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
wrappedphase as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
flows as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
return 1 as ::core::ffi::c_int;
}
SetGridNetworkFunctionPointers();
unwrappedphase = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
nodes_0 = ::core::ptr::null_mut::<*mut nodeT>();
if (*params).unwrapped == 0 {
if (*params).initmethod as ::core::ffi::c_int == MSTINIT {
MSTInitFlows(
wrappedphase,
&raw mut flows,
mstcosts,
nrow,
ncol,
&raw mut nodes_0,
&raw mut ground as *mut nodeT,
(*params).initmaxflow,
);
} else if (*params).initmethod as ::core::ffi::c_int == MCFINIT {
MCFInitFlows(
wrappedphase,
&raw mut flows,
mstcosts,
nrow,
ncol,
(*params).cs2scalefactor,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal initialization method\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).initonly as ::core::ffi::c_int != 0
|| strlen(&raw mut (*outfiles).initfile as *mut ::core::ffi::c_char) != 0
{
fprintf(
sp1,
b"Integrating phase\n\0" as *const u8 as *const ::core::ffi::c_char,
);
unwrappedphase = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
IntegratePhase(wrappedphase, unwrappedphase, flows, nrow, ncol);
if !unwrappedest.is_null() {
Add2DFloatArrays(unwrappedphase, unwrappedest, nrow, ncol);
}
FlipPhaseArraySign(unwrappedphase, params, nrow, ncol);
if (*params).initonly != 0 {
fprintf(
sp1,
b"Writing output to file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
);
WriteOutputFile(
mag,
unwrappedphase,
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
outfiles,
nrow,
ncol,
);
Free2DArray(
mag as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
wrappedphase as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
unwrappedphase as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
if !nodes_0.is_null() {
Free2DArray(
nodes_0 as *mut *mut ::core::ffi::c_void,
(nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
}
Free2DArray(
flows as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long)
as ::core::ffi::c_uint,
);
return 1 as ::core::ffi::c_int;
} else {
fprintf(
sp2,
b"Writing initialization to file %s\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*outfiles).initfile as *mut ::core::ffi::c_char,
);
WriteOutputFile(
mag,
unwrappedphase,
&raw mut (*outfiles).initfile as *mut ::core::ffi::c_char,
outfiles,
nrow,
ncol,
);
Free2DArray(
unwrappedphase as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
}
}
}
InitNetwork(
flows,
&raw mut ngroundarcs,
&raw mut ncycle,
&raw mut nflowdone,
&raw mut mostflow,
&raw mut nflow,
&raw mut candidatebagsize,
&raw mut candidatebag,
&raw mut candidatelistsize,
&raw mut candidatelist,
&raw mut iscandidate,
&raw mut apexes,
&raw mut bkts,
&raw mut iincrcostfile,
&raw mut incrcosts,
&raw mut nodes_0,
&raw mut ground as *mut nodeT,
&raw mut nnoderow,
&raw mut nnodesperrow,
&raw mut narcrow,
&raw mut narcsperrow,
nrow,
ncol,
&raw mut notfirstloop,
&raw mut totalcost,
params,
);
oldtotalcost = totalcost;
mintotalcost = totalcost;
nnondecreasedcostiter = 0 as ::core::ffi::c_long;
if (*params).regrowconncomps != 0 {
Free2DArray(
apexes as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
iscandidate as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
nodes_0 as *mut *mut ::core::ffi::c_void,
(nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
free(candidatebag as *mut ::core::ffi::c_void);
free(candidatelist as *mut ::core::ffi::c_void);
free((*bkts).bucketbase as *mut ::core::ffi::c_void);
GrowConnCompsMask(costs, flows, nrow, ncol, incrcosts, outfiles, params);
Free2DArray(
incrcosts as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
costs,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
mag as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
wrappedphase as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
flows as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
free(nnodesperrow as *mut ::core::ffi::c_void);
free(narcsperrow as *mut ::core::ffi::c_void);
return 1 as ::core::ffi::c_int;
}
MaskNodes(nrow, ncol, nodes_0, &raw mut ground as *mut nodeT, mag);
if (*params).ntilerow == 1 as ::core::ffi::c_long
&& (*params).ntilecol == 1 as ::core::ffi::c_long
{
signal(
SIGINT,
Some(SetDump as unsafe extern "C" fn(::core::ffi::c_int) -> ()),
);
signal(
SIGHUP,
Some(SetDump as unsafe extern "C" fn(::core::ffi::c_int) -> ()),
);
}
if allmasked == 0 {
fprintf(
sp1,
b"Running nonlinear network flow optimizer\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
sp1,
b"Maximum flow on network: %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
mostflow,
);
fprintf(
sp2,
b"Number of nodes in network: %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(nrow - 1 as ::core::ffi::c_long) * (ncol - 1 as ::core::ffi::c_long)
+ 1 as ::core::ffi::c_long,
);
loop {
fprintf(
sp1,
b"Flow increment: %ld (Total improvements: %ld)\n\0" as *const u8
as *const ::core::ffi::c_char,
nflow,
ncycle,
);
SetupIncrFlowCosts(
costs,
incrcosts,
flows,
nflow,
nrow,
narcrow,
narcsperrow,
params,
);
if (*params).dumpall as ::core::ffi::c_int != 0
&& (*params).ntilerow == 1 as ::core::ffi::c_long
&& (*params).ntilecol == 1 as ::core::ffi::c_long
{
iincrcostfile += 1;
DumpIncrCostFiles(incrcosts, iincrcostfile, nflow, nrow, ncol);
}
sourcelist = ::core::ptr::null_mut::<*mut nodeT>();
nconnectedarr = ::core::ptr::null_mut::<::core::ffi::c_long>();
nsource = SelectSources(
nodes_0,
mag,
&raw mut ground as *mut nodeT,
nflow,
flows,
ngroundarcs,
nrow,
ncol,
params,
&raw mut sourcelist,
&raw mut nconnectedarr,
);
SetupTreeSolveNetwork(
nodes_0,
&raw mut ground as *mut nodeT,
apexes,
iscandidate,
nnoderow,
nnodesperrow,
narcrow,
narcsperrow,
nrow,
ncol,
);
n_0 = 0 as ::core::ffi::c_long;
isource = 0 as ::core::ffi::c_long;
while isource < nsource {
source = *sourcelist.offset(isource as isize);
if (*source).row == GROUNDROW {
fprintf(
sp3,
b"Source %ld: (edge ground)\n\0" as *const u8 as *const ::core::ffi::c_char,
isource,
);
} else {
fprintf(
sp3,
b"Source %ld: row, col = %d, %d\n\0" as *const u8
as *const ::core::ffi::c_char,
isource,
(*source).row,
(*source).col,
);
}
n_0 += TreeSolve(
nodes_0,
::core::ptr::null_mut::<*mut nodesuppT>(),
&raw mut ground as *mut nodeT,
source,
&raw mut candidatelist,
&raw mut candidatebag,
&raw mut candidatelistsize,
&raw mut candidatebagsize,
bkts,
flows,
costs,
incrcosts,
apexes,
iscandidate,
ngroundarcs,
nflow,
mag,
wrappedphase,
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
nnoderow,
nnodesperrow,
narcrow,
narcsperrow,
nrow,
ncol,
outfiles,
*nconnectedarr.offset(isource as isize),
params,
);
isource += 1;
}
free(sourcelist as *mut ::core::ffi::c_void);
free(nconnectedarr as *mut ::core::ffi::c_void);
fprintf(
sp2,
b"Current solution cost: %.16g\n\0" as *const u8 as *const ::core::ffi::c_char,
EvaluateTotalCost(
costs,
flows,
nrow,
ncol,
::core::ptr::null_mut::<::core::ffi::c_int>(),
params,
),
);
fflush(::core::ptr::null_mut::<FILE>());
if notfirstloop != 0 {
oldtotalcost = totalcost;
totalcost = EvaluateTotalCost(
costs,
flows,
nrow,
ncol,
::core::ptr::null_mut::<::core::ffi::c_int>(),
params,
);
if totalcost < mintotalcost {
mintotalcost = totalcost;
}
if totalcost > oldtotalcost
|| n_0 > 0 as ::core::ffi::c_long && totalcost == oldtotalcost
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp1,
b"Caution: Unexpected increase in total cost\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
if totalcost > mintotalcost {
nnondecreasedcostiter += 1;
} else {
nnondecreasedcostiter = 0 as ::core::ffi::c_long;
}
}
ncycle += n_0;
if n_0 <= (*params).maxnflowcycles {
nflowdone += 1;
} else {
nflowdone = 1 as ::core::ffi::c_long;
}
mostflow = MaxNonMaskFlow(flows, mag, nrow, ncol);
if nnondecreasedcostiter >= 2 as ::core::ffi::c_long * mostflow {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: No overall cost reduction for too many iterations. Breaking loop\n\0"
as *const u8 as *const ::core::ffi::c_char,
);
break;
} else {
if nflowdone >= (*params).maxflow || nflowdone >= mostflow || (*params).p >= 1.0f64
{
break;
}
nflow += 1;
if nflow > (*params).maxflow || nflow > mostflow {
nflow = 1 as ::core::ffi::c_long;
notfirstloop = TRUE as ::core::ffi::c_schar;
}
fprintf(
sp2,
b"Maximum valid flow on network: %ld\n\0" as *const u8
as *const ::core::ffi::c_char,
mostflow,
);
if strlen(&raw mut (*outfiles).flowfile as *mut ::core::ffi::c_char) != 0 {
FlipFlowArraySign(flows, params, nrow, ncol);
Write2DRowColArray(
flows as *mut *mut ::core::ffi::c_void,
&raw mut (*outfiles).flowfile as *mut ::core::ffi::c_char,
nrow,
ncol,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
FlipFlowArraySign(flows, params, nrow, ncol);
}
}
}
}
if (*params).ntilerow == 1 as ::core::ffi::c_long
&& (*params).ntilecol == 1 as ::core::ffi::c_long
{
signal(SIGINT, SIG_DFL);
signal(SIGHUP, SIG_DFL);
}
Free2DArray(
apexes as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
iscandidate as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
nodes_0 as *mut *mut ::core::ffi::c_void,
(nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
free(candidatebag as *mut ::core::ffi::c_void);
free(candidatelist as *mut ::core::ffi::c_void);
free((*bkts).bucketbase as *mut ::core::ffi::c_void);
if strlen(&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char) != 0 {
GrowConnCompsMask(costs, flows, nrow, ncol, incrcosts, outfiles, params);
}
if (*params).ntilerow != 1 as ::core::ffi::c_long
|| (*params).ntilecol != 1 as ::core::ffi::c_long
{
GrowRegions(
costs, flows, nrow, ncol, incrcosts, outfiles, tileparams, params,
);
}
Free2DArray(
incrcosts as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
totalcost = EvaluateTotalCost(
costs,
flows,
nrow,
ncol,
::core::ptr::null_mut::<::core::ffi::c_int>(),
params,
);
fprintf(
sp1,
b"Maximum flow on network: %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
mostflow,
);
fprintf(
sp1,
b"Total solution cost: %.9g\n\0" as *const u8 as *const ::core::ffi::c_char,
totalcost,
);
fprintf(
sp1,
b"Integrating phase\n\0" as *const u8 as *const ::core::ffi::c_char,
);
unwrappedphase = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
IntegratePhase(wrappedphase, unwrappedphase, flows, nrow, ncol);
if !unwrappedest.is_null() {
Add2DFloatArrays(unwrappedphase, unwrappedest, nrow, ncol);
}
FlipPhaseArraySign(unwrappedphase, params, nrow, ncol);
fprintf(
sp1,
b"Writing output to file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
);
WriteOutputFile(
mag,
unwrappedphase,
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
outfiles,
nrow,
ncol,
);
Free2DArray(
costs,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
mag as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
wrappedphase as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
unwrappedphase as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
flows as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
free(nnodesperrow as *mut ::core::ffi::c_void);
free(narcsperrow as *mut ::core::ffi::c_void);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn BuildCostArrays(
mut costsptr: *mut *mut *mut ::core::ffi::c_void,
mut mstcostsptr: *mut *mut *mut ::core::ffi::c_short,
mut mag: *mut *mut ::core::ffi::c_float,
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut unwrappedest: *mut *mut ::core::ffi::c_float,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut params: *mut paramT,
mut tileparams: *mut tileparamT,
mut infiles: *mut infileT,
mut outfiles: *mut outfileT,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
let mut tempcost: ::core::ffi::c_long = 0;
let mut poscost: ::core::ffi::c_long = 0;
let mut negcost: ::core::ffi::c_long = 0;
let mut costtypesize: ::core::ffi::c_long = 0;
let mut pwr: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut corr: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut weights: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut rowweight: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut colweight: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut scalarcosts: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut bidircosts: *mut *mut bidircostT = ::core::ptr::null_mut::<*mut bidircostT>();
let mut costs: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut rowcost: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut colcost: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut CalcStatCost: Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
> = None;
costtypesize = 0 as ::core::ffi::c_long;
bidircosts = ::core::ptr::null_mut::<*mut bidircostT>();
scalarcosts = ::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
if (*params).p < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
if (*params).costmode as ::core::ffi::c_int == TOPO {
CalcCost = Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else if (*params).costmode as ::core::ffi::c_int == DEFO {
CalcCost = Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else if (*params).costmode as ::core::ffi::c_int == SMOOTH {
CalcCost = Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
}
} else if (*params).bidirlpn != 0 {
if (*params).p == 0 as ::core::ffi::c_int as ::core::ffi::c_double {
CalcCost = Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else if (*params).p == 1 as ::core::ffi::c_int as ::core::ffi::c_double {
CalcCost = Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else if (*params).p == 2 as ::core::ffi::c_int as ::core::ffi::c_double {
CalcCost = Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else {
CalcCost = Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
}
} else if (*params).p == 0 as ::core::ffi::c_int as ::core::ffi::c_double {
CalcCost = Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else if (*params).p == 1 as ::core::ffi::c_int as ::core::ffi::c_double {
CalcCost = Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else if (*params).p == 2 as ::core::ffi::c_int as ::core::ffi::c_double {
CalcCost = Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else {
CalcCost = Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
}
weights = ::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
ReadWeightsFile(
&raw mut weights,
&raw mut (*infiles).weightfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
rowweight = weights;
colweight = weights.offset((nrow - 1 as ::core::ffi::c_long) as isize)
as *mut *mut ::core::ffi::c_short;
if !mag.is_null() {
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if *(*mag.offset(row as isize)).offset(col as isize)
== 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
if row > 0 as ::core::ffi::c_long {
*(*rowweight.offset((row - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize) = 0 as ::core::ffi::c_short;
}
if row < nrow - 1 as ::core::ffi::c_long {
*(*rowweight.offset(row as isize)).offset(col as isize) =
0 as ::core::ffi::c_short;
}
if col > 0 as ::core::ffi::c_long {
*(*colweight.offset(row as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize) =
0 as ::core::ffi::c_short;
}
if col < ncol - 1 as ::core::ffi::c_long {
*(*colweight.offset(row as isize)).offset(col as isize) =
0 as ::core::ffi::c_short;
}
}
col += 1;
}
row += 1;
}
}
if (*params).initonly as ::core::ffi::c_int != 0
&& (*params).costmode as ::core::ffi::c_int == NOSTATCOSTS
{
*mstcostsptr = weights;
return 0 as ::core::ffi::c_int;
}
if (*params).costmode as ::core::ffi::c_int == TOPO {
costtypesize = ::core::mem::size_of::<costT>() as ::core::ffi::c_long;
} else if (*params).costmode as ::core::ffi::c_int == DEFO {
costtypesize = ::core::mem::size_of::<costT>() as ::core::ffi::c_long;
} else if (*params).costmode as ::core::ffi::c_int == SMOOTH {
costtypesize = ::core::mem::size_of::<smoothcostT>() as ::core::ffi::c_long;
}
if strlen(&raw mut (*infiles).costinfile as *mut ::core::ffi::c_char) != 0 {
fprintf(
sp1,
b"Reading cost information from file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*infiles).costinfile as *mut ::core::ffi::c_char,
);
costs = ::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
Read2DRowColFile(
&raw mut costs,
&raw mut (*infiles).costinfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
costtypesize as size_t,
);
*costsptr = costs;
MaskPrespecifiedArcCosts(costs, weights, nrow, ncol, params);
} else if (*params).costmode as ::core::ffi::c_int != NOSTATCOSTS {
GetIntensityAndCorrelation(
mag,
wrappedphase,
&raw mut pwr,
&raw mut corr,
infiles,
linelen,
nlines,
nrow,
ncol,
outfiles,
params,
tileparams,
);
if (*params).costmode as ::core::ffi::c_int == TOPO {
fprintf(
sp1,
b"Calculating topography-mode cost parameters\n\0" as *const u8
as *const ::core::ffi::c_char,
);
costs = BuildStatCostsTopo(
wrappedphase,
mag,
unwrappedest,
pwr,
corr,
rowweight,
colweight,
nrow,
ncol,
tileparams,
outfiles,
params,
);
} else if (*params).costmode as ::core::ffi::c_int == DEFO {
fprintf(
sp1,
b"Calculating deformation-mode cost parameters\n\0" as *const u8
as *const ::core::ffi::c_char,
);
costs = BuildStatCostsDefo(
wrappedphase,
mag,
unwrappedest,
corr,
rowweight,
colweight,
nrow,
ncol,
tileparams,
outfiles,
params,
);
} else if (*params).costmode as ::core::ffi::c_int == SMOOTH {
fprintf(
sp1,
b"Calculating smooth-solution cost parameters\n\0" as *const u8
as *const ::core::ffi::c_char,
);
costs = BuildStatCostsSmooth(
wrappedphase,
mag,
unwrappedest,
corr,
rowweight,
colweight,
nrow,
ncol,
tileparams,
outfiles,
params,
);
} else {
costs = ::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unrecognized cost mode\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
*costsptr = costs;
}
if (*params).costmode as ::core::ffi::c_int == TOPO {
rowcost = costs;
colcost = (costs as *mut *mut costT).offset((nrow - 1 as ::core::ffi::c_long) as isize)
as *mut *mut costT as *mut *mut ::core::ffi::c_void;
CalcStatCost = Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
} else if (*params).costmode as ::core::ffi::c_int == DEFO {
rowcost = costs;
colcost = (costs as *mut *mut costT).offset((nrow - 1 as ::core::ffi::c_long) as isize)
as *mut *mut costT as *mut *mut ::core::ffi::c_void;
CalcStatCost = Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
} else if (*params).costmode as ::core::ffi::c_int == SMOOTH {
rowcost = costs;
colcost = (costs as *mut *mut smoothcostT)
.offset((nrow - 1 as ::core::ffi::c_long) as isize)
as *mut *mut smoothcostT as *mut *mut ::core::ffi::c_void;
CalcStatCost = Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
} else {
rowcost = ::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
colcost = ::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
CalcStatCost = None;
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unrecognized cost mode\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if strlen(&raw mut (*infiles).costinfile as *mut ::core::ffi::c_char) != 0
|| (*params).costmode as ::core::ffi::c_int != NOSTATCOSTS
{
if strlen(&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char) != 0 {
Write2DRowColArray(
costs,
&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char,
nrow,
ncol,
costtypesize as size_t,
);
} else {
if strlen(&raw mut (*outfiles).rowcostfile as *mut ::core::ffi::c_char) != 0 {
Write2DArray(
rowcost,
&raw mut (*outfiles).rowcostfile as *mut ::core::ffi::c_char,
nrow - 1 as ::core::ffi::c_long,
ncol,
costtypesize as size_t,
);
}
if strlen(&raw mut (*outfiles).colcostfile as *mut ::core::ffi::c_char) != 0 {
Write2DArray(
colcost,
&raw mut (*outfiles).colcostfile as *mut ::core::ffi::c_char,
nrow,
ncol - 1 as ::core::ffi::c_long,
costtypesize as size_t,
);
}
}
}
if (*params).p >= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
if (*params).bidirlpn != 0 {
bidircosts = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut bidircostT>() as ::core::ffi::c_int,
::core::mem::size_of::<bidircostT>() as size_t,
) as *mut *mut bidircostT;
*costsptr = bidircosts as *mut *mut ::core::ffi::c_void;
} else {
scalarcosts = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
*costsptr = scalarcosts as *mut *mut ::core::ffi::c_void;
}
}
if (*params).costmode as ::core::ffi::c_int == NOSTATCOSTS {
if (*params).initonly == 0 {
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
if (*params).bidirlpn != 0 {
(*(*bidircosts.offset(row as isize)).offset(col as isize)).posweight =
*(*weights.offset(row as isize)).offset(col as isize);
(*(*bidircosts.offset(row as isize)).offset(col as isize)).negweight =
*(*weights.offset(row as isize)).offset(col as isize);
} else {
*(*scalarcosts.offset(row as isize)).offset(col as isize) =
*(*weights.offset(row as isize)).offset(col as isize);
}
col += 1;
}
row += 1;
}
}
if (*params).unwrapped == 0 {
*mstcostsptr = weights;
} else {
Free2DArray(
weights as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
*mstcostsptr = ::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
}
} else if (*params).unwrapped == 0
|| (*params).p >= 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
CalcStatCost.expect("non-null function pointer")(
costs,
0 as ::core::ffi::c_long,
row,
col,
1 as ::core::ffi::c_long,
nrow,
params,
&raw mut poscost,
&raw mut negcost,
);
if poscost < negcost {
tempcost = poscost;
} else {
tempcost = negcost;
}
*(*weights.offset(row as isize)).offset(col as isize) = LClip(
tempcost,
MINSCALARCOST as ::core::ffi::c_long,
(*params).maxcost as ::core::ffi::c_long,
)
as ::core::ffi::c_short;
if (*params).p >= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
if (*params).bidirlpn != 0 {
(*(*bidircosts.offset(row as isize)).offset(col as isize)).posweight = LClip(
poscost,
0 as ::core::ffi::c_long,
(*params).maxcost as ::core::ffi::c_long,
)
as ::core::ffi::c_short;
(*(*bidircosts.offset(row as isize)).offset(col as isize)).negweight = LClip(
negcost,
0 as ::core::ffi::c_long,
(*params).maxcost as ::core::ffi::c_long,
)
as ::core::ffi::c_short;
} else {
*(*scalarcosts.offset(row as isize)).offset(col as isize) =
*(*weights.offset(row as isize)).offset(col as isize);
if poscost == 0 as ::core::ffi::c_long
&& negcost == 0 as ::core::ffi::c_long
{
*(*scalarcosts.offset(row as isize)).offset(col as isize) =
0 as ::core::ffi::c_short;
}
}
}
col += 1;
}
row += 1;
}
*(*weights.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) = LARGESHORT as ::core::ffi::c_short;
*(*weights.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) =
LARGESHORT as ::core::ffi::c_short;
*(*weights.offset((2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) = LARGESHORT as ::core::ffi::c_short;
*(*weights.offset((2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) =
LARGESHORT as ::core::ffi::c_short;
if (*params).p >= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
if (*params).bidirlpn != 0 {
(*(*bidircosts.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.posweight = LARGESHORT as ::core::ffi::c_short;
(*(*bidircosts.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.negweight = LARGESHORT as ::core::ffi::c_short;
(*(*bidircosts.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.posweight = LARGESHORT as ::core::ffi::c_short;
(*(*bidircosts.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.negweight = LARGESHORT as ::core::ffi::c_short;
(*(*bidircosts.offset(
(2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize,
))
.offset(0 as ::core::ffi::c_int as isize))
.posweight = LARGESHORT as ::core::ffi::c_short;
(*(*bidircosts.offset(
(2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize,
))
.offset(0 as ::core::ffi::c_int as isize))
.negweight = LARGESHORT as ::core::ffi::c_short;
(*(*bidircosts.offset(
(2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize,
))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.posweight = LARGESHORT as ::core::ffi::c_short;
(*(*bidircosts.offset(
(2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize,
))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.negweight = LARGESHORT as ::core::ffi::c_short;
} else {
*(*scalarcosts.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) = LARGESHORT as ::core::ffi::c_short;
*(*scalarcosts.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) =
LARGESHORT as ::core::ffi::c_short;
*(*scalarcosts.offset(
(2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize,
))
.offset(0 as ::core::ffi::c_int as isize) = LARGESHORT as ::core::ffi::c_short;
*(*scalarcosts.offset(
(2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize,
))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) =
LARGESHORT as ::core::ffi::c_short;
}
}
if strlen(&raw mut (*outfiles).mstrowcostfile as *mut ::core::ffi::c_char) != 0 {
Write2DArray(
rowweight as *mut *mut ::core::ffi::c_void,
&raw mut (*outfiles).mstrowcostfile as *mut ::core::ffi::c_char,
nrow - 1 as ::core::ffi::c_long,
ncol,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
}
if strlen(&raw mut (*outfiles).mstcolcostfile as *mut ::core::ffi::c_char) != 0 {
Write2DArray(
colweight as *mut *mut ::core::ffi::c_void,
&raw mut (*outfiles).mstcolcostfile as *mut ::core::ffi::c_char,
nrow,
ncol - 1 as ::core::ffi::c_long,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
}
if strlen(&raw mut (*outfiles).mstcostsfile as *mut ::core::ffi::c_char) != 0 {
Write2DRowColArray(
rowweight as *mut *mut ::core::ffi::c_void,
&raw mut (*outfiles).mstcostsfile as *mut ::core::ffi::c_char,
nrow,
ncol,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
}
if (*params).initmaxflow == AUTOCALCSTATMAX as ::core::ffi::c_long
&& (*params).unwrapped == 0
{
CalcInitMaxFlow(params, costs, nrow, ncol);
}
if (*params).initonly as ::core::ffi::c_int != 0
|| (*params).p >= 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
Free2DArray(
costs,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
}
if (*params).unwrapped == 0 {
*mstcostsptr = weights;
} else {
Free2DArray(
weights as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
}
} else {
Free2DArray(
weights as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn BuildStatCostsTopo(
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut mag: *mut *mut ::core::ffi::c_float,
mut unwrappedest: *mut *mut ::core::ffi::c_float,
mut pwr: *mut *mut ::core::ffi::c_float,
mut corr: *mut *mut ::core::ffi::c_float,
mut rowweight: *mut *mut ::core::ffi::c_short,
mut colweight: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
) -> *mut *mut ::core::ffi::c_void {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut iei: ::core::ffi::c_long = 0;
let mut nrho: ::core::ffi::c_long = 0;
let mut nominctablesize: ::core::ffi::c_long = 0;
let mut kperpdpsi: ::core::ffi::c_long = 0;
let mut kpardpsi: ::core::ffi::c_long = 0;
let mut sigsqshortmin: ::core::ffi::c_long = 0;
let mut a: ::core::ffi::c_double = 0.;
let mut re: ::core::ffi::c_double = 0.;
let mut dr: ::core::ffi::c_double = 0.;
let mut slantrange: ::core::ffi::c_double = 0.;
let mut nearrange: ::core::ffi::c_double = 0.;
let mut nominc0: ::core::ffi::c_double = 0.;
let mut dnominc: ::core::ffi::c_double = 0.;
let mut nomincangle: ::core::ffi::c_double = 0.;
let mut nomincind: ::core::ffi::c_double = 0.;
let mut sinnomincangle: ::core::ffi::c_double = 0.;
let mut cosnomincangle: ::core::ffi::c_double = 0.;
let mut bperp: ::core::ffi::c_double = 0.;
let mut baseline: ::core::ffi::c_double = 0.;
let mut baselineangle: ::core::ffi::c_double = 0.;
let mut lambda: ::core::ffi::c_double = 0.;
let mut lookangle: ::core::ffi::c_double = 0.;
let mut dzlay: ::core::ffi::c_double = 0.;
let mut dzei: ::core::ffi::c_double = 0.;
let mut dzr0: ::core::ffi::c_double = 0.;
let mut dzrcrit: ::core::ffi::c_double = 0.;
let mut dzeimin: ::core::ffi::c_double = 0.;
let mut dphilaypeak: ::core::ffi::c_double = 0.;
let mut dzrhomax: ::core::ffi::c_double = 0.;
let mut azdzfactor: ::core::ffi::c_double = 0.;
let mut dzeifactor: ::core::ffi::c_double = 0.;
let mut dzeiweight: ::core::ffi::c_double = 0.;
let mut dzlayfactor: ::core::ffi::c_double = 0.;
let mut avgei: ::core::ffi::c_double = 0.;
let mut eicrit: ::core::ffi::c_double = 0.;
let mut layminei: ::core::ffi::c_double = 0.;
let mut laywidth: ::core::ffi::c_double = 0.;
let mut slope1: ::core::ffi::c_double = 0.;
let mut const1: ::core::ffi::c_double = 0.;
let mut slope2: ::core::ffi::c_double = 0.;
let mut const2: ::core::ffi::c_double = 0.;
let mut rho: ::core::ffi::c_double = 0.;
let mut rho0: ::core::ffi::c_double = 0.;
let mut rhomin: ::core::ffi::c_double = 0.;
let mut drho: ::core::ffi::c_double = 0.;
let mut rhopow: ::core::ffi::c_double = 0.;
let mut sigsqrho: ::core::ffi::c_double = 0.;
let mut sigsqrhoconst: ::core::ffi::c_double = 0.;
let mut sigsqei: ::core::ffi::c_double = 0.;
let mut sigsqlay: ::core::ffi::c_double = 0.;
let mut glay: ::core::ffi::c_double = 0.;
let mut costscale: ::core::ffi::c_double = 0.;
let mut ambiguityheight: ::core::ffi::c_double = 0.;
let mut ztoshort: ::core::ffi::c_double = 0.;
let mut ztoshortsq: ::core::ffi::c_double = 0.;
let mut nshortcycle: ::core::ffi::c_double = 0.;
let mut midrangeambight: ::core::ffi::c_double = 0.;
let mut ei: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut dpsi: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut avgdpsi: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut dzrcrittable: *mut ::core::ffi::c_float =
::core::ptr::null_mut::<::core::ffi::c_float>();
let mut dzrhomaxtable: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut costs: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut rowcost: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut colcost: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut noshadow: ::core::ffi::c_schar = 0;
let mut nolayover: ::core::ffi::c_schar = 0;
costs = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut costT>() as ::core::ffi::c_int,
::core::mem::size_of::<costT>() as size_t,
) as *mut *mut costT;
rowcost = costs;
colcost = costs.offset((nrow - 1 as ::core::ffi::c_long) as isize) as *mut *mut costT;
rho0 = (*params).rhosconst1 / (*params).ncorrlooks + (*params).rhosconst2;
rhomin = (*params).rhominfactor * rho0;
rhopow = 2 as ::core::ffi::c_int as ::core::ffi::c_double * (*params).cstd1
+ (*params).cstd2 * log((*params).ncorrlooks)
+ (*params).cstd3 * (*params).ncorrlooks;
sigsqshortmin = (*params).sigsqshortmin;
kperpdpsi = (*params).kperpdpsi;
kpardpsi = (*params).kpardpsi;
dr = (*params).dr;
nearrange = (*params).nearrange + dr * (*tileparams).firstcol as ::core::ffi::c_double;
drho = (*params).drho;
nrho = floor((1 as ::core::ffi::c_int as ::core::ffi::c_double - rhomin) / drho)
as ::core::ffi::c_long
+ 1 as ::core::ffi::c_long;
nshortcycle = (*params).nshortcycle as ::core::ffi::c_double;
layminei = (*params).layminei;
laywidth = (*params).laywidth as ::core::ffi::c_double;
azdzfactor = (*params).azdzfactor;
dzeifactor = (*params).dzeifactor;
dzeiweight = (*params).dzeiweight;
dzeimin = (*params).dzeimin;
dzlayfactor = (*params).dzlayfactor;
sigsqei = (*params).sigsqei;
lambda = (*params).lambda;
noshadow = ((*params).shadow == 0) as ::core::ffi::c_int as ::core::ffi::c_schar;
a = (*params).orbitradius;
re = (*params).earthradius;
fprintf(
sp2,
b"Despeckling intensity image\n\0" as *const u8 as *const ::core::ffi::c_char,
);
ei = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
Despeckle(pwr, &raw mut ei, nrow, ncol);
Free2DArray(
pwr as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
fprintf(
sp2,
b"Normalizing intensity\n\0" as *const u8 as *const ::core::ffi::c_char,
);
RemoveMean(ei, nrow, ncol, (*params).krowei, (*params).kcolei);
if strlen(&raw mut (*outfiles).eifile as *mut ::core::ffi::c_char) != 0 {
Write2DArray(
ei as *mut *mut ::core::ffi::c_void,
&raw mut (*outfiles).eifile as *mut ::core::ffi::c_char,
nrow,
ncol,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
}
slantrange = nearrange + (ncol / 2 as ::core::ffi::c_long) as ::core::ffi::c_double * dr;
sinnomincangle = sin(acos(
(a * a - slantrange * slantrange - re * re)
/ (2 as ::core::ffi::c_int as ::core::ffi::c_double * slantrange * re),
));
lookangle = asin(re / a * sinnomincangle);
if (*params).bperp != 0. {
if (*params).bperp > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
(*params).baselineangle = lookangle;
} else {
(*params).baselineangle = lookangle + PI;
}
(*params).baseline = fabs((*params).bperp);
}
if (*params).transmitmode as ::core::ffi::c_int == SINGLEANTTRANSMIT {
(*params).baseline /= 2.0f64;
}
baseline = (*params).baseline;
baselineangle = (*params).baselineangle;
dzrcrittable = BuildDZRCritLookupTable(
&raw mut nominc0,
&raw mut dnominc,
&raw mut nominctablesize,
tileparams,
params,
);
dzrhomaxtable = BuildDZRhoMaxLookupTable(
nominc0,
dnominc,
nominctablesize,
rhomin,
drho,
nrho,
params,
);
bperp = baseline * cos(lookangle - baselineangle);
midrangeambight = fabs(
lambda * slantrange * sinnomincangle
/ (2 as ::core::ffi::c_int as ::core::ffi::c_double * bperp),
);
costscale = (*params).costscale * fabs((*params).costscaleambight / midrangeambight);
glay = -costscale * log((*params).layconst);
dpsi = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
avgdpsi = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
fprintf(
sp2,
b"Building range cost arrays\n\0" as *const u8 as *const ::core::ffi::c_char,
);
CalcWrappedRangeDiffs(dpsi, avgdpsi, wrappedphase, kperpdpsi, kpardpsi, nrow, ncol);
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
slantrange = nearrange + col as ::core::ffi::c_double * dr;
cosnomincangle = (a * a - slantrange * slantrange - re * re)
/ (2 as ::core::ffi::c_int as ::core::ffi::c_double * slantrange * re);
nomincangle = acos(cosnomincangle);
sinnomincangle = sin(nomincangle);
lookangle = asin(re / a * sinnomincangle);
dzr0 = -dr * cosnomincangle;
bperp = baseline * cos(lookangle - baselineangle);
ambiguityheight = -(lambda * slantrange * sinnomincangle)
/ (2 as ::core::ffi::c_int as ::core::ffi::c_double * bperp);
sigsqrhoconst = 2.0f64 * ambiguityheight * ambiguityheight / 12.0f64;
ztoshort = nshortcycle / ambiguityheight;
ztoshortsq = ztoshort * ztoshort;
sigsqlay = ambiguityheight * ambiguityheight * (*params).sigsqlayfactor;
nomincind = (nomincangle - nominc0) / dnominc;
dzrcrit = LinInterp1D(dzrcrittable, nomincind, nominctablesize) as ::core::ffi::c_double;
SolveEIModelParams(
&raw mut slope1,
&raw mut slope2,
&raw mut const1,
&raw mut const2,
dzrcrit,
dzr0,
sinnomincangle,
cosnomincangle,
params,
);
eicrit = (dzrcrit - const1) / slope1;
dphilaypeak = (*params).dzlaypeak / ambiguityheight;
row = 0 as ::core::ffi::c_long;
while row < nrow {
if *(*colweight.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
{
MaskCost((*colcost.offset(row as isize)).offset(col as isize) as *mut costT);
} else {
rho = *(*corr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double;
if rho < rhomin {
rho = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
sigsqrho = sigsqrhoconst
* pow(
1 as ::core::ffi::c_int as ::core::ffi::c_double - rho,
rhopow,
);
if *(*ei.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double
> eicrit
{
dzei = (slope2
* *(*ei.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
+ const2)
* dzeifactor;
} else {
dzei = (slope1
* *(*ei.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
+ const1)
* dzeifactor;
}
if noshadow as ::core::ffi::c_int != 0 && dzei < dzeimin {
dzei = dzeimin;
}
dzlay = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
if *(*ei.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double
> layminei
{
iei = 0 as ::core::ffi::c_long;
while (iei as ::core::ffi::c_double) < laywidth {
if *(*ei.offset(row as isize)).offset((col + iei) as isize)
as ::core::ffi::c_double
> eicrit
{
dzlay += slope2
* *(*ei.offset(row as isize)).offset((col + iei) as isize)
as ::core::ffi::c_double
+ const2;
} else {
dzlay += slope1
* *(*ei.offset(row as isize)).offset((col + iei) as isize)
as ::core::ffi::c_double
+ const1;
}
if col + iei > ncol - 2 as ::core::ffi::c_long {
break;
}
iei += 1;
}
}
if dzlay != 0. {
dzlay = (dzlay + iei as ::core::ffi::c_double * (-2.0f64 * dzr0)) * dzlayfactor;
}
if rho > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
dzrhomax = LinInterp2D(
dzrhomaxtable,
nomincind,
(rho - rhomin) / drho,
nominctablesize,
nrho,
) as ::core::ffi::c_double;
if dzrhomax < dzlay {
dzlay = dzrhomax;
}
}
nolayover = TRUE as ::core::ffi::c_schar;
if dzlay != 0. {
if rho > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
(*(*colcost.offset(row as isize)).offset(col as isize)).offset =
(nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- 0.5f64
* (*(*avgdpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
+ dphilaypeak)))
as ::core::ffi::c_short;
} else {
(*(*colcost.offset(row as isize)).offset(col as isize)).offset =
(nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- 0.25f64
* *(*avgdpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- 0.75f64 * dphilaypeak))
as ::core::ffi::c_short;
}
(*(*colcost.offset(row as isize)).offset(col as isize)).sigsq =
((sigsqrho + sigsqei + sigsqlay) * ztoshortsq
/ (costscale
* *(*colweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int
as ::core::ffi::c_double))
as ::core::ffi::c_short;
if ((*(*colcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_long)
< sigsqshortmin
{
(*(*colcost.offset(row as isize)).offset(col as isize)).sigsq =
sigsqshortmin as ::core::ffi::c_short;
}
(*(*colcost.offset(row as isize)).offset(col as isize)).dzmax =
(dzlay * ztoshort) as ::core::ffi::c_short;
(*(*colcost.offset(row as isize)).offset(col as isize)).laycost =
(*(*colweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int as ::core::ffi::c_double
* glay) as ::core::ffi::c_short;
if labs(
(*(*colcost.offset(row as isize)).offset(col as isize)).dzmax
as ::core::ffi::c_long,
) as ::core::ffi::c_double
> floor(sqrt(
((*(*colcost.offset(row as isize)).offset(col as isize)).laycost
as ::core::ffi::c_int
* (*(*colcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_int)
as ::core::ffi::c_double,
))
{
nolayover = FALSE as ::core::ffi::c_schar;
}
}
if nolayover != 0 {
(*(*colcost.offset(row as isize)).offset(col as isize)).sigsq =
((sigsqrho + sigsqei) * ztoshortsq
/ (costscale
* *(*colweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int
as ::core::ffi::c_double))
as ::core::ffi::c_short;
if ((*(*colcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_long)
< sigsqshortmin
{
(*(*colcost.offset(row as isize)).offset(col as isize)).sigsq =
sigsqshortmin as ::core::ffi::c_short;
}
if rho > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
(*(*colcost.offset(row as isize)).offset(col as isize)).offset = (ztoshort
* (ambiguityheight
* (*(*dpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- 0.5f64
* *(*avgdpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double)
- 0.5f64 * dzeiweight * dzei))
as ::core::ffi::c_short;
} else {
(*(*colcost.offset(row as isize)).offset(col as isize)).offset = (ztoshort
* (ambiguityheight
* (*(*dpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- 0.25f64
* *(*avgdpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double)
- 0.75f64 * dzeiweight * dzei))
as ::core::ffi::c_short;
}
(*(*colcost.offset(row as isize)).offset(col as isize)).laycost =
-LARGESHORT as ::core::ffi::c_short;
(*(*colcost.offset(row as isize)).offset(col as isize)).dzmax =
LARGESHORT as ::core::ffi::c_short;
}
if !unwrappedest.is_null() {
let ref mut fresh157 =
(*(*colcost.offset(row as isize)).offset(col as isize)).offset;
*fresh157 = (*fresh157 as ::core::ffi::c_double
+ nshortcycle / TWOPI
* (*(*unwrappedest.offset(row as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
- *(*unwrappedest.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
}
}
row += 1;
}
col += 1;
}
glay += -costscale * log(azdzfactor);
fprintf(
sp2,
b"Building azimuth cost arrays\n\0" as *const u8 as *const ::core::ffi::c_char,
);
CalcWrappedAzDiffs(dpsi, avgdpsi, wrappedphase, kperpdpsi, kpardpsi, nrow, ncol);
col = 0 as ::core::ffi::c_long;
while col < ncol {
slantrange = nearrange + col as ::core::ffi::c_double * dr;
cosnomincangle = (a * a - slantrange * slantrange - re * re)
/ (2 as ::core::ffi::c_int as ::core::ffi::c_double * slantrange * re);
nomincangle = acos(cosnomincangle);
sinnomincangle = sin(nomincangle);
lookangle = asin(re / a * sinnomincangle);
dzr0 = -dr * cosnomincangle;
bperp = baseline * cos(lookangle - baselineangle);
ambiguityheight = -lambda * slantrange * sinnomincangle
/ (2 as ::core::ffi::c_int as ::core::ffi::c_double * bperp);
sigsqrhoconst = 2.0f64 * ambiguityheight * ambiguityheight / 12.0f64;
ztoshort = nshortcycle / ambiguityheight;
ztoshortsq = ztoshort * ztoshort;
sigsqlay = ambiguityheight * ambiguityheight * (*params).sigsqlayfactor;
nomincind = (nomincangle - nominc0) / dnominc;
dzrcrit = LinInterp1D(dzrcrittable, nomincind, nominctablesize) as ::core::ffi::c_double;
SolveEIModelParams(
&raw mut slope1,
&raw mut slope2,
&raw mut const1,
&raw mut const2,
dzrcrit,
dzr0,
sinnomincangle,
cosnomincangle,
params,
);
eicrit = (dzrcrit - const1) / slope1;
dphilaypeak = (*params).dzlaypeak / ambiguityheight;
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
if *(*rowweight.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
{
MaskCost((*rowcost.offset(row as isize)).offset(col as isize) as *mut costT);
} else {
rho = (*(*corr.offset(row as isize)).offset(col as isize)
+ *(*corr.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)) as ::core::ffi::c_double
/ 2.0f64;
if rho < rhomin {
rho = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
sigsqrho = sigsqrhoconst
* pow(
1 as ::core::ffi::c_int as ::core::ffi::c_double - rho,
rhopow,
);
dzei = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
dzlay = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
avgei = (*(*ei.offset(row as isize)).offset(col as isize)
+ *(*ei.offset((row + 1 as ::core::ffi::c_long) as isize)).offset(col as isize))
as ::core::ffi::c_double
/ 2.0f64;
if avgei > layminei {
iei = 0 as ::core::ffi::c_long;
while (iei as ::core::ffi::c_double) < laywidth {
avgei = (*(*ei.offset(row as isize)).offset((col + iei) as isize)
+ *(*ei.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset((col + iei) as isize))
as ::core::ffi::c_double
/ 2.0f64;
if avgei > eicrit {
dzlay += slope2 * avgei + const2;
} else {
dzlay += slope1 * avgei + const1;
}
if col + iei > ncol - 2 as ::core::ffi::c_long {
break;
}
iei += 1;
}
}
if dzlay != 0. {
dzlay = (dzlay + iei as ::core::ffi::c_double * (-2.0f64 * dzr0)) * dzlayfactor;
}
if rho > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
dzrhomax = LinInterp2D(
dzrhomaxtable,
nomincind,
(rho - rhomin) / drho,
nominctablesize,
nrho,
) as ::core::ffi::c_double;
if dzrhomax < dzlay {
dzlay = dzrhomax;
}
}
if rho > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
(*(*rowcost.offset(row as isize)).offset(col as isize)).offset = (nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
- *(*avgdpsi.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
} else {
(*(*rowcost.offset(row as isize)).offset(col as isize)).offset = (nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- 0.5f64
* *(*avgdpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double))
as ::core::ffi::c_short;
}
nolayover = TRUE as ::core::ffi::c_schar;
if dzlay != 0. {
(*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq =
((sigsqrho + sigsqei + sigsqlay) * ztoshortsq
/ (costscale
* *(*rowweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int
as ::core::ffi::c_double))
as ::core::ffi::c_short;
if ((*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_long)
< sigsqshortmin
{
(*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq =
sigsqshortmin as ::core::ffi::c_short;
}
(*(*rowcost.offset(row as isize)).offset(col as isize)).dzmax =
fabs(dzlay * ztoshort) as ::core::ffi::c_short;
(*(*rowcost.offset(row as isize)).offset(col as isize)).laycost =
(*(*rowweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int as ::core::ffi::c_double
* glay) as ::core::ffi::c_short;
if labs(
(*(*rowcost.offset(row as isize)).offset(col as isize)).dzmax
as ::core::ffi::c_long,
) as ::core::ffi::c_double
> floor(sqrt(
((*(*rowcost.offset(row as isize)).offset(col as isize)).laycost
as ::core::ffi::c_int
* (*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_int)
as ::core::ffi::c_double,
))
{
nolayover = FALSE as ::core::ffi::c_schar;
}
}
if nolayover != 0 {
(*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq =
((sigsqrho + sigsqei) * ztoshortsq
/ (costscale
* *(*rowweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int
as ::core::ffi::c_double))
as ::core::ffi::c_short;
if ((*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_long)
< sigsqshortmin
{
(*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq =
sigsqshortmin as ::core::ffi::c_short;
}
(*(*rowcost.offset(row as isize)).offset(col as isize)).laycost =
-LARGESHORT as ::core::ffi::c_short;
(*(*rowcost.offset(row as isize)).offset(col as isize)).dzmax =
LARGESHORT as ::core::ffi::c_short;
}
if !unwrappedest.is_null() {
let ref mut fresh158 =
(*(*rowcost.offset(row as isize)).offset(col as isize)).offset;
*fresh158 = (*fresh158 as ::core::ffi::c_double
+ nshortcycle / TWOPI
* (*(*unwrappedest.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)
- *(*unwrappedest.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
}
}
row += 1;
}
col += 1;
}
Free2DArray(
corr as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
dpsi as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
avgdpsi as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
ei as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
free(dzrcrittable as *mut ::core::ffi::c_void);
Free2DArray(
dzrhomaxtable as *mut *mut ::core::ffi::c_void,
nominctablesize as ::core::ffi::c_uint,
);
return costs as *mut *mut ::core::ffi::c_void;
}
unsafe extern "C" fn BuildStatCostsDefo(
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut mag: *mut *mut ::core::ffi::c_float,
mut unwrappedest: *mut *mut ::core::ffi::c_float,
mut corr: *mut *mut ::core::ffi::c_float,
mut rowweight: *mut *mut ::core::ffi::c_short,
mut colweight: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
) -> *mut *mut ::core::ffi::c_void {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut kperpdpsi: ::core::ffi::c_long = 0;
let mut kpardpsi: ::core::ffi::c_long = 0;
let mut sigsqshortmin: ::core::ffi::c_long = 0;
let mut defomax: ::core::ffi::c_long = 0;
let mut rho: ::core::ffi::c_double = 0.;
let mut rho0: ::core::ffi::c_double = 0.;
let mut rhopow: ::core::ffi::c_double = 0.;
let mut defocorrthresh: ::core::ffi::c_double = 0.;
let mut sigsqcorr: ::core::ffi::c_double = 0.;
let mut sigsqrho: ::core::ffi::c_double = 0.;
let mut sigsqrhoconst: ::core::ffi::c_double = 0.;
let mut glay: ::core::ffi::c_double = 0.;
let mut costscale: ::core::ffi::c_double = 0.;
let mut nshortcycle: ::core::ffi::c_double = 0.;
let mut nshortcyclesq: ::core::ffi::c_double = 0.;
let mut dpsi: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut avgdpsi: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut costs: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut rowcost: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut colcost: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
costs = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut costT>() as ::core::ffi::c_int,
::core::mem::size_of::<costT>() as size_t,
) as *mut *mut costT;
rowcost = costs;
colcost = costs.offset((nrow - 1 as ::core::ffi::c_long) as isize) as *mut *mut costT;
rho0 = (*params).rhosconst1 / (*params).ncorrlooks + (*params).rhosconst2;
defocorrthresh = (*params).defothreshfactor * rho0;
rhopow = 2 as ::core::ffi::c_int as ::core::ffi::c_double * (*params).cstd1
+ (*params).cstd2 * log((*params).ncorrlooks)
+ (*params).cstd3 * (*params).ncorrlooks;
sigsqrhoconst = 2.0f64 / 12.0f64;
sigsqcorr = (*params).sigsqcorr;
sigsqshortmin = (*params).sigsqshortmin;
kperpdpsi = (*params).kperpdpsi;
kpardpsi = (*params).kpardpsi;
costscale = (*params).costscale;
nshortcycle = (*params).nshortcycle as ::core::ffi::c_double;
nshortcyclesq = nshortcycle * nshortcycle;
glay = -costscale * log((*params).defolayconst);
defomax = ceil((*params).defomax * nshortcycle) as ::core::ffi::c_long;
dpsi = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
avgdpsi = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
fprintf(
sp2,
b"Building range cost arrays\n\0" as *const u8 as *const ::core::ffi::c_char,
);
CalcWrappedRangeDiffs(dpsi, avgdpsi, wrappedphase, kperpdpsi, kpardpsi, nrow, ncol);
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
row = 0 as ::core::ffi::c_long;
while row < nrow {
if *(*colweight.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
{
MaskCost((*colcost.offset(row as isize)).offset(col as isize) as *mut costT);
} else {
rho = (*(*corr.offset(row as isize)).offset(col as isize)
+ *(*corr.offset(row as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize))
as ::core::ffi::c_double
/ 2.0f64;
if rho < defocorrthresh {
rho = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
sigsqrho = (sigsqrhoconst
* pow(
1 as ::core::ffi::c_int as ::core::ffi::c_double - rho,
rhopow,
)
+ sigsqcorr)
* nshortcyclesq;
if rho > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
(*(*colcost.offset(row as isize)).offset(col as isize)).offset = (nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
- *(*avgdpsi.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
} else {
(*(*colcost.offset(row as isize)).offset(col as isize)).offset = (nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- 0.5f64
* *(*avgdpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double))
as ::core::ffi::c_short;
}
(*(*colcost.offset(row as isize)).offset(col as isize)).sigsq = (sigsqrho
/ (costscale
* *(*colweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int
as ::core::ffi::c_double))
as ::core::ffi::c_short;
if ((*(*colcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_long)
< sigsqshortmin
{
(*(*colcost.offset(row as isize)).offset(col as isize)).sigsq =
sigsqshortmin as ::core::ffi::c_short;
}
if rho < defocorrthresh {
(*(*colcost.offset(row as isize)).offset(col as isize)).dzmax =
defomax as ::core::ffi::c_short;
(*(*colcost.offset(row as isize)).offset(col as isize)).laycost =
(*(*colweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int as ::core::ffi::c_double
* glay) as ::core::ffi::c_short;
if ((*(*colcost.offset(row as isize)).offset(col as isize)).dzmax
as ::core::ffi::c_int as ::core::ffi::c_double)
< floor(sqrt(
((*(*colcost.offset(row as isize)).offset(col as isize)).laycost
as ::core::ffi::c_int
* (*(*colcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_int)
as ::core::ffi::c_double,
))
{
(*(*colcost.offset(row as isize)).offset(col as isize)).laycost =
-LARGESHORT as ::core::ffi::c_short;
(*(*colcost.offset(row as isize)).offset(col as isize)).dzmax =
LARGESHORT as ::core::ffi::c_short;
}
} else {
(*(*colcost.offset(row as isize)).offset(col as isize)).laycost =
-LARGESHORT as ::core::ffi::c_short;
(*(*colcost.offset(row as isize)).offset(col as isize)).dzmax =
LARGESHORT as ::core::ffi::c_short;
}
}
if !unwrappedest.is_null() {
let ref mut fresh155 =
(*(*colcost.offset(row as isize)).offset(col as isize)).offset;
*fresh155 = (*fresh155 as ::core::ffi::c_double
+ nshortcycle / TWOPI
* (*(*unwrappedest.offset(row as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
- *(*unwrappedest.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
}
row += 1;
}
col += 1;
}
fprintf(
sp2,
b"Building azimuth cost arrays\n\0" as *const u8 as *const ::core::ffi::c_char,
);
CalcWrappedAzDiffs(dpsi, avgdpsi, wrappedphase, kperpdpsi, kpardpsi, nrow, ncol);
col = 0 as ::core::ffi::c_long;
while col < ncol {
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
if *(*rowweight.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
{
MaskCost((*rowcost.offset(row as isize)).offset(col as isize) as *mut costT);
} else {
rho = (*(*corr.offset(row as isize)).offset(col as isize)
+ *(*corr.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)) as ::core::ffi::c_double
/ 2.0f64;
if rho < defocorrthresh {
rho = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
sigsqrho = (sigsqrhoconst
* pow(
1 as ::core::ffi::c_int as ::core::ffi::c_double - rho,
rhopow,
)
+ sigsqcorr)
* nshortcyclesq;
if rho > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
(*(*rowcost.offset(row as isize)).offset(col as isize)).offset = (nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
- *(*avgdpsi.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
} else {
(*(*rowcost.offset(row as isize)).offset(col as isize)).offset = (nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- 0.5f64
* *(*avgdpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double))
as ::core::ffi::c_short;
}
(*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq = (sigsqrho
/ (costscale
* *(*rowweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int
as ::core::ffi::c_double))
as ::core::ffi::c_short;
if ((*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_long)
< sigsqshortmin
{
(*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq =
sigsqshortmin as ::core::ffi::c_short;
}
if rho < defocorrthresh {
(*(*rowcost.offset(row as isize)).offset(col as isize)).dzmax =
defomax as ::core::ffi::c_short;
(*(*rowcost.offset(row as isize)).offset(col as isize)).laycost =
(*(*rowweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int as ::core::ffi::c_double
* glay) as ::core::ffi::c_short;
if ((*(*rowcost.offset(row as isize)).offset(col as isize)).dzmax
as ::core::ffi::c_int as ::core::ffi::c_double)
< floor(sqrt(
((*(*rowcost.offset(row as isize)).offset(col as isize)).laycost
as ::core::ffi::c_int
* (*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_int)
as ::core::ffi::c_double,
))
{
(*(*rowcost.offset(row as isize)).offset(col as isize)).laycost =
-LARGESHORT as ::core::ffi::c_short;
(*(*rowcost.offset(row as isize)).offset(col as isize)).dzmax =
LARGESHORT as ::core::ffi::c_short;
}
} else {
(*(*rowcost.offset(row as isize)).offset(col as isize)).laycost =
-LARGESHORT as ::core::ffi::c_short;
(*(*rowcost.offset(row as isize)).offset(col as isize)).dzmax =
LARGESHORT as ::core::ffi::c_short;
}
}
if !unwrappedest.is_null() {
let ref mut fresh156 =
(*(*rowcost.offset(row as isize)).offset(col as isize)).offset;
*fresh156 = (*fresh156 as ::core::ffi::c_double
+ nshortcycle / TWOPI
* (*(*unwrappedest.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)
- *(*unwrappedest.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
}
row += 1;
}
col += 1;
}
Free2DArray(
corr as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
dpsi as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
avgdpsi as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
return costs as *mut *mut ::core::ffi::c_void;
}
unsafe extern "C" fn BuildStatCostsSmooth(
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut mag: *mut *mut ::core::ffi::c_float,
mut unwrappedest: *mut *mut ::core::ffi::c_float,
mut corr: *mut *mut ::core::ffi::c_float,
mut rowweight: *mut *mut ::core::ffi::c_short,
mut colweight: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
) -> *mut *mut ::core::ffi::c_void {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut kperpdpsi: ::core::ffi::c_long = 0;
let mut kpardpsi: ::core::ffi::c_long = 0;
let mut sigsqshortmin: ::core::ffi::c_long = 0;
let mut rho: ::core::ffi::c_double = 0.;
let mut rho0: ::core::ffi::c_double = 0.;
let mut rhopow: ::core::ffi::c_double = 0.;
let mut defocorrthresh: ::core::ffi::c_double = 0.;
let mut sigsqcorr: ::core::ffi::c_double = 0.;
let mut sigsqrho: ::core::ffi::c_double = 0.;
let mut sigsqrhoconst: ::core::ffi::c_double = 0.;
let mut costscale: ::core::ffi::c_double = 0.;
let mut nshortcycle: ::core::ffi::c_double = 0.;
let mut nshortcyclesq: ::core::ffi::c_double = 0.;
let mut dpsi: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut avgdpsi: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut costs: *mut *mut smoothcostT = ::core::ptr::null_mut::<*mut smoothcostT>();
let mut rowcost: *mut *mut smoothcostT = ::core::ptr::null_mut::<*mut smoothcostT>();
let mut colcost: *mut *mut smoothcostT = ::core::ptr::null_mut::<*mut smoothcostT>();
costs = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut smoothcostT>() as ::core::ffi::c_int,
::core::mem::size_of::<smoothcostT>() as size_t,
) as *mut *mut smoothcostT;
rowcost = costs;
colcost = costs.offset((nrow - 1 as ::core::ffi::c_long) as isize) as *mut *mut smoothcostT;
rho0 = (*params).rhosconst1 / (*params).ncorrlooks + (*params).rhosconst2;
defocorrthresh = (*params).defothreshfactor * rho0;
rhopow = 2 as ::core::ffi::c_int as ::core::ffi::c_double * (*params).cstd1
+ (*params).cstd2 * log((*params).ncorrlooks)
+ (*params).cstd3 * (*params).ncorrlooks;
sigsqrhoconst = 2.0f64 / 12.0f64;
sigsqcorr = (*params).sigsqcorr;
sigsqshortmin = (*params).sigsqshortmin;
kperpdpsi = (*params).kperpdpsi;
kpardpsi = (*params).kpardpsi;
costscale = (*params).costscale;
nshortcycle = (*params).nshortcycle as ::core::ffi::c_double;
nshortcyclesq = nshortcycle * nshortcycle;
dpsi = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
avgdpsi = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
fprintf(
sp2,
b"Building range cost arrays\n\0" as *const u8 as *const ::core::ffi::c_char,
);
CalcWrappedRangeDiffs(dpsi, avgdpsi, wrappedphase, kperpdpsi, kpardpsi, nrow, ncol);
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
row = 0 as ::core::ffi::c_long;
while row < nrow {
if *(*colweight.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
{
MaskSmoothCost(
(*colcost.offset(row as isize)).offset(col as isize) as *mut smoothcostT
);
} else {
rho = (*(*corr.offset(row as isize)).offset(col as isize)
+ *(*corr.offset(row as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize))
as ::core::ffi::c_double
/ 2.0f64;
if rho < defocorrthresh {
rho = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
sigsqrho = (sigsqrhoconst
* pow(
1 as ::core::ffi::c_int as ::core::ffi::c_double - rho,
rhopow,
)
+ sigsqcorr)
* nshortcyclesq;
if rho > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
(*(*colcost.offset(row as isize)).offset(col as isize)).offset = (nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
- *(*avgdpsi.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
} else {
(*(*colcost.offset(row as isize)).offset(col as isize)).offset = (nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- 0.5f64
* *(*avgdpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double))
as ::core::ffi::c_short;
}
(*(*colcost.offset(row as isize)).offset(col as isize)).sigsq = (sigsqrho
/ (costscale
* *(*colweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int
as ::core::ffi::c_double))
as ::core::ffi::c_short;
if ((*(*colcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_long)
< sigsqshortmin
{
(*(*colcost.offset(row as isize)).offset(col as isize)).sigsq =
sigsqshortmin as ::core::ffi::c_short;
}
}
if !unwrappedest.is_null() {
let ref mut fresh149 =
(*(*colcost.offset(row as isize)).offset(col as isize)).offset;
*fresh149 = (*fresh149 as ::core::ffi::c_double
+ nshortcycle / TWOPI
* (*(*unwrappedest.offset(row as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
- *(*unwrappedest.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
}
row += 1;
}
col += 1;
}
fprintf(
sp2,
b"Building azimuth cost arrays\n\0" as *const u8 as *const ::core::ffi::c_char,
);
CalcWrappedAzDiffs(dpsi, avgdpsi, wrappedphase, kperpdpsi, kpardpsi, nrow, ncol);
col = 0 as ::core::ffi::c_long;
while col < ncol {
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
if *(*rowweight.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
{
MaskSmoothCost(
(*rowcost.offset(row as isize)).offset(col as isize) as *mut smoothcostT
);
} else {
rho = (*(*corr.offset(row as isize)).offset(col as isize)
+ *(*corr.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)) as ::core::ffi::c_double
/ 2.0f64;
if rho < defocorrthresh {
rho = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
sigsqrho = (sigsqrhoconst
* pow(
1 as ::core::ffi::c_int as ::core::ffi::c_double - rho,
rhopow,
)
+ sigsqcorr)
* nshortcyclesq;
if rho > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
(*(*rowcost.offset(row as isize)).offset(col as isize)).offset = (nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
- *(*avgdpsi.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
} else {
(*(*rowcost.offset(row as isize)).offset(col as isize)).offset = (nshortcycle
* (*(*dpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- 0.5f64
* *(*avgdpsi.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double))
as ::core::ffi::c_short;
}
(*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq = (sigsqrho
/ (costscale
* *(*rowweight.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int
as ::core::ffi::c_double))
as ::core::ffi::c_short;
if ((*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq
as ::core::ffi::c_long)
< sigsqshortmin
{
(*(*rowcost.offset(row as isize)).offset(col as isize)).sigsq =
sigsqshortmin as ::core::ffi::c_short;
}
}
if !unwrappedest.is_null() {
let ref mut fresh150 =
(*(*rowcost.offset(row as isize)).offset(col as isize)).offset;
*fresh150 = (*fresh150 as ::core::ffi::c_double
+ nshortcycle / TWOPI
* (*(*unwrappedest.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)
- *(*unwrappedest.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double)
as ::core::ffi::c_short;
}
row += 1;
}
col += 1;
}
Free2DArray(
corr as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
dpsi as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
avgdpsi as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
return costs as *mut *mut ::core::ffi::c_void;
}
unsafe extern "C" fn MaskCost(mut costptr: *mut costT) {
(*costptr).laycost = 0 as ::core::ffi::c_short;
(*costptr).offset = (LARGESHORT / 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
(*costptr).dzmax = LARGESHORT as ::core::ffi::c_short;
(*costptr).sigsq = LARGESHORT as ::core::ffi::c_short;
}
unsafe extern "C" fn MaskSmoothCost(mut smoothcostptr: *mut smoothcostT) {
(*smoothcostptr).offset = (LARGESHORT / 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
(*smoothcostptr).sigsq = LARGESHORT as ::core::ffi::c_short;
}
unsafe extern "C" fn MaskPrespecifiedArcCosts(
mut costsptr: *mut *mut ::core::ffi::c_void,
mut weights: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
let mut costs: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut smoothcosts: *mut *mut smoothcostT = ::core::ptr::null_mut::<*mut smoothcostT>();
costs = ::core::ptr::null_mut::<*mut costT>();
smoothcosts = ::core::ptr::null_mut::<*mut smoothcostT>();
if (*params).costmode as ::core::ffi::c_int == TOPO
|| (*params).costmode as ::core::ffi::c_int == DEFO
{
costs = costsptr as *mut *mut costT;
} else if (*params).costmode as ::core::ffi::c_int == SMOOTH {
smoothcosts = costsptr as *mut *mut smoothcostT;
} else {
fprintf(
sp0,
b"illegal cost mode in MaskPrespecifiedArcCosts()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
if *(*weights.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
{
if !costs.is_null() {
MaskCost((*costs.offset(row as isize)).offset(col as isize) as *mut costT);
}
if !smoothcosts.is_null() {
MaskSmoothCost((*smoothcosts.offset(row as isize)).offset(col as isize)
as *mut smoothcostT);
}
}
col += 1;
}
row += 1;
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn GetIntensityAndCorrelation(
mut mag: *mut *mut ::core::ffi::c_float,
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut pwrptr: *mut *mut *mut ::core::ffi::c_float,
mut corrptr: *mut *mut *mut ::core::ffi::c_float,
mut infiles: *mut infileT,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut krowcorr: ::core::ffi::c_long = 0;
let mut kcolcorr: ::core::ffi::c_long = 0;
let mut iclipped: ::core::ffi::c_long = 0;
let mut pwr: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut corr: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut realcomp: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut imagcomp: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut padreal: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut padimag: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut avgreal: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut avgimag: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut pwr1: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut pwr2: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut padpwr1: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut padpwr2: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut avgpwr1: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut avgpwr2: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut rho0: ::core::ffi::c_double = 0.;
let mut rhomin: ::core::ffi::c_double = 0.;
let mut biaseddefaultcorr: ::core::ffi::c_double = 0.;
pwr = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
corr = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
pwr1 = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
pwr2 = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
if strlen(&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char) != 0 {
ReadIntensity(
&raw mut pwr,
&raw mut pwr1,
&raw mut pwr2,
infiles,
linelen,
nlines,
params,
tileparams,
);
} else {
if (*params).costmode as ::core::ffi::c_int == TOPO {
fprintf(
sp1,
b"No brightness file specified. \0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
sp1,
b"Using interferogram magnitude as intensity\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
pwr = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*pwr.offset(row as isize)).offset(col as isize) =
*(*mag.offset(row as isize)).offset(col as isize);
col += 1;
}
row += 1;
}
}
if strlen(&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char) != 0 {
ReadCorrelation(&raw mut corr, infiles, linelen, nlines, tileparams);
} else if !pwr1.is_null()
&& !pwr2.is_null()
&& (*params).havemagnitude as ::core::ffi::c_int != 0
{
fprintf(
sp1,
b"Generating correlation from interferogram and intensity\n\0" as *const u8
as *const ::core::ffi::c_char,
);
krowcorr = (1 as ::core::ffi::c_int as ::core::ffi::c_double
+ 2 as ::core::ffi::c_int as ::core::ffi::c_double
* floor(
(*params).ncorrlooksaz as ::core::ffi::c_double
/ (*params).nlooksaz as ::core::ffi::c_double
/ 2 as ::core::ffi::c_int as ::core::ffi::c_double,
)) as ::core::ffi::c_long;
kcolcorr = (1 as ::core::ffi::c_int as ::core::ffi::c_double
+ 2 as ::core::ffi::c_int as ::core::ffi::c_double
* floor(
(*params).ncorrlooksrange as ::core::ffi::c_double
/ (*params).nlooksrange as ::core::ffi::c_double
/ 2 as ::core::ffi::c_int as ::core::ffi::c_double,
)) as ::core::ffi::c_long;
(*params).ncorrlooks = kcolcorr as ::core::ffi::c_double
* ((*params).dr / (*params).rangeres)
* (krowcorr as ::core::ffi::c_double * ((*params).da / (*params).azres))
* (*params).nlooksother as ::core::ffi::c_double;
fprintf(
sp1,
b" (%.1f equivalent independent looks)\n\0" as *const u8
as *const ::core::ffi::c_char,
(*params).ncorrlooks,
);
realcomp = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
imagcomp = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*realcomp.offset(row as isize)).offset(col as isize) =
(*(*mag.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double
* cos(*(*wrappedphase.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double)) as ::core::ffi::c_float;
*(*imagcomp.offset(row as isize)).offset(col as isize) =
(*(*mag.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double
* sin(*(*wrappedphase.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double)) as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
padreal = MirrorPad(
realcomp,
nrow,
ncol,
(krowcorr - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
(kcolcorr - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
);
padimag = MirrorPad(
imagcomp,
nrow,
ncol,
(krowcorr - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
(kcolcorr - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
);
if padreal == realcomp || padimag == imagcomp {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Correlation averaging box too large for input array size\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
avgreal = realcomp;
BoxCarAvg(avgreal, padreal, nrow, ncol, krowcorr, kcolcorr);
avgimag = imagcomp;
BoxCarAvg(avgimag, padimag, nrow, ncol, krowcorr, kcolcorr);
Free2DArray(
padreal as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
padimag as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
padpwr1 = MirrorPad(
pwr1,
nrow,
ncol,
(krowcorr - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
(kcolcorr - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
);
avgpwr1 = pwr1;
BoxCarAvg(avgpwr1, padpwr1, nrow, ncol, krowcorr, kcolcorr);
padpwr2 = MirrorPad(
pwr2,
nrow,
ncol,
(krowcorr - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
(kcolcorr - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
);
avgpwr2 = pwr2;
BoxCarAvg(avgpwr2, padpwr2, nrow, ncol, krowcorr, kcolcorr);
Free2DArray(
padpwr1 as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
padpwr2 as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
corr = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if *(*avgpwr1.offset(row as isize)).offset(col as isize)
<= 0 as ::core::ffi::c_int as ::core::ffi::c_float
|| *(*avgpwr2.offset(row as isize)).offset(col as isize)
<= 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
*(*corr.offset(row as isize)).offset(col as isize) = 0.0f32;
} else {
*(*corr.offset(row as isize)).offset(col as isize) = sqrt(
((*(*avgreal.offset(row as isize)).offset(col as isize)
* *(*avgreal.offset(row as isize)).offset(col as isize)
+ *(*avgimag.offset(row as isize)).offset(col as isize)
* *(*avgimag.offset(row as isize)).offset(col as isize))
/ (*(*avgpwr1.offset(row as isize)).offset(col as isize)
* *(*avgpwr2.offset(row as isize)).offset(col as isize)))
as ::core::ffi::c_double,
)
as ::core::ffi::c_float;
}
col += 1;
}
row += 1;
}
Free2DArray(
avgreal as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
avgimag as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
avgpwr1 as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
avgpwr2 as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
pwr1 = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
pwr2 = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
} else {
corr = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
fprintf(
sp1,
b"No correlation file specified. Assuming correlation = %g\n\0" as *const u8
as *const ::core::ffi::c_char,
(*params).defaultcorr,
);
rho0 = (*params).rhosconst1 / (*params).ncorrlooks + (*params).rhosconst2;
rhomin = (*params).rhominfactor * rho0;
if (*params).defaultcorr > rhomin {
biaseddefaultcorr = (*params).defaultcorr;
} else {
biaseddefaultcorr = 0.0f64;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*corr.offset(row as isize)).offset(col as isize) =
biaseddefaultcorr as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
}
if strlen(&raw mut (*outfiles).rawcorrdumpfile as *mut ::core::ffi::c_char) != 0 {
Write2DArray(
corr as *mut *mut ::core::ffi::c_void,
&raw mut (*outfiles).rawcorrdumpfile as *mut ::core::ffi::c_char,
nrow,
ncol,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
}
iclipped = 0 as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if IsFinite(*(*corr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double)
== 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"NaN or infinity found in correlation data\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
} else if *(*corr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double
> 1.0f64
{
if *(*corr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double
> 1.001f64
{
iclipped += 1;
}
*(*corr.offset(row as isize)).offset(col as isize) = 1.0f32;
} else if (*(*corr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double)
< 0.0f64
{
if (*(*corr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double)
< -0.001f64
{
iclipped += 1;
}
*(*corr.offset(row as isize)).offset(col as isize) = 0.0f32;
}
col += 1;
}
row += 1;
}
if iclipped != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: %ld illegal correlation values clipped to [0,1]\n\0" as *const u8
as *const ::core::ffi::c_char,
iclipped,
);
}
if strlen(&raw mut (*outfiles).corrdumpfile as *mut ::core::ffi::c_char) != 0 {
Write2DArray(
corr as *mut *mut ::core::ffi::c_void,
&raw mut (*outfiles).corrdumpfile as *mut ::core::ffi::c_char,
nrow,
ncol,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
}
if !pwr1.is_null() {
Free2DArray(
pwr1 as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
}
if !pwr2.is_null() {
Free2DArray(
pwr2 as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
}
if (*params).costmode as ::core::ffi::c_int == DEFO && !pwr.is_null() {
Free2DArray(
pwr as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
pwr = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
}
*pwrptr = pwr;
*corrptr = corr;
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn RemoveMean(
mut ei: *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut krowei: ::core::ffi::c_long,
mut kcolei: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut avgei: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut padei: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
if krowei % 2 as ::core::ffi::c_long == 0 {
krowei += 1;
}
if kcolei % 2 as ::core::ffi::c_long == 0 {
kcolei += 1;
}
avgei = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
padei = MirrorPad(
ei,
nrow,
ncol,
(krowei - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
(kcolei - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
);
if padei == ei {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Intensity-normalization averaging box too large for input array size\nAbort\n\0"
as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
BoxCarAvg(avgei, padei, nrow, ncol, krowei, kcolei);
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if !avgei.is_null() {
*(*ei.offset(row as isize)).offset(col as isize) /=
*(*avgei.offset(row as isize)).offset(col as isize);
}
col += 1;
}
row += 1;
}
Free2DArray(
padei as *mut *mut ::core::ffi::c_void,
(nrow + krowei - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
avgei as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn BuildDZRCritLookupTable(
mut nominc0ptr: *mut ::core::ffi::c_double,
mut dnomincptr: *mut ::core::ffi::c_double,
mut tablesizeptr: *mut ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
mut params: *mut paramT,
) -> *mut ::core::ffi::c_float {
let mut tablesize: ::core::ffi::c_long = 0;
let mut k: ::core::ffi::c_long = 0;
let mut nominc: ::core::ffi::c_double = 0.;
let mut nominc0: ::core::ffi::c_double = 0.;
let mut nomincmax: ::core::ffi::c_double = 0.;
let mut dnominc: ::core::ffi::c_double = 0.;
let mut a: ::core::ffi::c_double = 0.;
let mut re: ::core::ffi::c_double = 0.;
let mut slantrange: ::core::ffi::c_double = 0.;
let mut dzrcrittable: *mut ::core::ffi::c_float =
::core::ptr::null_mut::<::core::ffi::c_float>();
a = (*params).orbitradius;
re = (*params).earthradius;
slantrange =
(*params).nearrange + (*params).dr * (*tileparams).firstcol as ::core::ffi::c_double;
nominc0 = acos(
(a * a - slantrange * slantrange - re * re)
/ (2 as ::core::ffi::c_int as ::core::ffi::c_double * slantrange * re),
);
slantrange += (*params).dr * (*tileparams).ncol as ::core::ffi::c_double;
nomincmax = acos(
(a * a - slantrange * slantrange - re * re)
/ (2 as ::core::ffi::c_int as ::core::ffi::c_double * slantrange * re),
);
if IsFinite(nominc0) == 0 || IsFinite(nomincmax) == 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Geometry error detected. Check altitude, near range, and earth radius parameters\nAbort\n\0"
as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
dnominc = (*params).dnomincangle;
tablesize =
floor((nomincmax - nominc0) / dnominc) as ::core::ffi::c_long + 1 as ::core::ffi::c_long;
dzrcrittable = MAlloc(
(tablesize as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as size_t),
) as *mut ::core::ffi::c_float;
nominc = nominc0;
k = 0 as ::core::ffi::c_long;
while k < tablesize {
*dzrcrittable.offset(k as isize) =
SolveDZRCrit(sin(nominc), cos(nominc), params, (*params).threshold)
as ::core::ffi::c_float;
nominc += dnominc;
if nominc > PI / 2.0f64 {
nominc -= dnominc;
}
k += 1;
}
*nominc0ptr = nominc;
*dnomincptr = dnominc;
*tablesizeptr = tablesize;
return dzrcrittable;
}
unsafe extern "C" fn SolveDZRCrit(
mut sinnomincangle: ::core::ffi::c_double,
mut cosnomincangle: ::core::ffi::c_double,
mut params: *mut paramT,
mut threshold: ::core::ffi::c_double,
) -> ::core::ffi::c_double {
let mut residual: ::core::ffi::c_double = 0.;
let mut thetai: ::core::ffi::c_double = 0.;
let mut kds: ::core::ffi::c_double = 0.;
let mut n_0: ::core::ffi::c_double = 0.;
let mut dr: ::core::ffi::c_double = 0.;
let mut dzr: ::core::ffi::c_double = 0.;
let mut dx: ::core::ffi::c_double = 0.;
let mut costhetai: ::core::ffi::c_double = 0.;
let mut cos2thetai: ::core::ffi::c_double = 0.;
let mut step: ::core::ffi::c_double = 0.;
let mut dzrcritfactor: ::core::ffi::c_double = 0.;
let mut diffuse: ::core::ffi::c_double = 0.;
let mut specular: ::core::ffi::c_double = 0.;
let mut i: ::core::ffi::c_long = 0;
kds = (*params).kds;
n_0 = (*params).specularexp;
dr = (*params).dr;
dzrcritfactor = (*params).dzrcritfactor;
thetai = PI / 4 as ::core::ffi::c_int as ::core::ffi::c_double;
step = PI / 4 as ::core::ffi::c_int as ::core::ffi::c_double - 1e-6f64;
i = 0 as ::core::ffi::c_long;
loop {
cos2thetai = cos(2 as ::core::ffi::c_int as ::core::ffi::c_double * thetai);
if cos2thetai < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
cos2thetai = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
diffuse = dzrcritfactor * kds * cos(thetai);
specular = pow(cos2thetai, n_0);
residual = diffuse - specular;
if fabs(residual) < threshold * diffuse {
break;
}
if residual < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
thetai += step;
} else {
thetai -= step;
}
step /= 2.0f64;
i += 1;
if i > MAXITERATION as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Couldn't find critical incidence angle \0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
sp0,
b"(check scattering parameters)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
}
costhetai = cos(thetai);
dzr = (*params).initdzr;
step = dzr + dr * cosnomincangle - 1e-2f64;
i = 0 as ::core::ffi::c_long;
loop {
dx = (dr + dzr * cosnomincangle) / sinnomincangle;
residual =
costhetai - (dzr * sinnomincangle + dx * cosnomincangle) / sqrt(dzr * dzr + dx * dx);
if fabs(residual) < threshold * costhetai {
return dzr;
}
if residual < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
dzr -= step;
} else {
dzr += step;
}
step /= 2.0f64;
i += 1;
if i > MAXITERATION as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Couldn't find critical slope \0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
sp0,
b"(check geometry parameters)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
}
}
unsafe extern "C" fn SolveEIModelParams(
mut slope1ptr: *mut ::core::ffi::c_double,
mut slope2ptr: *mut ::core::ffi::c_double,
mut const1ptr: *mut ::core::ffi::c_double,
mut const2ptr: *mut ::core::ffi::c_double,
mut dzrcrit: ::core::ffi::c_double,
mut dzr0: ::core::ffi::c_double,
mut sinnomincangle: ::core::ffi::c_double,
mut cosnomincangle: ::core::ffi::c_double,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut slope1: ::core::ffi::c_double = 0.;
let mut slope2: ::core::ffi::c_double = 0.;
let mut const1: ::core::ffi::c_double = 0.;
let mut const2: ::core::ffi::c_double = 0.;
let mut sloperatio: ::core::ffi::c_double = 0.;
let mut dzr3: ::core::ffi::c_double = 0.;
let mut ei3: ::core::ffi::c_double = 0.;
sloperatio = (*params).kds * (*params).sloperatiofactor;
dzr3 = 15.0f64 * (dzrcrit - dzr0) + dzr0;
ei3 = EIofDZR(dzr3, sinnomincangle, cosnomincangle, params)
/ EIofDZR(
0 as ::core::ffi::c_int as ::core::ffi::c_double,
sinnomincangle,
cosnomincangle,
params,
);
const1 = dzr0;
slope2 = (sloperatio * (dzrcrit - const1) - dzrcrit + dzr3) / ei3;
slope1 = slope2 / sloperatio;
const2 = dzr3 - slope2 * ei3;
*slope1ptr = slope1;
*slope2ptr = slope2;
*const1ptr = const1;
*const2ptr = const2;
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn EIofDZR(
mut dzr: ::core::ffi::c_double,
mut sinnomincangle: ::core::ffi::c_double,
mut cosnomincangle: ::core::ffi::c_double,
mut params: *mut paramT,
) -> ::core::ffi::c_double {
let mut dr: ::core::ffi::c_double = 0.;
let mut da: ::core::ffi::c_double = 0.;
let mut dx: ::core::ffi::c_double = 0.;
let mut kds: ::core::ffi::c_double = 0.;
let mut n_0: ::core::ffi::c_double = 0.;
let mut dzr0: ::core::ffi::c_double = 0.;
let mut projarea: ::core::ffi::c_double = 0.;
let mut costhetai: ::core::ffi::c_double = 0.;
let mut cos2thetai: ::core::ffi::c_double = 0.;
let mut sigma0: ::core::ffi::c_double = 0.;
dr = (*params).dr;
da = (*params).da;
dx = dr / sinnomincangle + dzr * cosnomincangle / sinnomincangle;
kds = (*params).kds;
n_0 = (*params).specularexp;
dzr0 = -dr * cosnomincangle;
projarea = da * fabs((dzr - dzr0) / sinnomincangle);
costhetai = projarea / sqrt(dzr * dzr * da * da + da * da * dx * dx);
if costhetai > SQRTHALF {
cos2thetai = 2 as ::core::ffi::c_int as ::core::ffi::c_double * costhetai * costhetai
- 1 as ::core::ffi::c_int as ::core::ffi::c_double;
sigma0 = kds * costhetai + pow(cos2thetai, n_0);
} else {
sigma0 = kds * costhetai;
}
return sigma0 * projarea;
}
unsafe extern "C" fn BuildDZRhoMaxLookupTable(
mut nominc0: ::core::ffi::c_double,
mut dnominc: ::core::ffi::c_double,
mut nominctablesize: ::core::ffi::c_long,
mut rhomin: ::core::ffi::c_double,
mut drho: ::core::ffi::c_double,
mut nrho: ::core::ffi::c_long,
mut params: *mut paramT,
) -> *mut *mut ::core::ffi::c_float {
let mut krho: ::core::ffi::c_long = 0;
let mut knominc: ::core::ffi::c_long = 0;
let mut nominc: ::core::ffi::c_double = 0.;
let mut rho: ::core::ffi::c_double = 0.;
let mut dzrhomaxtable: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
dzrhomaxtable = Get2DMem(
nominctablesize as ::core::ffi::c_int,
nrho as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
nominc = nominc0;
knominc = 0 as ::core::ffi::c_long;
while knominc < nominctablesize {
rho = rhomin;
krho = 0 as ::core::ffi::c_long;
while krho < nrho {
*(*dzrhomaxtable.offset(knominc as isize)).offset(krho as isize) =
CalcDZRhoMax(rho, nominc, params, (*params).threshold) as ::core::ffi::c_float;
rho += drho;
krho += 1;
}
nominc += dnominc;
knominc += 1;
}
return dzrhomaxtable;
}
unsafe extern "C" fn CalcDZRhoMax(
mut rho: ::core::ffi::c_double,
mut nominc: ::core::ffi::c_double,
mut params: *mut paramT,
mut threshold: ::core::ffi::c_double,
) -> ::core::ffi::c_double {
let mut i: ::core::ffi::c_long = 0;
let mut dx: ::core::ffi::c_double = 0.;
let mut dr: ::core::ffi::c_double = 0.;
let mut dz: ::core::ffi::c_double = 0.;
let mut dzstep: ::core::ffi::c_double = 0.;
let mut rhos: ::core::ffi::c_double = 0.;
let mut sintheta: ::core::ffi::c_double = 0.;
let mut costheta: ::core::ffi::c_double = 0.;
let mut numerator: ::core::ffi::c_double = 0.;
let mut a: ::core::ffi::c_double = 0.;
let mut re: ::core::ffi::c_double = 0.;
let mut bperp: ::core::ffi::c_double = 0.;
let mut slantrange: ::core::ffi::c_double = 0.;
let mut lookangle: ::core::ffi::c_double = 0.;
let mut costhetairsq: ::core::ffi::c_double = 0.;
let mut rhosfactor: ::core::ffi::c_double = 0.;
let mut residual: ::core::ffi::c_double = 0.;
i = 0 as ::core::ffi::c_long;
dr = (*params).dr;
costheta = cos(nominc);
sintheta = sin(nominc);
dzstep = (*params).initdzstep;
a = (*params).orbitradius;
re = (*params).earthradius;
lookangle = asin(re / a * sintheta);
bperp = (*params).baseline * cos(lookangle - (*params).baselineangle);
slantrange = sqrt(
a * a + re * re
- 2 as ::core::ffi::c_int as ::core::ffi::c_double * a * re * cos(nominc - lookangle),
);
rhosfactor = 2.0f64 * fabs(bperp) * (*params).rangeres / ((*params).lambda * slantrange);
if rho >= 1.0f64 {
return -dr * costheta;
} else if rho <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
return 1.0e35f64;
}
dz = -dr * costheta;
rhos = 1.0f64;
while rhos > rho {
dz += dzstep;
dx = (dr + dz * costheta) / sintheta;
numerator = dz * sintheta + dx * costheta;
costhetairsq = numerator * numerator / (dz * dz + dx * dx);
rhos = 1 as ::core::ffi::c_int as ::core::ffi::c_double
- rhosfactor
* sqrt(
costhetairsq
/ (1 as ::core::ffi::c_int as ::core::ffi::c_double - costhetairsq),
);
if rhos < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
rhos = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
if dz > BIGGESTDZRHOMAX {
return 10000.0f64;
}
}
loop {
residual = rhos - rho;
if !(fabs(residual) > threshold * rho) {
break;
}
dzstep /= 2.0f64;
if residual < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
dz -= dzstep;
} else {
dz += dzstep;
}
dx = (dr + dz * costheta) / sintheta;
numerator = dz * sintheta + dx * costheta;
costhetairsq = numerator * numerator / (dz * dz + dx * dx);
rhos = 1 as ::core::ffi::c_int as ::core::ffi::c_double
- rhosfactor
* sqrt(
costhetairsq
/ (1 as ::core::ffi::c_int as ::core::ffi::c_double - costhetairsq),
);
if rhos < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
rhos = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
i += 1;
if i > MAXITERATION as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Couldn't find slope for correlation of %f\n\0" as *const u8
as *const ::core::ffi::c_char,
rho,
);
fprintf(
sp0,
b"(check geometry and spatial decorrelation parameters)\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(sp0, b"Abort\n\0" as *const u8 as *const ::core::ffi::c_char);
exit(ABNORMAL_EXIT);
}
}
return dz;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostTopo(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
let mut idz1: ::core::ffi::c_long = 0;
let mut idz2pos: ::core::ffi::c_long = 0;
let mut idz2neg: ::core::ffi::c_long = 0;
let mut cost1: ::core::ffi::c_long = 0;
let mut nflowsq: ::core::ffi::c_long = 0;
let mut poscost: ::core::ffi::c_long = 0;
let mut negcost: ::core::ffi::c_long = 0;
let mut nshortcycle: ::core::ffi::c_long = 0;
let mut layfalloffconst: ::core::ffi::c_long = 0;
let mut offset: ::core::ffi::c_long = 0;
let mut sigsq: ::core::ffi::c_long = 0;
let mut laycost: ::core::ffi::c_long = 0;
let mut dzmax: ::core::ffi::c_long = 0;
let mut cost: *mut costT = ::core::ptr::null_mut::<costT>();
cost =
(*(costs as *mut *mut costT).offset(arcrow as isize)).offset(arccol as isize) as *mut costT;
offset = (*cost).offset as ::core::ffi::c_long;
sigsq = (*cost).sigsq as ::core::ffi::c_long;
dzmax = (*cost).dzmax as ::core::ffi::c_long;
laycost = (*cost).laycost as ::core::ffi::c_long;
if sigsq == LARGESHORT as ::core::ffi::c_long {
*poscostptr = 0 as ::core::ffi::c_long;
*negcostptr = 0 as ::core::ffi::c_long;
return;
}
nshortcycle = (*params).nshortcycle;
layfalloffconst = (*params).layfalloffconst as ::core::ffi::c_long;
if arcrow < nrow - 1 as ::core::ffi::c_long {
idz1 = labs(flow * nshortcycle + offset);
idz2pos = labs((flow + nflow) * nshortcycle + offset);
idz2neg = labs((flow - nflow) * nshortcycle + offset);
} else if dzmax < 0 as ::core::ffi::c_long {
dzmax *= -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
idz1 = -(flow * nshortcycle + offset);
idz2pos = -((flow + nflow) * nshortcycle + offset);
idz2neg = -((flow - nflow) * nshortcycle + offset);
} else {
idz1 = flow * nshortcycle + offset;
idz2pos = (flow + nflow) * nshortcycle + offset;
idz2neg = (flow - nflow) * nshortcycle + offset;
}
if idz1 > dzmax {
idz1 -= dzmax;
cost1 = idz1 * idz1 / (layfalloffconst * sigsq) + laycost;
} else {
cost1 = idz1 * idz1 / sigsq;
if laycost != -LARGESHORT as ::core::ffi::c_long
&& idz1 > 0 as ::core::ffi::c_long
&& cost1 > laycost
{
cost1 = laycost;
}
}
if idz2pos > dzmax {
idz2pos -= dzmax;
poscost = idz2pos * idz2pos / (layfalloffconst * sigsq) + laycost - cost1;
} else {
poscost = idz2pos * idz2pos / sigsq;
if laycost != -LARGESHORT as ::core::ffi::c_long
&& idz2pos > 0 as ::core::ffi::c_long
&& poscost > laycost
{
poscost = laycost - cost1;
} else {
poscost -= cost1;
}
}
if idz2neg > dzmax {
idz2neg -= dzmax;
negcost = idz2neg * idz2neg / (layfalloffconst * sigsq) + laycost - cost1;
} else {
negcost = idz2neg * idz2neg / sigsq;
if laycost != -LARGESHORT as ::core::ffi::c_long
&& idz2neg > 0 as ::core::ffi::c_long
&& negcost > laycost
{
negcost = laycost - cost1;
} else {
negcost -= cost1;
}
}
nflowsq = nflow * nflow;
if poscost > 0 as ::core::ffi::c_long {
*poscostptr = ceil(poscost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
*poscostptr = floor(poscost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
}
if negcost > 0 as ::core::ffi::c_long {
*negcostptr = ceil(negcost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
*negcostptr = floor(negcost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostDefo(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
let mut idz1: ::core::ffi::c_long = 0;
let mut idz2pos: ::core::ffi::c_long = 0;
let mut idz2neg: ::core::ffi::c_long = 0;
let mut cost1: ::core::ffi::c_long = 0;
let mut nflowsq: ::core::ffi::c_long = 0;
let mut poscost: ::core::ffi::c_long = 0;
let mut negcost: ::core::ffi::c_long = 0;
let mut nshortcycle: ::core::ffi::c_long = 0;
let mut layfalloffconst: ::core::ffi::c_long = 0;
let mut cost: *mut costT = ::core::ptr::null_mut::<costT>();
cost =
(*(costs as *mut *mut costT).offset(arcrow as isize)).offset(arccol as isize) as *mut costT;
if (*cost).sigsq as ::core::ffi::c_int == LARGESHORT {
*poscostptr = 0 as ::core::ffi::c_long;
*negcostptr = 0 as ::core::ffi::c_long;
return;
}
nshortcycle = (*params).nshortcycle;
layfalloffconst = (*params).layfalloffconst as ::core::ffi::c_long;
idz1 = labs(flow * nshortcycle + (*cost).offset as ::core::ffi::c_long);
idz2pos = labs((flow + nflow) * nshortcycle + (*cost).offset as ::core::ffi::c_long);
idz2neg = labs((flow - nflow) * nshortcycle + (*cost).offset as ::core::ffi::c_long);
if idz1 > (*cost).dzmax as ::core::ffi::c_long {
idz1 -= (*cost).dzmax as ::core::ffi::c_long;
cost1 = idz1 * idz1 / (layfalloffconst * (*cost).sigsq as ::core::ffi::c_long)
+ (*cost).laycost as ::core::ffi::c_long;
} else {
cost1 = idz1 * idz1 / (*cost).sigsq as ::core::ffi::c_long;
if (*cost).laycost as ::core::ffi::c_int != -LARGESHORT
&& cost1 > (*cost).laycost as ::core::ffi::c_long
{
cost1 = (*cost).laycost as ::core::ffi::c_long;
}
}
if idz2pos > (*cost).dzmax as ::core::ffi::c_long {
idz2pos -= (*cost).dzmax as ::core::ffi::c_long;
poscost = idz2pos * idz2pos / (layfalloffconst * (*cost).sigsq as ::core::ffi::c_long)
+ (*cost).laycost as ::core::ffi::c_long
- cost1;
} else {
poscost = idz2pos * idz2pos / (*cost).sigsq as ::core::ffi::c_long;
if (*cost).laycost as ::core::ffi::c_int != -LARGESHORT
&& poscost > (*cost).laycost as ::core::ffi::c_long
{
poscost = (*cost).laycost as ::core::ffi::c_long - cost1;
} else {
poscost -= cost1;
}
}
if idz2neg > (*cost).dzmax as ::core::ffi::c_long {
idz2neg -= (*cost).dzmax as ::core::ffi::c_long;
negcost = idz2neg * idz2neg / (layfalloffconst * (*cost).sigsq as ::core::ffi::c_long)
+ (*cost).laycost as ::core::ffi::c_long
- cost1;
} else {
negcost = idz2neg * idz2neg / (*cost).sigsq as ::core::ffi::c_long;
if (*cost).laycost as ::core::ffi::c_int != -LARGESHORT
&& negcost > (*cost).laycost as ::core::ffi::c_long
{
negcost = (*cost).laycost as ::core::ffi::c_long - cost1;
} else {
negcost -= cost1;
}
}
nflowsq = nflow * nflow;
if poscost > 0 as ::core::ffi::c_long {
*poscostptr = ceil(poscost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
*poscostptr = floor(poscost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
}
if negcost > 0 as ::core::ffi::c_long {
*negcostptr = ceil(negcost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
*negcostptr = floor(negcost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostSmooth(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
let mut idz1: ::core::ffi::c_long = 0;
let mut idz2pos: ::core::ffi::c_long = 0;
let mut idz2neg: ::core::ffi::c_long = 0;
let mut cost1: ::core::ffi::c_long = 0;
let mut nflowsq: ::core::ffi::c_long = 0;
let mut poscost: ::core::ffi::c_long = 0;
let mut negcost: ::core::ffi::c_long = 0;
let mut nshortcycle: ::core::ffi::c_long = 0;
let mut cost: *mut smoothcostT = ::core::ptr::null_mut::<smoothcostT>();
cost = (*(costs as *mut *mut smoothcostT).offset(arcrow as isize)).offset(arccol as isize)
as *mut smoothcostT;
if (*cost).sigsq as ::core::ffi::c_int == LARGESHORT {
*poscostptr = 0 as ::core::ffi::c_long;
*negcostptr = 0 as ::core::ffi::c_long;
return;
}
nshortcycle = (*params).nshortcycle;
idz1 = labs(flow * nshortcycle + (*cost).offset as ::core::ffi::c_long);
idz2pos = labs((flow + nflow) * nshortcycle + (*cost).offset as ::core::ffi::c_long);
idz2neg = labs((flow - nflow) * nshortcycle + (*cost).offset as ::core::ffi::c_long);
cost1 = idz1 * idz1 / (*cost).sigsq as ::core::ffi::c_long;
poscost = idz2pos * idz2pos / (*cost).sigsq as ::core::ffi::c_long - cost1;
negcost = idz2neg * idz2neg / (*cost).sigsq as ::core::ffi::c_long - cost1;
nflowsq = nflow * nflow;
if poscost > 0 as ::core::ffi::c_long {
*poscostptr = ceil(poscost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
*poscostptr = floor(poscost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
}
if negcost > 0 as ::core::ffi::c_long {
*negcostptr = ceil(negcost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
*negcostptr = floor(negcost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostL0(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
if flow != 0 {
if flow + nflow != 0 {
*poscostptr = 0 as ::core::ffi::c_long;
} else {
*poscostptr = -(*(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_int)
as ::core::ffi::c_long;
}
if flow - nflow != 0 {
*negcostptr = 0 as ::core::ffi::c_long;
} else {
*negcostptr = -(*(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_int)
as ::core::ffi::c_long;
}
} else {
*poscostptr = *(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_long;
*negcostptr = *(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_long;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostL1(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
*poscostptr = *(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_long
* (labs(flow + nflow) - labs(flow));
*negcostptr = *(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_long
* (labs(flow - nflow) - labs(flow));
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostL2(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
let mut flow2: ::core::ffi::c_long = 0;
let mut flowsq: ::core::ffi::c_long = 0;
flowsq = flow * flow;
flow2 = flow + nflow;
*poscostptr = *(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_long
* (flow2 * flow2 - flowsq);
flow2 = flow - nflow;
*negcostptr = *(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_long
* (flow2 * flow2 - flowsq);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostLP(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
let mut p: ::core::ffi::c_double = 0.;
let mut flow2: ::core::ffi::c_short = 0;
flow2 = (flow + nflow) as ::core::ffi::c_short;
p = (*params).p;
*poscostptr = LRound(
*(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_int as ::core::ffi::c_double
* (pow(
labs(flow2 as ::core::ffi::c_long) as ::core::ffi::c_double,
p,
) - pow(labs(flow) as ::core::ffi::c_double, p)),
);
flow2 = (flow - nflow) as ::core::ffi::c_short;
*negcostptr = LRound(
*(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_int as ::core::ffi::c_double
* (pow(
labs(flow2 as ::core::ffi::c_long) as ::core::ffi::c_double,
p,
) - pow(labs(flow) as ::core::ffi::c_double, p)),
);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostL0BiDir(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
let mut newflow: ::core::ffi::c_long = 0;
let mut cost0: ::core::ffi::c_long = 0;
if flow > 0 as ::core::ffi::c_long {
cost0 = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_long;
} else if flow < 0 as ::core::ffi::c_long {
cost0 = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_long;
} else {
cost0 = 0 as ::core::ffi::c_long;
}
newflow = flow + nflow;
if newflow > 0 as ::core::ffi::c_long {
*poscostptr = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_long
- cost0;
} else if newflow < 0 as ::core::ffi::c_long {
*poscostptr = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_long
- cost0;
} else {
*poscostptr = -cost0;
}
newflow = flow - nflow;
if newflow > 0 as ::core::ffi::c_long {
*negcostptr = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_long
- cost0;
} else if newflow < 0 as ::core::ffi::c_long {
*negcostptr = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_long
- cost0;
} else {
*negcostptr = -cost0;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostL1BiDir(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
let mut newflow: ::core::ffi::c_long = 0;
let mut cost0: ::core::ffi::c_long = 0;
if flow > 0 as ::core::ffi::c_long {
cost0 = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_long
* flow;
} else {
cost0 = -((*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_int) as ::core::ffi::c_long
* flow;
}
newflow = flow + nflow;
if newflow > 0 as ::core::ffi::c_long {
*poscostptr = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_long
* newflow
- cost0;
} else {
*poscostptr = -((*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_int) as ::core::ffi::c_long
* newflow
- cost0;
}
newflow = flow - nflow;
if newflow > 0 as ::core::ffi::c_long {
*negcostptr = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_long
* newflow
- cost0;
} else {
*negcostptr = -((*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_int) as ::core::ffi::c_long
* newflow
- cost0;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostL2BiDir(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
let mut newflow: ::core::ffi::c_long = 0;
let mut cost0: ::core::ffi::c_long = 0;
if flow > 0 as ::core::ffi::c_long {
cost0 = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_long
* flow
* flow;
} else {
cost0 = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_long
* flow
* flow;
}
newflow = flow + nflow;
if newflow > 0 as ::core::ffi::c_long {
*poscostptr = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_long
* newflow
* newflow
- cost0;
} else {
*poscostptr = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_long
* newflow
* newflow
- cost0;
}
newflow = flow - nflow;
if newflow > 0 as ::core::ffi::c_long {
*negcostptr = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_long
* newflow
* newflow
- cost0;
} else {
*negcostptr = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_long
* newflow
* newflow
- cost0;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostLPBiDir(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
let mut newflow: ::core::ffi::c_long = 0;
let mut p: ::core::ffi::c_double = 0.;
let mut cost0: ::core::ffi::c_double = 0.;
p = (*params).p;
if flow > 0 as ::core::ffi::c_long {
cost0 = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_int as ::core::ffi::c_double
* pow(flow as ::core::ffi::c_double, p);
} else {
cost0 = (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_int as ::core::ffi::c_double
* pow(-flow as ::core::ffi::c_double, p);
}
newflow = flow + nflow;
if newflow > 0 as ::core::ffi::c_long {
*poscostptr = LRound(
(*(*(costs as *mut *mut bidircostT).offset(arcrow as isize)).offset(arccol as isize))
.posweight as ::core::ffi::c_int as ::core::ffi::c_double
* pow(newflow as ::core::ffi::c_double, p)
- cost0,
);
} else {
*poscostptr = LRound(
(*(*(costs as *mut *mut bidircostT).offset(arcrow as isize)).offset(arccol as isize))
.negweight as ::core::ffi::c_int as ::core::ffi::c_double
* pow(newflow as ::core::ffi::c_double, p)
- cost0,
);
}
newflow = flow - nflow;
if newflow > 0 as ::core::ffi::c_long {
*negcostptr = LRound(
(*(*(costs as *mut *mut bidircostT).offset(arcrow as isize)).offset(arccol as isize))
.posweight as ::core::ffi::c_int as ::core::ffi::c_double
* pow(newflow as ::core::ffi::c_double, p)
- cost0,
);
} else {
*negcostptr = LRound(
(*(*(costs as *mut *mut bidircostT).offset(arcrow as isize)).offset(arccol as isize))
.negweight as ::core::ffi::c_int as ::core::ffi::c_double
* pow(newflow as ::core::ffi::c_double, p)
- cost0,
);
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcCostNonGrid(
mut costs: *mut *mut ::core::ffi::c_void,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
mut poscostptr: *mut ::core::ffi::c_long,
mut negcostptr: *mut ::core::ffi::c_long,
) {
let mut xflow: ::core::ffi::c_long = 0;
let mut flowmax: ::core::ffi::c_long = 0;
let mut poscost: ::core::ffi::c_long = 0;
let mut negcost: ::core::ffi::c_long = 0;
let mut nflowsq: ::core::ffi::c_long = 0;
let mut arroffset: ::core::ffi::c_long = 0;
let mut sumsigsqinv: ::core::ffi::c_long = 0;
let mut abscost0: ::core::ffi::c_long = 0;
let mut costarr: *mut ::core::ffi::c_long = ::core::ptr::null_mut::<::core::ffi::c_long>();
let mut c1: ::core::ffi::c_double = 0.;
flowmax = (*params).scndryarcflowmax;
costarr = *(*(costs as *mut *mut *mut ::core::ffi::c_long).offset(arcrow as isize))
.offset(arccol as isize);
arroffset = *costarr.offset(0 as ::core::ffi::c_int as isize);
sumsigsqinv =
*costarr.offset((2 as ::core::ffi::c_long * flowmax + 1 as ::core::ffi::c_long) as isize);
if sumsigsqinv == -LARGEINT as ::core::ffi::c_long {
*poscostptr = 0 as ::core::ffi::c_long;
*negcostptr = 0 as ::core::ffi::c_long;
return;
}
xflow = flow + arroffset;
if xflow > flowmax {
c1 = *costarr.offset(flowmax as isize) as ::core::ffi::c_double
/ flowmax as ::core::ffi::c_double
- (sumsigsqinv * flowmax) as ::core::ffi::c_double;
abscost0 = (sumsigsqinv * xflow + LRound(c1)) * xflow;
} else if xflow < -flowmax {
c1 = *costarr.offset((2 as ::core::ffi::c_long * flowmax) as isize)
as ::core::ffi::c_double
/ flowmax as ::core::ffi::c_double
- (sumsigsqinv * flowmax) as ::core::ffi::c_double;
abscost0 = (sumsigsqinv * xflow + LRound(c1)) * xflow;
} else if xflow > 0 as ::core::ffi::c_long {
abscost0 = *costarr.offset(xflow as isize);
} else if xflow < 0 as ::core::ffi::c_long {
abscost0 = *costarr.offset((flowmax - xflow) as isize);
} else {
abscost0 = 0 as ::core::ffi::c_long;
}
xflow = flow + arroffset + nflow;
if xflow > flowmax {
c1 = *costarr.offset(flowmax as isize) as ::core::ffi::c_double
/ flowmax as ::core::ffi::c_double
- (sumsigsqinv * flowmax) as ::core::ffi::c_double;
poscost = (sumsigsqinv * xflow + LRound(c1)) * xflow - abscost0;
} else if xflow < -flowmax {
c1 = *costarr.offset((2 as ::core::ffi::c_long * flowmax) as isize)
as ::core::ffi::c_double
/ flowmax as ::core::ffi::c_double
- (sumsigsqinv * flowmax) as ::core::ffi::c_double;
poscost = (sumsigsqinv * xflow + LRound(c1)) * xflow - abscost0;
} else if xflow > 0 as ::core::ffi::c_long {
poscost = *costarr.offset(xflow as isize) - abscost0;
} else if xflow < 0 as ::core::ffi::c_long {
poscost = *costarr.offset((flowmax - xflow) as isize) - abscost0;
} else {
poscost = -abscost0;
}
xflow = flow + arroffset - nflow;
if xflow > flowmax {
c1 = *costarr.offset(flowmax as isize) as ::core::ffi::c_double
/ flowmax as ::core::ffi::c_double
- (sumsigsqinv * flowmax) as ::core::ffi::c_double;
negcost = (sumsigsqinv * xflow + LRound(c1)) * xflow - abscost0;
} else if xflow < -flowmax {
c1 = *costarr.offset((2 as ::core::ffi::c_long * flowmax) as isize)
as ::core::ffi::c_double
/ flowmax as ::core::ffi::c_double
- (sumsigsqinv * flowmax) as ::core::ffi::c_double;
negcost = (sumsigsqinv * xflow + LRound(c1)) * xflow - abscost0;
} else if xflow > 0 as ::core::ffi::c_long {
negcost = *costarr.offset(xflow as isize) - abscost0;
} else if xflow < 0 as ::core::ffi::c_long {
negcost = *costarr.offset((flowmax - xflow) as isize) - abscost0;
} else {
negcost = -abscost0;
}
nflowsq = nflow * nflow;
if poscost > 0 as ::core::ffi::c_long {
*poscostptr = ceil(poscost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
*poscostptr = floor(poscost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
}
if negcost > 0 as ::core::ffi::c_long {
*negcostptr = ceil(negcost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
*negcostptr = floor(negcost as ::core::ffi::c_double / nflowsq as ::core::ffi::c_double)
as ::core::ffi::c_long;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostTopo(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
let mut idz1: ::core::ffi::c_long = 0;
let mut cost1: ::core::ffi::c_long = 0;
let mut dzmax: ::core::ffi::c_long = 0;
let mut cost: *mut costT = ::core::ptr::null_mut::<costT>();
cost =
(*(costs as *mut *mut costT).offset(arcrow as isize)).offset(arccol as isize) as *mut costT;
if (*cost).sigsq as ::core::ffi::c_int == LARGESHORT {
return 0 as ::core::ffi::c_long;
}
if arcrow < nrow - 1 as ::core::ffi::c_long {
idz1 = labs(
*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_long
* (*params).nshortcycle
+ (*cost).offset as ::core::ffi::c_long,
);
dzmax = (*cost).dzmax as ::core::ffi::c_long;
} else {
idz1 = *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_long
* (*params).nshortcycle
+ (*cost).offset as ::core::ffi::c_long;
dzmax = (*cost).dzmax as ::core::ffi::c_long;
if dzmax < 0 as ::core::ffi::c_long {
idz1 *= -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
dzmax *= -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
}
}
if idz1 > dzmax {
idz1 -= dzmax;
cost1 = ((idz1 * idz1) as ::core::ffi::c_double
/ ((*params).layfalloffconst
* (*cost).sigsq as ::core::ffi::c_int as ::core::ffi::c_double)
+ (*cost).laycost as ::core::ffi::c_int as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
cost1 = idz1 * idz1 / (*cost).sigsq as ::core::ffi::c_long;
if (*cost).laycost as ::core::ffi::c_int != -LARGESHORT
&& idz1 > 0 as ::core::ffi::c_long
&& cost1 > (*cost).laycost as ::core::ffi::c_long
{
cost1 = (*cost).laycost as ::core::ffi::c_long;
}
}
return cost1;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostDefo(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
let mut idz1: ::core::ffi::c_long = 0;
let mut cost1: ::core::ffi::c_long = 0;
let mut cost: *mut costT = ::core::ptr::null_mut::<costT>();
cost =
(*(costs as *mut *mut costT).offset(arcrow as isize)).offset(arccol as isize) as *mut costT;
if (*cost).sigsq as ::core::ffi::c_int == LARGESHORT {
return 0 as ::core::ffi::c_long;
}
idz1 = labs(
*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_long
* (*params).nshortcycle
+ (*cost).offset as ::core::ffi::c_long,
);
if idz1 > (*cost).dzmax as ::core::ffi::c_long {
idz1 -= (*cost).dzmax as ::core::ffi::c_long;
cost1 = ((idz1 * idz1) as ::core::ffi::c_double
/ ((*params).layfalloffconst
* (*cost).sigsq as ::core::ffi::c_int as ::core::ffi::c_double)
+ (*cost).laycost as ::core::ffi::c_int as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
cost1 = idz1 * idz1 / (*cost).sigsq as ::core::ffi::c_long;
if (*cost).laycost as ::core::ffi::c_int != -LARGESHORT
&& cost1 > (*cost).laycost as ::core::ffi::c_long
{
cost1 = (*cost).laycost as ::core::ffi::c_long;
}
}
return cost1;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostSmooth(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
let mut idz1: ::core::ffi::c_long = 0;
let mut cost: *mut smoothcostT = ::core::ptr::null_mut::<smoothcostT>();
cost = (*(costs as *mut *mut smoothcostT).offset(arcrow as isize)).offset(arccol as isize)
as *mut smoothcostT;
if (*cost).sigsq as ::core::ffi::c_int == LARGESHORT {
return 0 as ::core::ffi::c_long;
}
idz1 = labs(
*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_long
* (*params).nshortcycle
+ (*cost).offset as ::core::ffi::c_long,
);
return idz1 * idz1 / (*cost).sigsq as ::core::ffi::c_long;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostL0(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
if *(*flows.offset(arcrow as isize)).offset(arccol as isize) != 0 {
return *(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_long;
} else {
return 0 as ::core::ffi::c_long;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostL1(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
return *(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_long
* labs(*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_long);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostL2(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
return (*(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_int
* (*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int
* *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int))
as ::core::ffi::c_long;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostLP(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
return LRound(
*(*(costs as *mut *mut ::core::ffi::c_short).offset(arcrow as isize))
.offset(arccol as isize) as ::core::ffi::c_int as ::core::ffi::c_double
* pow(
labs(*(*flows.offset(arcrow as isize)).offset(arccol as isize)
as ::core::ffi::c_long) as ::core::ffi::c_double,
(*params).p,
),
);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostL0BiDir(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
if *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int
> 0 as ::core::ffi::c_int
{
return (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize)).offset(arccol as isize))
.posweight as ::core::ffi::c_long;
} else if (*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int)
< 0 as ::core::ffi::c_int
{
return (*(*(costs as *mut *mut bidircostT).offset(arcrow as isize)).offset(arccol as isize))
.negweight as ::core::ffi::c_long;
} else {
return 0 as ::core::ffi::c_long;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostL1BiDir(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
if *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int
> 0 as ::core::ffi::c_int
{
return ((*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_int
* *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int)
as ::core::ffi::c_long;
} else {
return ((*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_int
* -(*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int))
as ::core::ffi::c_long;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostL2BiDir(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
if *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int
> 0 as ::core::ffi::c_int
{
return ((*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.posweight as ::core::ffi::c_int
* (*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int
* *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int))
as ::core::ffi::c_long;
} else {
return ((*(*(costs as *mut *mut bidircostT).offset(arcrow as isize))
.offset(arccol as isize))
.negweight as ::core::ffi::c_int
* (*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int
* *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int))
as ::core::ffi::c_long;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostLPBiDir(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
if *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int
> 0 as ::core::ffi::c_int
{
return LRound(
(*(*(costs as *mut *mut bidircostT).offset(arcrow as isize)).offset(arccol as isize))
.posweight as ::core::ffi::c_int as ::core::ffi::c_double
* pow(
*(*flows.offset(arcrow as isize)).offset(arccol as isize)
as ::core::ffi::c_double,
(*params).p,
),
);
} else {
return LRound(
(*(*(costs as *mut *mut bidircostT).offset(arcrow as isize)).offset(arccol as isize))
.posweight as ::core::ffi::c_int as ::core::ffi::c_double
* pow(
-(*(*flows.offset(arcrow as isize)).offset(arccol as isize)
as ::core::ffi::c_int) as ::core::ffi::c_double,
(*params).p,
),
);
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvalCostNonGrid(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
let mut flow: ::core::ffi::c_long = 0;
let mut xflow: ::core::ffi::c_long = 0;
let mut flowmax: ::core::ffi::c_long = 0;
let mut arroffset: ::core::ffi::c_long = 0;
let mut sumsigsqinv: ::core::ffi::c_long = 0;
let mut costarr: *mut ::core::ffi::c_long = ::core::ptr::null_mut::<::core::ffi::c_long>();
let mut c1: ::core::ffi::c_double = 0.;
flow = *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_long;
flowmax = (*params).scndryarcflowmax;
costarr = *(*(costs as *mut *mut *mut ::core::ffi::c_long).offset(arcrow as isize))
.offset(arccol as isize);
arroffset = *costarr.offset(0 as ::core::ffi::c_int as isize);
sumsigsqinv =
*costarr.offset((2 as ::core::ffi::c_long * flowmax + 1 as ::core::ffi::c_long) as isize);
if sumsigsqinv == -LARGEINT as ::core::ffi::c_long {
return 0 as ::core::ffi::c_long;
}
xflow = flow + arroffset;
if xflow > flowmax {
c1 = *costarr.offset(flowmax as isize) as ::core::ffi::c_double
/ flowmax as ::core::ffi::c_double
- (sumsigsqinv * flowmax) as ::core::ffi::c_double;
return (sumsigsqinv * xflow + LRound(c1)) * xflow;
} else if xflow < -flowmax {
c1 = *costarr.offset((2 as ::core::ffi::c_long * flowmax) as isize)
as ::core::ffi::c_double
/ flowmax as ::core::ffi::c_double
- (sumsigsqinv * flowmax) as ::core::ffi::c_double;
return (sumsigsqinv * xflow + LRound(c1)) * xflow;
} else if xflow > 0 as ::core::ffi::c_long {
return *costarr.offset(xflow as isize);
} else if xflow < 0 as ::core::ffi::c_long {
return *costarr.offset((flowmax - xflow) as isize);
} else {
return 0 as ::core::ffi::c_long;
};
}
unsafe extern "C" fn CalcInitMaxFlow(
mut params: *mut paramT,
mut costs: *mut *mut ::core::ffi::c_void,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
let mut initmaxflow: ::core::ffi::c_long = 0;
let mut arcmaxflow: ::core::ffi::c_long = 0;
if (*params).initmaxflow <= 0 as ::core::ffi::c_long {
if (*params).costmode as ::core::ffi::c_int == NOSTATCOSTS {
(*params).initmaxflow = NOSTATINITMAXFLOW as ::core::ffi::c_long;
} else if (*params).costmode as ::core::ffi::c_int == TOPO
|| (*params).costmode as ::core::ffi::c_int == DEFO
{
initmaxflow = 0 as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
if (*(*(costs as *mut *mut costT).offset(row as isize)).offset(col as isize))
.dzmax as ::core::ffi::c_int
!= LARGESHORT
{
arcmaxflow = ceil(
labs(
(*(*(costs as *mut *mut costT).offset(row as isize))
.offset(col as isize))
.dzmax as ::core::ffi::c_long,
) as ::core::ffi::c_double
/ (*params).nshortcycle as ::core::ffi::c_double
+ (*params).arcmaxflowconst as ::core::ffi::c_double,
) as ::core::ffi::c_long;
if arcmaxflow > initmaxflow {
initmaxflow = arcmaxflow;
}
}
col += 1;
}
row += 1;
}
(*params).initmaxflow = initmaxflow;
} else {
(*params).initmaxflow = DEF_INITMAXFLOW as ::core::ffi::c_long;
}
}
return 0 as ::core::ffi::c_int;
}
pub const PRICE_MAX: ::core::ffi::c_double = 1e30f64;
pub const BIGGEST_FLOW: ::core::ffi::c_int = LARGESHORT;
#[unsafe(no_mangle)]
pub unsafe extern "C" fn cs2mcfparse(
mut residue: *mut *mut ::core::ffi::c_schar,
mut rowcost: *mut *mut ::core::ffi::c_short,
mut colcost: *mut *mut ::core::ffi::c_short,
mut nNrow: ::core::ffi::c_long,
mut nNcol: ::core::ffi::c_long,
mut n_ad: *mut ::core::ffi::c_long,
mut m_ad: *mut ::core::ffi::c_long,
mut nodes_ad: *mut *mut node,
mut arcs_ad: *mut *mut arc,
mut node_min_ad: *mut ::core::ffi::c_long,
mut m_c_ad: *mut ::core::ffi::c_double,
mut cap_ad: *mut *mut ::core::ffi::c_short,
) -> ::core::ffi::c_int {
let mut current_block: u64;
let mut row: ::core::ffi::c_uint = 0;
let mut col: ::core::ffi::c_uint = 0;
let mut dir: ::core::ffi::c_uint = 0;
let mut narcs: ::core::ffi::c_ulong = 0;
let mut nnodes: ::core::ffi::c_ulong = 0;
let mut nodectr: ::core::ffi::c_ulong = 0;
let mut arcctr: ::core::ffi::c_ulong = 0;
let mut nresidues: ::core::ffi::c_ulong = 0;
let mut cumsupply: ::core::ffi::c_long = 0;
let mut temp: ::core::ffi::c_long = 0;
let mut inf_cap: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
let mut n_0: ::core::ffi::c_long = 0;
let mut node_min: ::core::ffi::c_long = 0;
let mut node_max: ::core::ffi::c_long = 0;
let mut arc_first: *mut ::core::ffi::c_long = ::core::ptr::null_mut::<::core::ffi::c_long>();
let mut arc_tail: *mut ::core::ffi::c_long = ::core::ptr::null_mut::<::core::ffi::c_long>();
let mut head: ::core::ffi::c_long = 0;
let mut tail: ::core::ffi::c_long = 0;
let mut i: ::core::ffi::c_long = 0;
let mut m_0: ::core::ffi::c_long = 0;
let mut last: ::core::ffi::c_long = 0;
let mut arc_num: ::core::ffi::c_long = 0;
let mut arc_new_num: ::core::ffi::c_long = 0;
let mut nodes_0: *mut node = ::core::ptr::null_mut::<node>();
let mut head_p: *mut node = ::core::ptr::null_mut::<node>();
let mut ndp: *mut node = ::core::ptr::null_mut::<node>();
let mut in_0: *mut node = ::core::ptr::null_mut::<node>();
let mut jn: *mut node = ::core::ptr::null_mut::<node>();
let mut arcs_0: *mut arc = ::core::ptr::null_mut::<arc>();
let mut arc_current: *mut arc = ::core::ptr::null_mut::<arc>();
let mut arc_new: *mut arc = ::core::ptr::null_mut::<arc>();
let mut arc_tmp: *mut arc = ::core::ptr::null_mut::<arc>();
let mut excess: ::core::ffi::c_long = 0;
let mut low: ::core::ffi::c_long = 0;
let mut acap: ::core::ffi::c_long = 0;
let mut cost: ::core::ffi::c_long = 0;
let mut dcost: ::core::ffi::c_double = 0.;
let mut m_c: ::core::ffi::c_double = 0.;
let mut cap_0: *mut ::core::ffi::c_short = ::core::ptr::null_mut::<::core::ffi::c_short>();
let mut total_p: ::core::ffi::c_double = 0.;
let mut total_n: ::core::ffi::c_double = 0.;
let mut cap_out: ::core::ffi::c_double = 0.;
let mut cap_in: ::core::ffi::c_double = 0.;
let mut no_lines: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
let mut no_alines: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
let mut pos_current: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
let mut err_no: ::core::ffi::c_int = 0;
static mut err_message: [*mut ::core::ffi::c_char; 22] = [
b"more than one problem line\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"wrong number of parameters in the problem line\0" as *const u8
as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
b"it is not a Min-cost problem line\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"bad value of a parameter in the problem line\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"can't obtain enough memory to solve this problem\0" as *const u8
as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
b"can't read problem name\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"problem description must be before node description\0" as *const u8
as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
b"wrong capacity bounds\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"wrong number of parameters in the node line\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"wrong value of parameters in the node line\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"unbalanced problem\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"node descriptions must be before arc descriptions\0" as *const u8
as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
b"too many arcs in the input\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"wrong number of parameters in the arc line\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"wrong value of parameters in the arc line\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"unknown line type in the input\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"read error\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
b"not enough arcs in the input\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"warning: capacities too big - excess overflow possible\0" as *const u8
as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
b"can't read anything from the input file\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
b"warning: infinite capacity replaced by BIGGEST_FLOW\0" as *const u8
as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
];
nnodes = (nNrow * nNcol + 1 as ::core::ffi::c_long) as ::core::ffi::c_ulong;
narcs = (2 as ::core::ffi::c_long
* ((nNrow + 1 as ::core::ffi::c_long) * nNcol + nNrow * (nNcol + 1 as ::core::ffi::c_long)))
as ::core::ffi::c_ulong;
cumsupply = 0 as ::core::ffi::c_long;
nresidues = 0 as ::core::ffi::c_ulong;
fprintf(
sp2,
b"Setting up data structures for cs2 MCF solver\n\0" as *const u8
as *const ::core::ffi::c_char,
);
n_0 = nnodes as ::core::ffi::c_long;
m_0 = narcs as ::core::ffi::c_long;
if n_0 <= 0 as ::core::ffi::c_long || m_0 <= 0 as ::core::ffi::c_long {
err_no = EN4;
} else {
nodes_0 = CAlloc(
(n_0 + 2 as ::core::ffi::c_long) as size_t,
::core::mem::size_of::<node>() as size_t,
) as *mut node;
arcs_0 = CAlloc(
(2 as ::core::ffi::c_long * m_0 + 1 as ::core::ffi::c_long) as size_t,
::core::mem::size_of::<arc>() as size_t,
) as *mut arc;
cap_0 = CAlloc(
(2 as ::core::ffi::c_long * m_0) as size_t,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut ::core::ffi::c_short;
arc_tail = CAlloc(
(2 as ::core::ffi::c_long * m_0) as size_t,
::core::mem::size_of::<::core::ffi::c_long>() as size_t,
) as *mut ::core::ffi::c_long;
arc_first = CAlloc(
(n_0 + 2 as ::core::ffi::c_long) as size_t,
::core::mem::size_of::<::core::ffi::c_long>() as size_t,
) as *mut ::core::ffi::c_long;
in_0 = nodes_0;
while in_0 <= nodes_0.offset(n_0 as isize) {
(*in_0).excess = 0 as excess_t;
in_0 = in_0.offset(1);
}
if nodes_0.is_null() || arcs_0.is_null() || arc_first.is_null() || arc_tail.is_null() {
err_no = EN6;
} else {
arc_current = arcs_0;
node_max = 0 as ::core::ffi::c_long;
node_min = n_0;
m_c = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
total_n = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
total_p = total_n;
ndp = nodes_0;
while ndp < nodes_0.offset(n_0 as isize) {
(*ndp).excess = 0 as excess_t;
ndp = ndp.offset(1);
}
col = 0 as ::core::ffi::c_uint;
while (col as ::core::ffi::c_long) < nNcol {
row = 0 as ::core::ffi::c_uint;
while (row as ::core::ffi::c_long) < nNrow {
if *(*residue.offset(row as isize)).offset(col as isize) != 0 {
i = col as ::core::ffi::c_long * nNrow
+ row as ::core::ffi::c_long
+ 1 as ::core::ffi::c_long;
excess = *(*residue.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_long;
(*nodes_0.offset(i as isize)).excess = excess as excess_t;
if excess > 0 as ::core::ffi::c_long {
total_p += excess as ::core::ffi::c_double;
}
if excess < 0 as ::core::ffi::c_long {
total_n -= excess as ::core::ffi::c_double;
}
nresidues = nresidues.wrapping_add(1);
cumsupply += *(*residue.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_long;
}
row = row.wrapping_add(1);
}
col = col.wrapping_add(1);
}
(*nodes_0.offset(nnodes as isize)).excess = -cumsupply as excess_t;
if cumsupply < 0 as ::core::ffi::c_long {
total_p -= cumsupply as ::core::ffi::c_double;
}
if cumsupply > 0 as ::core::ffi::c_long {
total_n += cumsupply as ::core::ffi::c_double;
}
low = 0 as ::core::ffi::c_long;
acap = ARCUBOUND as ::core::ffi::c_long;
arcctr = 1 as ::core::ffi::c_ulong;
loop {
if !(arcctr
<= (2 as ::core::ffi::c_long * nNrow * nNcol + nNrow + nNcol)
as ::core::ffi::c_ulong)
{
current_block = 3812947724376655173;
break;
}
if arcctr <= (nNrow * (nNcol + 1 as ::core::ffi::c_long)) as ::core::ffi::c_ulong {
nodectr = arcctr;
if nodectr <= (nNrow * nNcol) as ::core::ffi::c_ulong {
tail = nodectr as ::core::ffi::c_long;
} else {
tail = nnodes as ::core::ffi::c_long;
}
if nodectr <= nNrow as ::core::ffi::c_ulong {
head = nnodes as ::core::ffi::c_long;
} else {
head = nodectr.wrapping_sub(nNrow as ::core::ffi::c_ulong)
as ::core::ffi::c_long;
}
cost = *(*rowcost.offset(
nodectr
.wrapping_sub(1 as ::core::ffi::c_ulong)
.wrapping_rem(nNrow as ::core::ffi::c_ulong)
as isize,
))
.offset(
nodectr
.wrapping_sub(1 as ::core::ffi::c_ulong)
.wrapping_div(nNrow as ::core::ffi::c_ulong)
as ::core::ffi::c_int as isize,
) as ::core::ffi::c_long;
} else {
nodectr = arcctr.wrapping_sub(
(nNrow * (nNcol + 1 as ::core::ffi::c_long)) as ::core::ffi::c_ulong,
);
if nodectr
.wrapping_rem((nNrow + 1 as ::core::ffi::c_long) as ::core::ffi::c_ulong)
== 0 as ::core::ffi::c_ulong
{
tail = nnodes as ::core::ffi::c_long;
} else {
tail = (nodectr as ::core::ffi::c_double
- ceil(
nodectr as ::core::ffi::c_double
/ (nNrow as ::core::ffi::c_double + 1.0f64),
)
+ 1 as ::core::ffi::c_int as ::core::ffi::c_double)
as ::core::ffi::c_int
as ::core::ffi::c_long;
}
if nodectr
.wrapping_rem((nNrow + 1 as ::core::ffi::c_long) as ::core::ffi::c_ulong)
== 1 as ::core::ffi::c_ulong
{
head = nnodes as ::core::ffi::c_long;
} else {
head = (nodectr as ::core::ffi::c_double
- ceil(
nodectr as ::core::ffi::c_double
/ (nNrow as ::core::ffi::c_double + 1.0f64),
)) as ::core::ffi::c_int
as ::core::ffi::c_long;
}
cost = *(*colcost.offset(
nodectr
.wrapping_sub(1 as ::core::ffi::c_ulong)
.wrapping_rem(
(nNrow + 1 as ::core::ffi::c_long) as ::core::ffi::c_ulong,
) as isize,
))
.offset(
nodectr
.wrapping_sub(1 as ::core::ffi::c_ulong)
.wrapping_div(
(nNrow + 1 as ::core::ffi::c_long) as ::core::ffi::c_ulong,
) as ::core::ffi::c_int as isize,
) as ::core::ffi::c_long;
}
if tail < 0 as ::core::ffi::c_long
|| tail > n_0
|| head < 0 as ::core::ffi::c_long
|| head > n_0
{
err_no = EN17;
current_block = 5726111239725893261;
break;
} else {
if acap < 0 as ::core::ffi::c_long {
acap = BIGGEST_FLOW as ::core::ffi::c_long;
if inf_cap == 0 {
inf_cap = 1 as ::core::ffi::c_long;
fprintf(
sp0,
b"\ncs2 solver: %s\n\0" as *const u8 as *const ::core::ffi::c_char,
err_message[21 as ::core::ffi::c_int as usize],
);
}
}
if low < 0 as ::core::ffi::c_long || low > acap {
err_no = EN9;
current_block = 5726111239725893261;
break;
} else {
dir = 0 as ::core::ffi::c_uint;
while dir <= 1 as ::core::ffi::c_uint {
if dir != 0 {
temp = tail;
tail = head;
head = temp;
}
let ref mut fresh142 =
*arc_first.offset((tail + 1 as ::core::ffi::c_long) as isize);
*fresh142 += 1;
let ref mut fresh143 =
*arc_first.offset((head + 1 as ::core::ffi::c_long) as isize);
*fresh143 += 1;
in_0 = nodes_0.offset(tail as isize);
jn = nodes_0.offset(head as isize);
dcost = cost as ::core::ffi::c_double;
*arc_tail.offset(pos_current as isize) = tail;
*arc_tail.offset((pos_current + 1 as ::core::ffi::c_long) as isize) =
head;
(*arc_current).head = jn as *mut node_st;
(*arc_current).r_cap = (acap - low) as ::core::ffi::c_short;
*cap_0.offset(pos_current as isize) = acap as ::core::ffi::c_short;
(*arc_current).cost = dcost as ::core::ffi::c_short;
(*arc_current).sister =
arc_current.offset(1 as ::core::ffi::c_int as isize) as *mut arc_st;
let ref mut fresh144 =
(*arc_current.offset(1 as ::core::ffi::c_int as isize)).head;
*fresh144 = nodes_0.offset(tail as isize) as *mut node_st;
(*arc_current.offset(1 as ::core::ffi::c_int as isize)).r_cap =
0 as ::core::ffi::c_short;
*cap_0.offset((pos_current + 1 as ::core::ffi::c_long) as isize) =
0 as ::core::ffi::c_short;
(*arc_current.offset(1 as ::core::ffi::c_int as isize)).cost =
-dcost as ::core::ffi::c_short;
let ref mut fresh145 =
(*arc_current.offset(1 as ::core::ffi::c_int as isize)).sister;
*fresh145 = arc_current as *mut arc_st;
(*in_0).excess -= low;
(*jn).excess += low;
if head < node_min {
node_min = head;
}
if tail < node_min {
node_min = tail;
}
if head > node_max {
node_max = head;
}
if tail > node_max {
node_max = tail;
}
if dcost < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
dcost = -dcost;
}
if dcost > m_c && acap > 0 as ::core::ffi::c_long {
m_c = dcost;
}
no_alines += 1;
arc_current = arc_current.offset(2 as ::core::ffi::c_int as isize);
pos_current += 2 as ::core::ffi::c_long;
dir = dir.wrapping_add(1);
}
arcctr = arcctr.wrapping_add(1);
}
}
}
match current_block {
5726111239725893261 => {}
_ => {
if if total_p - total_n >= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
total_p - total_n
} else {
(-(total_p - total_n) > 0.5f64) as ::core::ffi::c_int
as ::core::ffi::c_double
} != 0.
{
err_no = EN13;
} else {
let ref mut fresh146 = (*nodes_0.offset(node_min as isize)).first;
*fresh146 = arcs_0;
i = node_min + 1 as ::core::ffi::c_long;
while i <= node_max + 1 as ::core::ffi::c_long {
*arc_first.offset(i as isize) +=
*arc_first.offset((i - 1 as ::core::ffi::c_long) as isize);
let ref mut fresh147 = (*nodes_0.offset(i as isize)).first;
*fresh147 = arcs_0.offset(*arc_first.offset(i as isize) as isize);
i += 1;
}
i = node_min;
while i < node_max {
last = (*nodes_0
.offset(i as isize)
.offset(1 as ::core::ffi::c_int as isize))
.first
.offset_from(arcs_0)
as ::core::ffi::c_long;
arc_num = *arc_first.offset(i as isize);
while arc_num < last {
tail = *arc_tail.offset(arc_num as isize);
while tail != i {
arc_new_num = *arc_first.offset(tail as isize);
arc_current = arcs_0.offset(arc_num as isize);
arc_new = arcs_0.offset(arc_new_num as isize);
head_p = (*arc_new).head as *mut node;
(*arc_new).head = (*arc_current).head;
(*arc_current).head = head_p as *mut node_st;
acap =
*cap_0.offset(arc_new_num as isize) as ::core::ffi::c_long;
*cap_0.offset(arc_new_num as isize) =
*cap_0.offset(arc_num as isize);
*cap_0.offset(arc_num as isize) = acap as ::core::ffi::c_short;
acap = (*arc_new).r_cap as ::core::ffi::c_long;
(*arc_new).r_cap = (*arc_current).r_cap;
(*arc_current).r_cap = acap as ::core::ffi::c_short;
dcost = (*arc_new).cost as ::core::ffi::c_double;
(*arc_new).cost = (*arc_current).cost;
(*arc_current).cost = dcost as ::core::ffi::c_short;
if arc_new != (*arc_current).sister {
arc_tmp = (*arc_new).sister as *mut arc;
(*arc_new).sister = (*arc_current).sister;
(*arc_current).sister = arc_tmp as *mut arc_st;
(*(*arc_current).sister).sister =
arc_current as *mut arc_st;
(*(*arc_new).sister).sister = arc_new as *mut arc_st;
}
*arc_tail.offset(arc_num as isize) =
*arc_tail.offset(arc_new_num as isize);
*arc_tail.offset(arc_new_num as isize) = tail;
let ref mut fresh148 = *arc_first.offset(tail as isize);
*fresh148 += 1;
tail = *arc_tail.offset(arc_num as isize);
}
arc_num += 1;
}
i += 1;
}
ndp = nodes_0.offset(node_min as isize);
while ndp <= nodes_0.offset(node_max as isize) {
cap_in = (*ndp).excess as ::core::ffi::c_double;
cap_out = -(*ndp).excess as ::core::ffi::c_double;
arc_current = (*ndp).first;
while arc_current
!= (*ndp.offset(1 as ::core::ffi::c_int as isize)).first
{
arc_num = arc_current.offset_from(arcs_0) as ::core::ffi::c_long;
if *cap_0.offset(arc_num as isize) as ::core::ffi::c_int
> 0 as ::core::ffi::c_int
{
cap_out += *cap_0.offset(arc_num as isize) as ::core::ffi::c_int
as ::core::ffi::c_double;
}
if *cap_0.offset(arc_num as isize) as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
{
cap_in +=
*cap_0.offset((*arc_current).sister.offset_from(arcs_0)
as ::core::ffi::c_long
as isize)
as ::core::ffi::c_int
as ::core::ffi::c_double;
}
arc_current = arc_current.offset(1);
}
ndp = ndp.offset(1);
}
*m_ad = m_0;
*n_ad = node_max - node_min + 1 as ::core::ffi::c_long;
*node_min_ad = node_min;
*nodes_ad = nodes_0.offset(node_min as isize);
*arcs_ad = arcs_0;
*m_c_ad = m_c;
*cap_ad = cap_0;
free(arc_first as *mut ::core::ffi::c_void);
free(arc_tail as *mut ::core::ffi::c_void);
return 0 as ::core::ffi::c_int;
}
}
}
}
}
fprintf(
sp0,
b"\ncs2 solver: line %ld of input - %s\n\0" as *const u8 as *const ::core::ffi::c_char,
no_lines,
err_message[err_no as usize],
);
exit(ABNORMAL_EXIT);
}
pub const EN4: ::core::ffi::c_int = 3 as ::core::ffi::c_int;
pub const EN6: ::core::ffi::c_int = 4 as ::core::ffi::c_int;
pub const EN9: ::core::ffi::c_int = 8 as ::core::ffi::c_int;
pub const EN13: ::core::ffi::c_int = 11 as ::core::ffi::c_int;
pub const EN17: ::core::ffi::c_int = 15 as ::core::ffi::c_int;
pub const UNFEASIBLE: ::core::ffi::c_int = 2 as ::core::ffi::c_int;
pub const ALLOCATION_FAULT: ::core::ffi::c_int = 5 as ::core::ffi::c_int;
pub const PRICE_OFL: ::core::ffi::c_int = 6 as ::core::ffi::c_int;
pub const UPDT_FREQ: ::core::ffi::c_double = 0.4f64;
pub const UPDT_FREQ_S: ::core::ffi::c_int = 30 as ::core::ffi::c_int;
pub const PRICE_OUT_START: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const CUT_OFF_POWER: ::core::ffi::c_double = 0.44f64;
pub const CUT_OFF_COEF: ::core::ffi::c_double = 1.5f64;
pub const CUT_OFF_POWER2: ::core::ffi::c_double = 0.75f64;
pub const CUT_OFF_COEF2: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const CUT_OFF_GAP: ::core::ffi::c_double = 0.8f64;
pub const CUT_OFF_INCREASE: ::core::ffi::c_int = 4 as ::core::ffi::c_int;
pub const TIME_FOR_PRICE_IN1: ::core::ffi::c_int = 2 as ::core::ffi::c_int;
pub const TIME_FOR_PRICE_IN2: ::core::ffi::c_int = 4 as ::core::ffi::c_int;
pub const TIME_FOR_PRICE_IN3: ::core::ffi::c_int = 6 as ::core::ffi::c_int;
pub const EMPTY_PUSH_COEF: ::core::ffi::c_double = 1.0f64;
pub const MAX_CYCLES_CANCELLED: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const START_CYCLE_CANCEL: ::core::ffi::c_int = 100 as ::core::ffi::c_int;
#[unsafe(no_mangle)]
pub static mut dnode: *mut node = ::core::ptr::null::<node>() as *mut node;
#[unsafe(no_mangle)]
pub static mut dnd: node = node_st {
first: ::core::ptr::null::<arc>() as *mut arc,
current: ::core::ptr::null::<arc>() as *mut arc,
suspended: ::core::ptr::null::<arc>() as *mut arc,
price: 0.,
q_next: ::core::ptr::null::<node_st>() as *mut node_st,
b_next: ::core::ptr::null::<node_st>() as *mut node_st,
b_prev: ::core::ptr::null::<node_st>() as *mut node_st,
rank: 0,
excess: 0,
inp: 0,
};
pub const WHITE: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
pub const GREY: ::core::ffi::c_int = 1 as ::core::ffi::c_int;
pub const BLACK: ::core::ffi::c_int = 2 as ::core::ffi::c_int;
#[unsafe(no_mangle)]
pub static mut sa: *mut arc = ::core::ptr::null::<arc>() as *mut arc;
#[unsafe(no_mangle)]
pub static mut sb: *mut arc = ::core::ptr::null::<arc>() as *mut arc;
#[unsafe(no_mangle)]
pub static mut d_cap: ::core::ffi::c_long = 0;
#[unsafe(no_mangle)]
pub static mut n_prscan2: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_bad_relabel: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_refine: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_update: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_scan: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_discharge: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_prefine: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_prscan: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_relabel: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_push: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_bad_pricein: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut n_prscan1: ::core::ffi::c_long = 0 as ::core::ffi::c_long;
#[unsafe(no_mangle)]
pub static mut m: ::core::ffi::c_long = 0;
#[unsafe(no_mangle)]
pub static mut n: ::core::ffi::c_long = 0;
#[unsafe(no_mangle)]
pub static mut cap: *mut ::core::ffi::c_short =
::core::ptr::null::<::core::ffi::c_short>() as *mut ::core::ffi::c_short;
#[unsafe(no_mangle)]
pub static mut excq_first: *mut node = ::core::ptr::null::<node>() as *mut node;
#[unsafe(no_mangle)]
pub static mut excq_last: *mut node = ::core::ptr::null::<node>() as *mut node;
#[unsafe(no_mangle)]
pub static mut sentinel_node: *mut node = ::core::ptr::null::<node>() as *mut node;
#[unsafe(no_mangle)]
pub static mut nodes: *mut node = ::core::ptr::null::<node>() as *mut node;
#[unsafe(no_mangle)]
pub static mut sentinel_arc: *mut arc = ::core::ptr::null::<arc>() as *mut arc;
#[unsafe(no_mangle)]
pub static mut arcs: *mut arc = ::core::ptr::null::<arc>() as *mut arc;
#[unsafe(no_mangle)]
pub static mut l_bucket: *mut bucket = ::core::ptr::null::<bucket>() as *mut bucket;
#[unsafe(no_mangle)]
pub static mut buckets: *mut bucket = ::core::ptr::null::<bucket>() as *mut bucket;
#[unsafe(no_mangle)]
pub static mut linf: ::core::ffi::c_long = 0;
#[unsafe(no_mangle)]
pub static mut dlinf: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut time_for_price_in: ::core::ffi::c_int = 0;
#[unsafe(no_mangle)]
pub static mut low_bound: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut cut_off: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut mmc: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut dn: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut cut_on: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut epsilon: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut cut_off_factor: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut f_scale: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut price_min: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut total_excess: ::core::ffi::c_double = 0.;
#[unsafe(no_mangle)]
pub static mut n_src: ::core::ffi::c_long = 0;
#[unsafe(no_mangle)]
pub static mut n_rel: ::core::ffi::c_long = 0;
#[unsafe(no_mangle)]
pub static mut n_ref: ::core::ffi::c_long = 0;
#[unsafe(no_mangle)]
pub static mut flag_updt: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
#[unsafe(no_mangle)]
pub static mut flag_price: ::core::ffi::c_int = 0 as ::core::ffi::c_int;
#[unsafe(no_mangle)]
pub static mut empty_push_bound: ::core::ffi::c_long = 0;
#[unsafe(no_mangle)]
pub static mut snc_max: ::core::ffi::c_int = 0;
#[unsafe(no_mangle)]
pub static mut d_arc: arc = arc_st {
r_cap: 0,
cost: 0,
head: ::core::ptr::null::<node_st>() as *mut node_st,
sister: ::core::ptr::null::<arc_st>() as *mut arc_st,
};
#[unsafe(no_mangle)]
pub static mut d_node: node = node_st {
first: ::core::ptr::null::<arc>() as *mut arc,
current: ::core::ptr::null::<arc>() as *mut arc,
suspended: ::core::ptr::null::<arc>() as *mut arc,
price: 0.,
q_next: ::core::ptr::null::<node_st>() as *mut node_st,
b_next: ::core::ptr::null::<node_st>() as *mut node_st,
b_prev: ::core::ptr::null::<node_st>() as *mut node_st,
rank: 0,
excess: 0,
inp: 0,
};
#[unsafe(no_mangle)]
pub static mut dummy_node: *mut node = ::core::ptr::null::<node>() as *mut node;
unsafe extern "C" fn err_end(mut cc: ::core::ffi::c_int) {
fprintf(
sp0,
b"\ncs2 solver: Error %d \0" as *const u8 as *const ::core::ffi::c_char,
cc,
);
if cc == ALLOCATION_FAULT {
fprintf(
sp0,
b"(allocation fault)\n\0" as *const u8 as *const ::core::ffi::c_char,
);
} else if cc == UNFEASIBLE {
fprintf(
sp0,
b"(problem infeasible)\n\0" as *const u8 as *const ::core::ffi::c_char,
);
} else if cc == PRICE_OFL {
fprintf(
sp0,
b"(price overflow)\n\0" as *const u8 as *const ::core::ffi::c_char,
);
}
exit(ABNORMAL_EXIT);
}
unsafe extern "C" fn cs_init(
mut n_p: ::core::ffi::c_long,
mut m_p: ::core::ffi::c_long,
mut nodes_p: *mut node,
mut arcs_p: *mut arc,
mut f_sc: ::core::ffi::c_long,
mut max_c: ::core::ffi::c_double,
mut cap_p: *mut ::core::ffi::c_short,
) {
let mut i: *mut node = ::core::ptr::null_mut::<node>();
let mut b: *mut bucket = ::core::ptr::null_mut::<bucket>();
n = n_p;
nodes = nodes_p;
sentinel_node = nodes.offset(n as isize);
m = m_p;
arcs = arcs_p;
sentinel_arc = arcs.offset(m as isize);
cap = cap_p;
f_scale = f_sc as ::core::ffi::c_double;
low_bound = 1.00001f64;
dn = n as ::core::ffi::c_double;
mmc = max_c * dn;
linf = (n as ::core::ffi::c_double * f_scale + 2 as ::core::ffi::c_int as ::core::ffi::c_double)
as ::core::ffi::c_long;
dlinf = linf as ::core::ffi::c_double;
buckets = CAlloc(linf as size_t, ::core::mem::size_of::<bucket>() as size_t) as *mut bucket;
if buckets.is_null() {
err_end(ALLOCATION_FAULT);
}
l_bucket = buckets.offset(linf as isize);
dnode = &raw mut dnd;
b = buckets;
while b != l_bucket {
(*b).p_first = dnode;
b = b.offset(1);
}
epsilon = mmc;
if epsilon < 1 as ::core::ffi::c_int as ::core::ffi::c_double {
epsilon = 1 as ::core::ffi::c_int as ::core::ffi::c_double;
}
price_min = -PRICE_MAX;
i = nodes;
while i != sentinel_node {
(*i).price = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
(*i).suspended = (*i).first;
(*i).q_next = sentinel_node as *mut node_st;
i = i.offset(1);
}
(*sentinel_node).suspended = sentinel_arc;
(*sentinel_node).first = (*sentinel_node).suspended;
cut_off_factor = CUT_OFF_COEF * pow(n as ::core::ffi::c_double, CUT_OFF_POWER);
cut_off_factor = if cut_off_factor > 12 as ::core::ffi::c_int as ::core::ffi::c_double {
cut_off_factor
} else {
12 as ::core::ffi::c_int as ::core::ffi::c_double
};
n_ref = 0 as ::core::ffi::c_long;
flag_price = 0 as ::core::ffi::c_int;
dummy_node = &raw mut d_node;
excq_first = ::core::ptr::null_mut::<node>();
empty_push_bound = (n as ::core::ffi::c_double * EMPTY_PUSH_COEF) as ::core::ffi::c_long;
}
unsafe extern "C" fn up_node_scan(mut i: *mut node) {
let mut j: *mut node = ::core::ptr::null_mut::<node>();
let mut a: *mut arc = ::core::ptr::null_mut::<arc>();
let mut a_stop: *mut arc = ::core::ptr::null_mut::<arc>();
let mut ra: *mut arc = ::core::ptr::null_mut::<arc>();
let mut b_old: *mut bucket = ::core::ptr::null_mut::<bucket>();
let mut b_new: *mut bucket = ::core::ptr::null_mut::<bucket>();
let mut i_rank: ::core::ffi::c_long = 0;
let mut j_rank: ::core::ffi::c_long = 0;
let mut j_new_rank: ::core::ffi::c_long = 0;
let mut rc: ::core::ffi::c_double = 0.;
let mut dr: ::core::ffi::c_double = 0.;
n_scan += 1;
i_rank = (*i).rank;
a = (*i).first;
a_stop = (*i.offset(1 as ::core::ffi::c_int as isize)).suspended;
while a != a_stop {
ra = (*a).sister as *mut arc;
if (*ra).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int {
j = (*a).head as *mut node;
j_rank = (*j).rank;
if j_rank > i_rank {
rc = (*j).price + dn * (*ra).cost as ::core::ffi::c_int as ::core::ffi::c_double
- (*i).price;
if rc < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
j_new_rank = i_rank;
} else {
dr = rc / epsilon;
j_new_rank = if dr < dlinf {
i_rank + dr as ::core::ffi::c_long + 1 as ::core::ffi::c_long
} else {
linf
};
}
if j_rank > j_new_rank {
(*j).rank = j_new_rank;
(*j).current = ra;
if j_rank < linf {
b_old = buckets.offset(j_rank as isize);
if j == (*b_old).p_first {
(*b_old).p_first = (*j).b_next as *mut node;
} else {
(*(*j).b_prev).b_next = (*j).b_next;
(*(*j).b_next).b_prev = (*j).b_prev;
}
}
b_new = buckets.offset(j_new_rank as isize);
(*j).b_next = (*b_new).p_first as *mut node_st;
(*(*b_new).p_first).b_prev = j as *mut node_st;
(*b_new).p_first = j;
}
}
}
a = a.offset(1);
}
(*i).price -= i_rank as ::core::ffi::c_double * epsilon;
(*i).rank = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
}
unsafe extern "C" fn price_update() {
let mut i: *mut node = ::core::ptr::null_mut::<node>();
let mut remain: ::core::ffi::c_double = 0.;
let mut b: *mut bucket = ::core::ptr::null_mut::<bucket>();
let mut dp: ::core::ffi::c_double = 0.;
n_update += 1;
i = nodes;
while i != sentinel_node {
if (*i).excess < 0 as excess_t {
(*i).b_next = (*buckets).p_first as *mut node_st;
(*(*buckets).p_first).b_prev = i as *mut node_st;
(*buckets).p_first = i;
(*i).rank = 0 as ::core::ffi::c_long;
} else {
(*i).rank = linf;
}
i = i.offset(1);
}
remain = total_excess;
if remain < 0.5f64 {
return;
}
b = buckets;
while b != l_bucket {
while (*b).p_first != dnode {
i = (*b).p_first;
(*b).p_first = (*i).b_next as *mut node;
up_node_scan(i);
if !((*i).excess > 0 as excess_t) {
continue;
}
remain -= (*i).excess as ::core::ffi::c_double;
if remain <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
break;
}
}
if remain <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
break;
}
b = b.offset(1);
}
if remain > 0.5f64 {
flag_updt = 1 as ::core::ffi::c_int;
}
dp = b.offset_from(buckets) as ::core::ffi::c_long as ::core::ffi::c_double * epsilon;
i = nodes;
while i != sentinel_node {
if (*i).rank >= 0 as ::core::ffi::c_long {
if (*i).rank < linf {
if i == (*buckets.offset((*i).rank as isize)).p_first {
let ref mut fresh140 = (*buckets.offset((*i).rank as isize)).p_first;
*fresh140 = (*i).b_next as *mut node;
} else {
(*(*i).b_prev).b_next = (*i).b_next;
(*(*i).b_next).b_prev = (*i).b_prev;
}
}
if (*i).price > price_min {
(*i).price -= dp;
}
}
i = i.offset(1);
}
}
unsafe extern "C" fn relabel(mut i: *mut node) -> ::core::ffi::c_int {
let mut a: *mut arc = ::core::ptr::null_mut::<arc>();
let mut a_stop: *mut arc = ::core::ptr::null_mut::<arc>();
let mut a_max: *mut arc = ::core::ptr::null_mut::<arc>();
let mut p_max: ::core::ffi::c_double = 0.;
let mut i_price: ::core::ffi::c_double = 0.;
let mut dp: ::core::ffi::c_double = 0.;
p_max = price_min;
i_price = (*i).price;
a = (*i).current.offset(1 as ::core::ffi::c_int as isize);
a_stop = (*i.offset(1 as ::core::ffi::c_int as isize)).suspended;
while a != a_stop {
if (*a).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int && {
dp = (*(*a).head).price - dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double;
dp > p_max
} {
if i_price < dp {
(*i).current = a;
return 1 as ::core::ffi::c_int;
}
p_max = dp;
a_max = a;
}
a = a.offset(1);
}
a = (*i).first;
a_stop = (*i).current.offset(1 as ::core::ffi::c_int as isize);
while a != a_stop {
if (*a).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int && {
dp = (*(*a).head).price - dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double;
dp > p_max
} {
if i_price < dp {
(*i).current = a;
return 1 as ::core::ffi::c_int;
}
p_max = dp;
a_max = a;
}
a = a.offset(1);
}
if p_max != price_min {
(*i).price = p_max - epsilon;
(*i).current = a_max;
} else if (*i).suspended == (*i).first {
if (*i).excess == 0 as excess_t {
(*i).price = price_min;
} else if n_ref == 1 as ::core::ffi::c_long {
err_end(UNFEASIBLE);
} else {
err_end(PRICE_OFL);
}
} else {
flag_price = 1 as ::core::ffi::c_int;
}
n_relabel += 1;
n_rel += 1;
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn discharge(mut i: *mut node) {
let mut a: *mut arc = ::core::ptr::null_mut::<arc>();
let mut b: *mut arc = ::core::ptr::null_mut::<arc>();
let mut ra: *mut arc = ::core::ptr::null_mut::<arc>();
let mut j: *mut node = ::core::ptr::null_mut::<node>();
let mut df: ::core::ffi::c_long = 0;
let mut j_exc: excess_t = 0;
let mut empty_push: ::core::ffi::c_int = 0;
n_discharge += 1;
empty_push = 0 as ::core::ffi::c_int;
a = (*i).current;
j = (*a).head as *mut node;
if !((*a).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int
&& ((*i).price + dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double)
< (*j).price)
{
relabel(i);
a = (*i).current;
j = (*a).head as *mut node;
}
loop {
j_exc = (*j).excess;
if j_exc >= 0 as excess_t {
b = (*j).current;
if (*b).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int
&& ((*j).price + dn * (*b).cost as ::core::ffi::c_int as ::core::ffi::c_double)
< (*(*b).head).price
|| relabel(j) != 0
{
df = (if (*i).excess < (*a).r_cap as excess_t {
(*i).excess
} else {
(*a).r_cap as excess_t
}) as ::core::ffi::c_long;
if j_exc == 0 as excess_t {
n_src += 1;
}
(*i).excess -= df;
(*j).excess += df;
(*a).r_cap = ((*a).r_cap as ::core::ffi::c_long - df) as ::core::ffi::c_short;
(*(*a).sister).r_cap =
((*(*a).sister).r_cap as ::core::ffi::c_long + df) as ::core::ffi::c_short;
n_push += 1;
if (*j).q_next == sentinel_node {
if !excq_first.is_null() {
(*excq_last).q_next = j as *mut node_st;
} else {
excq_first = j;
}
(*j).q_next = ::core::ptr::null_mut::<node_st>();
excq_last = j;
}
} else {
ra = (*a).sister as *mut arc;
df = (if (*j).excess < (*ra).r_cap as excess_t {
(*j).excess
} else {
(*ra).r_cap as excess_t
}) as ::core::ffi::c_long;
if df > 0 as ::core::ffi::c_long {
(*j).excess -= df;
(*i).excess += df;
(*ra).r_cap = ((*ra).r_cap as ::core::ffi::c_long - df) as ::core::ffi::c_short;
(*(*ra).sister).r_cap =
((*(*ra).sister).r_cap as ::core::ffi::c_long + df) as ::core::ffi::c_short;
if (*j).excess == 0 as excess_t {
n_src -= 1;
}
n_push += 1;
}
let fresh141 = empty_push;
empty_push = empty_push + 1;
if fresh141 as ::core::ffi::c_long >= empty_push_bound {
flag_price = 1 as ::core::ffi::c_int;
return;
}
}
} else {
df = (if (*i).excess < (*a).r_cap as excess_t {
(*i).excess
} else {
(*a).r_cap as excess_t
}) as ::core::ffi::c_long;
(*i).excess -= df;
(*j).excess += df;
(*a).r_cap = ((*a).r_cap as ::core::ffi::c_long - df) as ::core::ffi::c_short;
(*(*a).sister).r_cap =
((*(*a).sister).r_cap as ::core::ffi::c_long + df) as ::core::ffi::c_short;
n_push += 1;
if (*j).excess >= 0 as excess_t {
if (*j).excess > 0 as excess_t {
n_src += 1;
relabel(j);
if !excq_first.is_null() {
(*excq_last).q_next = j as *mut node_st;
} else {
excq_first = j;
}
(*j).q_next = ::core::ptr::null_mut::<node_st>();
excq_last = j;
}
total_excess += j_exc as ::core::ffi::c_double;
} else {
total_excess -= df as ::core::ffi::c_double;
}
}
if (*i).excess <= 0 as excess_t {
n_src -= 1;
}
if (*i).excess <= 0 as excess_t || flag_price != 0 {
break;
}
relabel(i);
a = (*i).current;
j = (*a).head as *mut node;
}
(*i).current = a;
}
unsafe extern "C" fn price_in() -> ::core::ffi::c_int {
let mut i: *mut node = ::core::ptr::null_mut::<node>();
let mut j: *mut node = ::core::ptr::null_mut::<node>();
let mut a: *mut arc = ::core::ptr::null_mut::<arc>();
let mut a_stop: *mut arc = ::core::ptr::null_mut::<arc>();
let mut b: *mut arc = ::core::ptr::null_mut::<arc>();
let mut ra: *mut arc = ::core::ptr::null_mut::<arc>();
let mut rb: *mut arc = ::core::ptr::null_mut::<arc>();
let mut rc: ::core::ffi::c_double = 0.;
let mut n_in_bad: ::core::ffi::c_int = 0;
let mut bad_found: ::core::ffi::c_int = 0;
let mut i_exc: excess_t = 0;
let mut df: excess_t = 0;
bad_found = 0 as ::core::ffi::c_int;
n_in_bad = 0 as ::core::ffi::c_int;
's_17: loop {
i = nodes;
's_18: loop {
if !(i != sentinel_node) {
break 's_17;
}
a = (*i).first.offset(-(1 as ::core::ffi::c_int as isize));
a_stop = (*i).suspended.offset(-(1 as ::core::ffi::c_int as isize));
while a != a_stop {
rc = (*i).price + dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double
- (*(*a).head).price;
if rc < 0 as ::core::ffi::c_int as ::core::ffi::c_double
&& (*a).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int
{
if bad_found == 0 as ::core::ffi::c_int {
bad_found = 1 as ::core::ffi::c_int;
if n_bad_pricein + n_bad_relabel == 0 as ::core::ffi::c_long {
cut_off_factor = CUT_OFF_COEF2 as ::core::ffi::c_double
* pow(n as ::core::ffi::c_double, CUT_OFF_POWER2);
cut_off_factor = if cut_off_factor
> 12 as ::core::ffi::c_int as ::core::ffi::c_double
{
cut_off_factor
} else {
12 as ::core::ffi::c_int as ::core::ffi::c_double
};
cut_off = cut_off_factor * epsilon;
cut_on = cut_off * CUT_OFF_GAP;
} else {
cut_off_factor *= CUT_OFF_INCREASE as ::core::ffi::c_double;
cut_off = cut_off_factor * epsilon;
cut_on = cut_off * CUT_OFF_GAP;
}
break 's_18;
} else {
df = (*a).r_cap as excess_t;
(*i).excess -= df;
(*(*a).head).excess += df;
(*a).r_cap = ((*a).r_cap as excess_t - df) as ::core::ffi::c_short;
(*(*a).sister).r_cap =
((*(*a).sister).r_cap as excess_t + df) as ::core::ffi::c_short;
ra = (*a).sister as *mut arc;
j = (*a).head as *mut node;
(*i).first = (*i).first.offset(-1);
b = (*i).first;
if a != b {
sa = (*a).sister as *mut arc;
sb = (*b).sister as *mut arc;
d_arc.r_cap = (*a).r_cap;
d_arc.cost = (*a).cost;
d_arc.head = (*a).head;
(*a).r_cap = (*b).r_cap;
(*a).cost = (*b).cost;
(*a).head = (*b).head;
(*b).r_cap = d_arc.r_cap;
(*b).cost = d_arc.cost;
(*b).head = d_arc.head;
if a != sb {
(*b).sister = sa as *mut arc_st;
(*a).sister = sb as *mut arc_st;
(*sa).sister = b as *mut arc_st;
(*sb).sister = a as *mut arc_st;
}
d_cap = *cap.offset(a.offset_from(arcs) as ::core::ffi::c_long as isize)
as ::core::ffi::c_long;
*cap.offset(a.offset_from(arcs) as ::core::ffi::c_long as isize) =
*cap.offset(b.offset_from(arcs) as ::core::ffi::c_long as isize);
*cap.offset(b.offset_from(arcs) as ::core::ffi::c_long as isize) =
d_cap as ::core::ffi::c_short;
}
if ra < (*j).first {
(*j).first = (*j).first.offset(-1);
rb = (*j).first;
if ra != rb {
sa = (*ra).sister as *mut arc;
sb = (*rb).sister as *mut arc;
d_arc.r_cap = (*ra).r_cap;
d_arc.cost = (*ra).cost;
d_arc.head = (*ra).head;
(*ra).r_cap = (*rb).r_cap;
(*ra).cost = (*rb).cost;
(*ra).head = (*rb).head;
(*rb).r_cap = d_arc.r_cap;
(*rb).cost = d_arc.cost;
(*rb).head = d_arc.head;
if ra != sb {
(*rb).sister = sa as *mut arc_st;
(*ra).sister = sb as *mut arc_st;
(*sa).sister = rb as *mut arc_st;
(*sb).sister = ra as *mut arc_st;
}
d_cap = *cap
.offset(ra.offset_from(arcs) as ::core::ffi::c_long as isize)
as ::core::ffi::c_long;
*cap
.offset(
ra.offset_from(arcs) as ::core::ffi::c_long as isize,
) = *cap
.offset(
rb.offset_from(arcs) as ::core::ffi::c_long as isize,
);
*cap.offset(rb.offset_from(arcs) as ::core::ffi::c_long as isize) =
d_cap as ::core::ffi::c_short;
}
}
n_in_bad += 1;
}
} else if rc < cut_on && rc > -cut_on {
(*i).first = (*i).first.offset(-1);
b = (*i).first;
if a != b {
sa = (*a).sister as *mut arc;
sb = (*b).sister as *mut arc;
d_arc.r_cap = (*a).r_cap;
d_arc.cost = (*a).cost;
d_arc.head = (*a).head;
(*a).r_cap = (*b).r_cap;
(*a).cost = (*b).cost;
(*a).head = (*b).head;
(*b).r_cap = d_arc.r_cap;
(*b).cost = d_arc.cost;
(*b).head = d_arc.head;
if a != sb {
(*b).sister = sa as *mut arc_st;
(*a).sister = sb as *mut arc_st;
(*sa).sister = b as *mut arc_st;
(*sb).sister = a as *mut arc_st;
}
d_cap = *cap.offset(a.offset_from(arcs) as ::core::ffi::c_long as isize)
as ::core::ffi::c_long;
*cap.offset(a.offset_from(arcs) as ::core::ffi::c_long as isize) =
*cap.offset(b.offset_from(arcs) as ::core::ffi::c_long as isize);
*cap.offset(b.offset_from(arcs) as ::core::ffi::c_long as isize) =
d_cap as ::core::ffi::c_short;
}
}
a = a.offset(-1);
}
i = i.offset(1);
}
}
if n_in_bad != 0 as ::core::ffi::c_int {
n_bad_pricein += 1;
total_excess = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
n_src = 0 as ::core::ffi::c_long;
while !excq_first.is_null() {
excq_last = (*excq_first).q_next as *mut node;
(*excq_first).q_next = sentinel_node as *mut node_st;
excq_first = excq_last;
}
i = nodes;
while i != sentinel_node {
(*i).current = (*i).first;
i_exc = (*i).excess;
if i_exc > 0 as excess_t {
total_excess += i_exc as ::core::ffi::c_double;
n_src += 1;
if !excq_first.is_null() {
(*excq_last).q_next = i as *mut node_st;
} else {
excq_first = i;
}
(*i).q_next = ::core::ptr::null_mut::<node_st>();
excq_last = i;
}
i = i.offset(1);
}
if !excq_first.is_null() {
(*excq_last).q_next = dummy_node as *mut node_st;
} else {
excq_first = dummy_node;
}
(*dummy_node).q_next = ::core::ptr::null_mut::<node_st>();
excq_last = dummy_node;
}
if time_for_price_in == TIME_FOR_PRICE_IN2 {
time_for_price_in = TIME_FOR_PRICE_IN3;
}
if time_for_price_in == TIME_FOR_PRICE_IN1 {
time_for_price_in = TIME_FOR_PRICE_IN2;
}
return n_in_bad;
}
unsafe extern "C" fn refine() {
let mut i: *mut node = ::core::ptr::null_mut::<node>();
let mut i_exc: excess_t = 0;
let mut pr_in_int: ::core::ffi::c_int = 0;
n_refine += 1;
n_ref += 1;
n_rel = 0 as ::core::ffi::c_long;
pr_in_int = 0 as ::core::ffi::c_int;
total_excess = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
n_src = 0 as ::core::ffi::c_long;
while !excq_first.is_null() {
excq_last = (*excq_first).q_next as *mut node;
(*excq_first).q_next = sentinel_node as *mut node_st;
excq_first = excq_last;
}
time_for_price_in = TIME_FOR_PRICE_IN1;
i = nodes;
while i != sentinel_node {
(*i).current = (*i).first;
i_exc = (*i).excess;
if i_exc > 0 as excess_t {
total_excess += i_exc as ::core::ffi::c_double;
n_src += 1;
if !excq_first.is_null() {
(*excq_last).q_next = i as *mut node_st;
} else {
excq_first = i;
}
(*i).q_next = ::core::ptr::null_mut::<node_st>();
excq_last = i;
}
i = i.offset(1);
}
if total_excess <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
return;
}
loop {
if excq_first.is_null() {
if n_ref > PRICE_OUT_START as ::core::ffi::c_long {
price_in();
}
if excq_first.is_null() {
break;
}
}
i = excq_first;
excq_first = (*i).q_next as *mut node;
(*i).q_next = sentinel_node as *mut node_st;
if (*i).excess > 0 as excess_t {
discharge(i);
if n_rel as ::core::ffi::c_double
> n as ::core::ffi::c_double * UPDT_FREQ
+ (n_src * UPDT_FREQ_S as ::core::ffi::c_long) as ::core::ffi::c_double
|| flag_price != 0
{
if (*i).excess > 0 as excess_t {
if !excq_first.is_null() {
(*excq_last).q_next = i as *mut node_st;
} else {
excq_first = i;
}
(*i).q_next = ::core::ptr::null_mut::<node_st>();
excq_last = i;
}
if flag_price != 0 && n_ref > PRICE_OUT_START as ::core::ffi::c_long {
pr_in_int = 0 as ::core::ffi::c_int;
price_in();
flag_price = 0 as ::core::ffi::c_int;
}
price_update();
while flag_updt != 0 {
if n_ref == 1 as ::core::ffi::c_long {
err_end(UNFEASIBLE);
} else {
flag_updt = 0 as ::core::ffi::c_int;
if n_bad_pricein + n_bad_relabel == 0 as ::core::ffi::c_long {
cut_off_factor = CUT_OFF_COEF2 as ::core::ffi::c_double
* pow(n as ::core::ffi::c_double, CUT_OFF_POWER2);
cut_off_factor = if cut_off_factor
> 12 as ::core::ffi::c_int as ::core::ffi::c_double
{
cut_off_factor
} else {
12 as ::core::ffi::c_int as ::core::ffi::c_double
};
cut_off = cut_off_factor * epsilon;
cut_on = cut_off * CUT_OFF_GAP;
} else {
cut_off_factor *= CUT_OFF_INCREASE as ::core::ffi::c_double;
cut_off = cut_off_factor * epsilon;
cut_on = cut_off * CUT_OFF_GAP;
}
n_bad_relabel += 1;
pr_in_int = 0 as ::core::ffi::c_int;
price_in();
price_update();
}
}
n_rel = 0 as ::core::ffi::c_long;
if n_ref > PRICE_OUT_START as ::core::ffi::c_long && {
let fresh139 = pr_in_int;
pr_in_int = pr_in_int + 1;
fresh139 > time_for_price_in
} {
pr_in_int = 0 as ::core::ffi::c_int;
price_in();
}
}
}
}
}
unsafe extern "C" fn price_refine() -> ::core::ffi::c_int {
let mut i: *mut node = ::core::ptr::null_mut::<node>();
let mut j: *mut node = ::core::ptr::null_mut::<node>();
let mut ir: *mut node = ::core::ptr::null_mut::<node>();
let mut is: *mut node = ::core::ptr::null_mut::<node>();
let mut a: *mut arc = ::core::ptr::null_mut::<arc>();
let mut a_stop: *mut arc = ::core::ptr::null_mut::<arc>();
let mut ar: *mut arc = ::core::ptr::null_mut::<arc>();
let mut bmax: ::core::ffi::c_long = 0;
let mut i_rank: ::core::ffi::c_long = 0;
let mut j_rank: ::core::ffi::c_long = 0;
let mut j_new_rank: ::core::ffi::c_long = 0;
let mut b: *mut bucket = ::core::ptr::null_mut::<bucket>();
let mut b_old: *mut bucket = ::core::ptr::null_mut::<bucket>();
let mut b_new: *mut bucket = ::core::ptr::null_mut::<bucket>();
let mut rc: ::core::ffi::c_double = 0.;
let mut dr: ::core::ffi::c_double = 0.;
let mut dp: ::core::ffi::c_double = 0.;
let mut cc: ::core::ffi::c_int = 0;
let mut df: ::core::ffi::c_long = 0;
let mut nnc: ::core::ffi::c_int = 0;
let mut snc: ::core::ffi::c_int = 0;
n_prefine += 1;
cc = 1 as ::core::ffi::c_int;
snc = 0 as ::core::ffi::c_int;
snc_max = if n_ref >= START_CYCLE_CANCEL as ::core::ffi::c_long {
MAX_CYCLES_CANCELLED
} else {
0 as ::core::ffi::c_int
};
loop {
nnc = 0 as ::core::ffi::c_int;
i = nodes;
while i != sentinel_node {
(*i).rank = 0 as ::core::ffi::c_long;
(*i).inp = WHITE as ::core::ffi::c_schar;
(*i).current = (*i).first;
i = i.offset(1);
}
while !excq_first.is_null() {
excq_last = (*excq_first).q_next as *mut node;
(*excq_first).q_next = sentinel_node as *mut node_st;
excq_first = excq_last;
}
i = nodes;
while i != sentinel_node {
if !((*i).inp as ::core::ffi::c_int == BLACK) {
(*i).b_next = ::core::ptr::null_mut::<node_st>();
loop {
(*i).inp = GREY as ::core::ffi::c_schar;
a = (*i).current;
a_stop = (*i.offset(1 as ::core::ffi::c_int as isize)).suspended;
while a != a_stop {
if (*a).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int {
j = (*a).head as *mut node;
if (*i).price
+ dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double
- (*j).price
< 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
if (*j).inp as ::core::ffi::c_int == WHITE {
(*i).current = a;
(*j).b_next = i as *mut node_st;
i = j;
a = (*j).current;
a_stop =
(*j.offset(1 as ::core::ffi::c_int as isize)).suspended;
break;
} else if (*j).inp as ::core::ffi::c_int == GREY {
cc = 0 as ::core::ffi::c_int;
nnc += 1;
(*i).current = a;
ir = i;
is = ir;
df = BIGGEST_FLOW as ::core::ffi::c_long;
loop {
ar = (*ir).current;
if (*ar).r_cap as ::core::ffi::c_long <= df {
df = (*ar).r_cap as ::core::ffi::c_long;
is = ir;
}
if ir == j {
break;
}
ir = (*ir).b_next as *mut node;
}
ir = i;
loop {
ar = (*ir).current;
(*ir).excess -= df;
(*(*ar).head).excess += df;
(*ar).r_cap = ((*ar).r_cap as ::core::ffi::c_long - df)
as ::core::ffi::c_short;
(*(*ar).sister).r_cap =
((*(*ar).sister).r_cap as ::core::ffi::c_long + df)
as ::core::ffi::c_short;
if ir == j {
break;
}
ir = (*ir).b_next as *mut node;
}
if is != i {
ir = i;
while ir != is {
(*ir).inp = WHITE as ::core::ffi::c_schar;
ir = (*ir).b_next as *mut node;
}
i = is;
a = (*is).current.offset(1 as ::core::ffi::c_int as isize);
a_stop = (*is.offset(1 as ::core::ffi::c_int as isize))
.suspended;
break;
}
}
}
}
a = a.offset(1);
}
if !(a == a_stop) {
continue;
}
(*i).inp = BLACK as ::core::ffi::c_schar;
n_prscan1 += 1;
j = (*i).b_next as *mut node;
(*i).q_next = excq_first as *mut node_st;
excq_first = i;
if j.is_null() {
break;
}
i = j;
(*i).current = (*i).current.offset(1);
}
}
i = i.offset(1);
}
snc += nnc;
if snc < snc_max {
cc = 1 as ::core::ffi::c_int;
}
if cc == 0 as ::core::ffi::c_int {
break;
}
bmax = 0 as ::core::ffi::c_long;
while !excq_first.is_null() {
n_prscan2 += 1;
i = excq_first;
excq_first = (*i).q_next as *mut node;
(*i).q_next = sentinel_node as *mut node_st;
i_rank = (*i).rank;
a = (*i).first;
a_stop = (*i.offset(1 as ::core::ffi::c_int as isize)).suspended;
while a != a_stop {
if (*a).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int {
j = (*a).head as *mut node;
rc = (*i).price + dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double
- (*j).price;
if rc < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
dr = (-rc - 0.5f64) / epsilon;
j_rank = (dr + i_rank as ::core::ffi::c_double) as ::core::ffi::c_long;
if (j_rank as ::core::ffi::c_double) < dlinf {
if j_rank > (*j).rank {
(*j).rank = j_rank;
}
}
}
}
a = a.offset(1);
}
if i_rank > 0 as ::core::ffi::c_long {
if i_rank > bmax {
bmax = i_rank;
}
b = buckets.offset(i_rank as isize);
(*i).b_next = (*b).p_first as *mut node_st;
(*(*b).p_first).b_prev = i as *mut node_st;
(*b).p_first = i;
}
}
if bmax == 0 as ::core::ffi::c_long {
break;
}
b = buckets.offset(bmax as isize);
while b != buckets {
i_rank = b.offset_from(buckets) as ::core::ffi::c_long;
dp = i_rank as ::core::ffi::c_double * epsilon;
while (*b).p_first != dnode {
i = (*b).p_first;
(*b).p_first = (*i).b_next as *mut node;
n_prscan += 1;
a = (*i).first;
a_stop = (*i.offset(1 as ::core::ffi::c_int as isize)).suspended;
while a != a_stop {
if (*a).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int {
j = (*a).head as *mut node;
j_rank = (*j).rank;
if j_rank < i_rank {
rc = (*i).price
+ dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double
- (*j).price;
if rc < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
j_new_rank = i_rank;
} else {
dr = rc / epsilon;
j_new_rank = if dr < dlinf {
i_rank - (dr as ::core::ffi::c_long + 1 as ::core::ffi::c_long)
} else {
0 as ::core::ffi::c_long
};
}
if j_rank < j_new_rank {
if cc == 1 as ::core::ffi::c_int {
(*j).rank = j_new_rank;
if j_rank > 0 as ::core::ffi::c_long {
b_old = buckets.offset(j_rank as isize);
if j == (*b_old).p_first {
(*b_old).p_first = (*j).b_next as *mut node;
} else {
(*(*j).b_prev).b_next = (*j).b_next;
(*(*j).b_next).b_prev = (*j).b_prev;
}
}
b_new = buckets.offset(j_new_rank as isize);
(*j).b_next = (*b_new).p_first as *mut node_st;
(*(*b_new).p_first).b_prev = j as *mut node_st;
(*b_new).p_first = j;
} else {
df = (*a).r_cap as ::core::ffi::c_long;
(*i).excess -= df;
(*j).excess += df;
(*a).r_cap = ((*a).r_cap as ::core::ffi::c_long - df)
as ::core::ffi::c_short;
(*(*a).sister).r_cap =
((*(*a).sister).r_cap as ::core::ffi::c_long + df)
as ::core::ffi::c_short;
}
}
}
}
a = a.offset(1);
}
(*i).price -= dp;
}
b = b.offset(-1);
}
if cc == 0 as ::core::ffi::c_int {
break;
}
}
if cc == 0 as ::core::ffi::c_int {
i = nodes;
while i != sentinel_node {
a = (*i).first;
a_stop = (*i.offset(1 as ::core::ffi::c_int as isize)).suspended;
while a != a_stop {
if (*i).price + dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double
- (*(*a).head).price
< -epsilon
{
df = (*a).r_cap as ::core::ffi::c_long;
if df > 0 as ::core::ffi::c_long {
(*i).excess -= df;
(*(*a).head).excess += df;
(*a).r_cap =
((*a).r_cap as ::core::ffi::c_long - df) as ::core::ffi::c_short;
(*(*a).sister).r_cap = ((*(*a).sister).r_cap as ::core::ffi::c_long + df)
as ::core::ffi::c_short;
}
}
a = a.offset(1);
}
i = i.offset(1);
}
}
return cc;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn compute_prices() {
let mut i: *mut node = ::core::ptr::null_mut::<node>();
let mut j: *mut node = ::core::ptr::null_mut::<node>();
let mut a: *mut arc = ::core::ptr::null_mut::<arc>();
let mut a_stop: *mut arc = ::core::ptr::null_mut::<arc>();
let mut bmax: ::core::ffi::c_long = 0;
let mut i_rank: ::core::ffi::c_long = 0;
let mut j_rank: ::core::ffi::c_long = 0;
let mut j_new_rank: ::core::ffi::c_long = 0;
let mut b: *mut bucket = ::core::ptr::null_mut::<bucket>();
let mut b_old: *mut bucket = ::core::ptr::null_mut::<bucket>();
let mut b_new: *mut bucket = ::core::ptr::null_mut::<bucket>();
let mut rc: ::core::ffi::c_double = 0.;
let mut dr: ::core::ffi::c_double = 0.;
let mut dp: ::core::ffi::c_double = 0.;
let mut cc: ::core::ffi::c_int = 0;
n_prefine += 1;
cc = 1 as ::core::ffi::c_int;
loop {
i = nodes;
while i != sentinel_node {
(*i).rank = 0 as ::core::ffi::c_long;
(*i).inp = WHITE as ::core::ffi::c_schar;
(*i).current = (*i).first;
i = i.offset(1);
}
while !excq_first.is_null() {
excq_last = (*excq_first).q_next as *mut node;
(*excq_first).q_next = sentinel_node as *mut node_st;
excq_first = excq_last;
}
i = nodes;
while i != sentinel_node {
if !((*i).inp as ::core::ffi::c_int == BLACK) {
(*i).b_next = ::core::ptr::null_mut::<node_st>();
loop {
(*i).inp = GREY as ::core::ffi::c_schar;
a = (*i).first;
a_stop = (*i.offset(1 as ::core::ffi::c_int as isize)).suspended;
while a != a_stop {
if (*a).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int {
j = (*a).head as *mut node;
if (*i).price
+ dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double
- (*j).price
< 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
if (*j).inp as ::core::ffi::c_int == WHITE {
(*i).current = a;
(*j).b_next = i as *mut node_st;
i = j;
a = (*j).current;
a_stop =
(*j.offset(1 as ::core::ffi::c_int as isize)).suspended;
break;
} else if (*j).inp as ::core::ffi::c_int == GREY {
cc = 0 as ::core::ffi::c_int;
}
}
}
a = a.offset(1);
}
if !(a == a_stop) {
continue;
}
(*i).inp = BLACK as ::core::ffi::c_schar;
n_prscan1 += 1;
j = (*i).b_next as *mut node;
(*i).q_next = excq_first as *mut node_st;
excq_first = i;
if j.is_null() {
break;
}
i = j;
(*i).current = (*i).current.offset(1);
}
}
i = i.offset(1);
}
if cc == 0 as ::core::ffi::c_int {
break;
}
bmax = 0 as ::core::ffi::c_long;
while !excq_first.is_null() {
n_prscan2 += 1;
i = excq_first;
excq_first = (*i).q_next as *mut node;
(*i).q_next = sentinel_node as *mut node_st;
i_rank = (*i).rank;
a = (*i).first;
a_stop = (*i.offset(1 as ::core::ffi::c_int as isize)).suspended;
while a != a_stop {
if (*a).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int {
j = (*a).head as *mut node;
rc = (*i).price + dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double
- (*j).price;
if rc < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
dr = -rc;
j_rank = (dr + i_rank as ::core::ffi::c_double) as ::core::ffi::c_long;
if (j_rank as ::core::ffi::c_double) < dlinf {
if j_rank > (*j).rank {
(*j).rank = j_rank;
}
}
}
}
a = a.offset(1);
}
if i_rank > 0 as ::core::ffi::c_long {
if i_rank > bmax {
bmax = i_rank;
}
b = buckets.offset(i_rank as isize);
(*i).b_next = (*b).p_first as *mut node_st;
(*(*b).p_first).b_prev = i as *mut node_st;
(*b).p_first = i;
}
}
if bmax == 0 as ::core::ffi::c_long {
break;
}
b = buckets.offset(bmax as isize);
while b != buckets {
i_rank = b.offset_from(buckets) as ::core::ffi::c_long;
dp = i_rank as ::core::ffi::c_double;
while (*b).p_first != dnode {
i = (*b).p_first;
(*b).p_first = (*i).b_next as *mut node;
n_prscan += 1;
a = (*i).first;
a_stop = (*i.offset(1 as ::core::ffi::c_int as isize)).suspended;
while a != a_stop {
if (*a).r_cap as ::core::ffi::c_int > 0 as ::core::ffi::c_int {
j = (*a).head as *mut node;
j_rank = (*j).rank;
if j_rank < i_rank {
rc = (*i).price
+ dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double
- (*j).price;
if rc < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
j_new_rank = i_rank;
} else {
dr = rc;
j_new_rank = if dr < dlinf {
i_rank - (dr as ::core::ffi::c_long + 1 as ::core::ffi::c_long)
} else {
0 as ::core::ffi::c_long
};
}
if j_rank < j_new_rank {
if cc == 1 as ::core::ffi::c_int {
(*j).rank = j_new_rank;
if j_rank > 0 as ::core::ffi::c_long {
b_old = buckets.offset(j_rank as isize);
if j == (*b_old).p_first {
(*b_old).p_first = (*j).b_next as *mut node;
} else {
(*(*j).b_prev).b_next = (*j).b_next;
(*(*j).b_next).b_prev = (*j).b_prev;
}
}
b_new = buckets.offset(j_new_rank as isize);
(*j).b_next = (*b_new).p_first as *mut node_st;
(*(*b_new).p_first).b_prev = j as *mut node_st;
(*b_new).p_first = j;
}
}
}
}
a = a.offset(1);
}
(*i).price -= dp;
}
b = b.offset(-1);
}
if cc == 0 as ::core::ffi::c_int {
break;
}
}
}
unsafe extern "C" fn price_out() {
let mut i: *mut node = ::core::ptr::null_mut::<node>();
let mut a: *mut arc = ::core::ptr::null_mut::<arc>();
let mut a_stop: *mut arc = ::core::ptr::null_mut::<arc>();
let mut b: *mut arc = ::core::ptr::null_mut::<arc>();
let mut n_cut_off: ::core::ffi::c_double = 0.;
let mut rc: ::core::ffi::c_double = 0.;
n_cut_off = -cut_off;
i = nodes;
while i != sentinel_node {
a = (*i).first;
a_stop = (*i.offset(1 as ::core::ffi::c_int as isize)).suspended;
while a != a_stop {
rc = (*i).price + dn * (*a).cost as ::core::ffi::c_int as ::core::ffi::c_double
- (*(*a).head).price;
if rc > cut_off && (*(*a).sister).r_cap as ::core::ffi::c_int <= 0 as ::core::ffi::c_int
|| rc < n_cut_off && (*a).r_cap as ::core::ffi::c_int <= 0 as ::core::ffi::c_int
{
let fresh138 = (*i).first;
(*i).first = (*i).first.offset(1);
b = fresh138;
if a != b {
sa = (*a).sister as *mut arc;
sb = (*b).sister as *mut arc;
d_arc.r_cap = (*a).r_cap;
d_arc.cost = (*a).cost;
d_arc.head = (*a).head;
(*a).r_cap = (*b).r_cap;
(*a).cost = (*b).cost;
(*a).head = (*b).head;
(*b).r_cap = d_arc.r_cap;
(*b).cost = d_arc.cost;
(*b).head = d_arc.head;
if a != sb {
(*b).sister = sa as *mut arc_st;
(*a).sister = sb as *mut arc_st;
(*sa).sister = b as *mut arc_st;
(*sb).sister = a as *mut arc_st;
}
d_cap = *cap.offset(a.offset_from(arcs) as ::core::ffi::c_long as isize)
as ::core::ffi::c_long;
*cap.offset(a.offset_from(arcs) as ::core::ffi::c_long as isize) =
*cap.offset(b.offset_from(arcs) as ::core::ffi::c_long as isize);
*cap.offset(b.offset_from(arcs) as ::core::ffi::c_long as isize) =
d_cap as ::core::ffi::c_short;
}
}
a = a.offset(1);
}
i = i.offset(1);
}
}
unsafe extern "C" fn update_epsilon() -> ::core::ffi::c_int {
if epsilon <= low_bound {
return 1 as ::core::ffi::c_int;
}
epsilon = ceil(epsilon / f_scale);
cut_off = cut_off_factor * epsilon;
cut_on = cut_off * CUT_OFF_GAP;
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn finishup(mut obj_ad: *mut ::core::ffi::c_double) {
let mut a: *mut arc = ::core::ptr::null_mut::<arc>();
let mut na: ::core::ffi::c_long = 0;
let mut obj_internal: ::core::ffi::c_double = 0.;
let mut cs: ::core::ffi::c_double = 0.;
let mut flow: ::core::ffi::c_long = 0;
obj_internal = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
a = arcs;
na = 0 as ::core::ffi::c_long;
while a != sentinel_arc {
cs = (*a).cost as ::core::ffi::c_double;
if *cap.offset(na as isize) as ::core::ffi::c_int > 0 as ::core::ffi::c_int && {
flow = (*cap.offset(na as isize) as ::core::ffi::c_int
- (*a).r_cap as ::core::ffi::c_int) as ::core::ffi::c_long;
flow != 0 as ::core::ffi::c_long
} {
obj_internal += cs * flow as ::core::ffi::c_double;
}
a = a.offset(1);
na += 1;
}
*obj_ad = obj_internal;
}
unsafe extern "C" fn cs2(
mut n_p: ::core::ffi::c_long,
mut m_p: ::core::ffi::c_long,
mut nodes_p: *mut node,
mut arcs_p: *mut arc,
mut f_sc: ::core::ffi::c_long,
mut max_c: ::core::ffi::c_double,
mut cap_p: *mut ::core::ffi::c_short,
mut obj_ad: *mut ::core::ffi::c_double,
) {
let mut cc: ::core::ffi::c_int = 0;
cs_init(n_p, m_p, nodes_p, arcs_p, f_sc, max_c, cap_p);
cc = 0 as ::core::ffi::c_int;
update_epsilon();
loop {
refine();
if n_ref >= PRICE_OUT_START as ::core::ffi::c_long {
price_out();
}
if update_epsilon() != 0 {
break;
}
while !(price_refine() == 0) {
if n_ref >= PRICE_OUT_START as ::core::ffi::c_long {
if price_in() != 0 {
break;
}
}
cc = update_epsilon();
if cc != 0 {
break;
}
}
if !(cc == 0 as ::core::ffi::c_int) {
break;
}
}
finishup(obj_ad);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SolveCS2(
mut residue: *mut *mut ::core::ffi::c_schar,
mut mstcosts: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut cs2scalefactor: ::core::ffi::c_long,
mut flowsptr: *mut *mut *mut ::core::ffi::c_short,
) {
let mut arp: *mut arc = ::core::ptr::null_mut::<arc>();
let mut ndp: *mut node = ::core::ptr::null_mut::<node>();
let mut n_0: ::core::ffi::c_long = 0;
let mut m_0: ::core::ffi::c_long = 0;
let mut m2: ::core::ffi::c_long = 0;
let mut nmin: ::core::ffi::c_long = 0;
let mut i: *mut node = ::core::ptr::null_mut::<node>();
let mut ni: ::core::ffi::c_long = 0;
let mut a: *mut arc = ::core::ptr::null_mut::<arc>();
let mut nNrow: ::core::ffi::c_long = 0;
let mut nNcol: ::core::ffi::c_long = 0;
let mut to: ::core::ffi::c_long = 0;
let mut from: ::core::ffi::c_long = 0;
let mut num: ::core::ffi::c_long = 0;
let mut flow: ::core::ffi::c_long = 0;
let mut ground: ::core::ffi::c_long = 0;
let mut f_sc: ::core::ffi::c_long = 0;
let mut cost: ::core::ffi::c_double = 0.;
let mut c_max: ::core::ffi::c_double = 0.;
let mut cap_0: *mut ::core::ffi::c_short = ::core::ptr::null_mut::<::core::ffi::c_short>();
let mut rowcost: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut colcost: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut rowflow: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut colflow: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
nNrow = nrow - 1 as ::core::ffi::c_long;
nNcol = ncol - 1 as ::core::ffi::c_long;
ground = nNrow * nNcol + 1 as ::core::ffi::c_long;
rowcost = mstcosts;
colcost = mstcosts.offset((nrow - 1 as ::core::ffi::c_long) as isize)
as *mut *mut ::core::ffi::c_short;
f_sc = cs2scalefactor;
cs2mcfparse(
residue,
rowcost,
colcost,
nNrow,
nNcol,
&raw mut n_0,
&raw mut m_0,
&raw mut ndp,
&raw mut arp,
&raw mut nmin,
&raw mut c_max,
&raw mut cap_0,
);
Free2DArray(
residue as *mut *mut ::core::ffi::c_void,
(nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
mstcosts as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
fprintf(
sp2,
b"Running cs2 MCF solver\n\0" as *const u8 as *const ::core::ffi::c_char,
);
m2 = 2 as ::core::ffi::c_long * m_0;
cs2(n_0, m2, ndp, arp, f_sc, c_max, cap_0, &raw mut cost);
*flowsptr = Get2DRowColZeroMem(
nrow,
ncol,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
rowflow = *flowsptr;
colflow = (*flowsptr).offset((nrow - 1 as ::core::ffi::c_long) as isize)
as *mut *mut ::core::ffi::c_short;
i = ndp;
while i < ndp.offset(n_0 as isize) {
ni = if i.is_null() {
-(1 as ::core::ffi::c_int) as ::core::ffi::c_long
} else {
i.offset_from(ndp) as ::core::ffi::c_long + nmin
};
a = (*i).suspended;
while a != (*i.offset(1 as ::core::ffi::c_int as isize)).suspended {
if *cap_0.offset(
(if a.is_null() {
-(1 as ::core::ffi::c_int) as ::core::ffi::c_long
} else {
a.offset_from(arp) as ::core::ffi::c_long
}) as isize,
) as ::core::ffi::c_int
> 0 as ::core::ffi::c_int
&& *cap_0.offset(
(if a.is_null() {
-(1 as ::core::ffi::c_int) as ::core::ffi::c_long
} else {
a.offset_from(arp) as ::core::ffi::c_long
}) as isize,
) as ::core::ffi::c_int
- (*a).r_cap as ::core::ffi::c_int
!= 0
{
from = ni;
to = if (*a).head.is_null() {
-(1 as ::core::ffi::c_int) as ::core::ffi::c_long
} else {
(*a).head.offset_from(ndp) as ::core::ffi::c_long + nmin
};
flow = (*cap_0.offset(
(if a.is_null() {
-(1 as ::core::ffi::c_int) as ::core::ffi::c_long
} else {
a.offset_from(arp) as ::core::ffi::c_long
}) as isize,
) as ::core::ffi::c_int
- (*a).r_cap as ::core::ffi::c_int)
as ::core::ffi::c_long;
if flow > LARGESHORT as ::core::ffi::c_long
|| flow < -LARGESHORT as ::core::ffi::c_long
{
fprintf(
sp0,
b"Flow will overflow short data type\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if from == ground || to == ground {
if to == ground {
num = to;
to = from;
from = num;
flow = -flow;
}
if (to - 1 as ::core::ffi::c_long) % nNrow == 0 {
let ref mut fresh130 = *(*colflow.offset(0 as ::core::ffi::c_int as isize))
.offset(
((to - 1 as ::core::ffi::c_long) / nNrow) as ::core::ffi::c_int
as isize,
);
*fresh130 =
(*fresh130 as ::core::ffi::c_long + flow) as ::core::ffi::c_short;
} else if to <= nNrow {
let ref mut fresh131 = *(*rowflow
.offset((to - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize);
*fresh131 =
(*fresh131 as ::core::ffi::c_long + flow) as ::core::ffi::c_short;
} else if to >= ground - nNrow - 1 as ::core::ffi::c_long {
let ref mut fresh132 = *(*rowflow
.offset(((to - 1 as ::core::ffi::c_long) % nNrow) as isize))
.offset(nNcol as isize);
*fresh132 =
(*fresh132 as ::core::ffi::c_long - flow) as ::core::ffi::c_short;
} else if to % nNrow == 0 {
let ref mut fresh133 = *(*colflow.offset(nNrow as isize)).offset(
(to / nNrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_int as isize,
);
*fresh133 =
(*fresh133 as ::core::ffi::c_long - flow) as ::core::ffi::c_short;
} else {
fprintf(
sp0,
b"Unassigned ground arc parsing cs2 solution\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
} else if from == to + 1 as ::core::ffi::c_long {
num = from
+ ((from - 1 as ::core::ffi::c_long) / nNrow) as ::core::ffi::c_int
as ::core::ffi::c_long;
let ref mut fresh134 = *(*colflow.offset(
((num - 1 as ::core::ffi::c_long) % (nNrow + 1 as ::core::ffi::c_long))
as isize,
))
.offset(
((num - 1 as ::core::ffi::c_long) as ::core::ffi::c_int
as ::core::ffi::c_long
/ (nNrow + 1 as ::core::ffi::c_long)) as isize,
);
*fresh134 = (*fresh134 as ::core::ffi::c_long - flow) as ::core::ffi::c_short;
} else if from == to - 1 as ::core::ffi::c_long {
num = from
+ ((from - 1 as ::core::ffi::c_long) / nNrow) as ::core::ffi::c_int
as ::core::ffi::c_long
+ 1 as ::core::ffi::c_long;
let ref mut fresh135 = *(*colflow.offset(
((num - 1 as ::core::ffi::c_long) % (nNrow + 1 as ::core::ffi::c_long))
as isize,
))
.offset(
((num - 1 as ::core::ffi::c_long) as ::core::ffi::c_int
as ::core::ffi::c_long
/ (nNrow + 1 as ::core::ffi::c_long)) as isize,
);
*fresh135 = (*fresh135 as ::core::ffi::c_long + flow) as ::core::ffi::c_short;
} else if from == to - nNrow {
num = from + nNrow;
let ref mut fresh136 = *(*rowflow
.offset(((num - 1 as ::core::ffi::c_long) % nNrow) as isize))
.offset(
((num - 1 as ::core::ffi::c_long) / nNrow) as ::core::ffi::c_int as isize,
);
*fresh136 = (*fresh136 as ::core::ffi::c_long + flow) as ::core::ffi::c_short;
} else if from == to + nNrow {
num = from;
let ref mut fresh137 = *(*rowflow
.offset(((num - 1 as ::core::ffi::c_long) % nNrow) as isize))
.offset(
((num - 1 as ::core::ffi::c_long) / nNrow) as ::core::ffi::c_int as isize,
);
*fresh137 = (*fresh137 as ::core::ffi::c_long - flow) as ::core::ffi::c_short;
} else {
fprintf(
sp0,
b"Non-grid arc parsing cs2 solution\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
}
a = a.offset(1);
}
i = i.offset(1);
}
free(ndp.offset(-(nmin as isize)) as *mut ::core::ffi::c_void);
free(arp as *mut ::core::ffi::c_void);
free(cap_0 as *mut ::core::ffi::c_void);
free(buckets as *mut ::core::ffi::c_void);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetDefaults(
mut infiles: *mut infileT,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
memset(
infiles as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<infileT>() as size_t,
);
memset(
outfiles as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<outfileT>() as size_t,
);
memset(
params as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<paramT>() as size_t,
);
StrNCopy(
&raw mut (*infiles).weightfile as *mut ::core::ffi::c_char,
DEF_WEIGHTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char,
DEF_CORRFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
DEF_AMPFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char,
DEF_AMPFILE2.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*infiles).estfile as *mut ::core::ffi::c_char,
DEF_ESTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*infiles).magfile as *mut ::core::ffi::c_char,
DEF_MAGFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*infiles).costinfile as *mut ::core::ffi::c_char,
DEF_COSTINFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*infiles).bytemaskfile as *mut ::core::ffi::c_char,
DEF_BYTEMASKFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*infiles).dotilemaskfile as *mut ::core::ffi::c_char,
DEF_DOTILEMASKFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).initfile as *mut ::core::ffi::c_char,
DEF_INITFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).flowfile as *mut ::core::ffi::c_char,
DEF_FLOWFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).eifile as *mut ::core::ffi::c_char,
DEF_EIFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).rowcostfile as *mut ::core::ffi::c_char,
DEF_ROWCOSTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).colcostfile as *mut ::core::ffi::c_char,
DEF_COLCOSTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).mstrowcostfile as *mut ::core::ffi::c_char,
DEF_MSTROWCOSTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).mstcolcostfile as *mut ::core::ffi::c_char,
DEF_MSTCOLCOSTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).mstcostsfile as *mut ::core::ffi::c_char,
DEF_MSTCOSTSFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).corrdumpfile as *mut ::core::ffi::c_char,
DEF_CORRDUMPFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).rawcorrdumpfile as *mut ::core::ffi::c_char,
DEF_RAWCORRDUMPFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char,
DEF_COSTOUTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
DEF_CONNCOMPFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
DEF_OUTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char,
DEF_LOGFILE.as_ptr(),
MAXSTRLEN as size_t,
);
(*infiles).infileformat = DEF_INFILEFORMAT as ::core::ffi::c_schar;
(*infiles).unwrappedinfileformat = DEF_UNWRAPPEDINFILEFORMAT as ::core::ffi::c_schar;
(*infiles).magfileformat = DEF_MAGFILEFORMAT as ::core::ffi::c_schar;
(*infiles).corrfileformat = DEF_CORRFILEFORMAT as ::core::ffi::c_schar;
(*infiles).estfileformat = DEF_ESTFILEFORMAT as ::core::ffi::c_schar;
(*infiles).ampfileformat = DEF_AMPFILEFORMAT as ::core::ffi::c_schar;
(*outfiles).outfileformat = DEF_OUTFILEFORMAT as ::core::ffi::c_schar;
(*params).unwrapped = DEF_UNWRAPPED as ::core::ffi::c_schar;
(*params).regrowconncomps = DEF_REGROWCONNCOMPS as ::core::ffi::c_schar;
(*params).eval = DEF_EVAL as ::core::ffi::c_schar;
(*params).initonly = DEF_INITONLY as ::core::ffi::c_schar;
(*params).initmethod = DEF_INITMETHOD as ::core::ffi::c_schar;
(*params).costmode = DEF_COSTMODE as ::core::ffi::c_schar;
(*params).amplitude = DEF_AMPLITUDE as ::core::ffi::c_schar;
(*params).verbose = DEF_VERBOSE as ::core::ffi::c_schar;
(*params).orbitradius = DEF_ORBITRADIUS;
(*params).altitude = DEF_ALTITUDE;
(*params).earthradius = DEF_EARTHRADIUS;
(*params).bperp = DEF_BPERP as ::core::ffi::c_double;
(*params).transmitmode = DEF_TRANSMITMODE as ::core::ffi::c_schar;
(*params).baseline = DEF_BASELINE;
(*params).baselineangle = DEF_BASELINEANGLE;
(*params).nlooksrange = DEF_NLOOKSRANGE as ::core::ffi::c_long;
(*params).nlooksaz = DEF_NLOOKSAZ as ::core::ffi::c_long;
(*params).nlooksother = DEF_NLOOKSOTHER as ::core::ffi::c_long;
(*params).ncorrlooks = DEF_NCORRLOOKS;
(*params).ncorrlooksrange = DEF_NCORRLOOKSRANGE as ::core::ffi::c_long;
(*params).ncorrlooksaz = DEF_NCORRLOOKSAZ as ::core::ffi::c_long;
(*params).nearrange = DEF_NEARRANGE;
(*params).dr = DEF_DR;
(*params).da = DEF_DA;
(*params).rangeres = DEF_RANGERES;
(*params).azres = DEF_AZRES;
(*params).lambda = DEF_LAMBDA;
(*params).kds = DEF_KDS;
(*params).specularexp = DEF_SPECULAREXP;
(*params).dzrcritfactor = DEF_DZRCRITFACTOR;
(*params).shadow = DEF_SHADOW as ::core::ffi::c_schar;
(*params).dzeimin = DEF_DZEIMIN;
(*params).laywidth = DEF_LAYWIDTH as ::core::ffi::c_long;
(*params).layminei = DEF_LAYMINEI;
(*params).sloperatiofactor = DEF_SLOPERATIOFACTOR;
(*params).sigsqei = DEF_SIGSQEI;
(*params).drho = DEF_DRHO;
(*params).rhosconst1 = DEF_RHOSCONST1;
(*params).rhosconst2 = DEF_RHOSCONST2;
(*params).cstd1 = DEF_CSTD1;
(*params).cstd2 = DEF_CSTD2;
(*params).cstd3 = DEF_CSTD3;
(*params).defaultcorr = DEF_DEFAULTCORR;
(*params).rhominfactor = DEF_RHOMINFACTOR;
(*params).dzlaypeak = DEF_DZLAYPEAK;
(*params).azdzfactor = DEF_AZDZFACTOR;
(*params).dzeifactor = DEF_DZEIFACTOR;
(*params).dzeiweight = DEF_DZEIWEIGHT;
(*params).dzlayfactor = DEF_DZLAYFACTOR;
(*params).layconst = DEF_LAYCONST;
(*params).layfalloffconst = DEF_LAYFALLOFFCONST;
(*params).sigsqshortmin = DEF_SIGSQSHORTMIN as ::core::ffi::c_long;
(*params).sigsqlayfactor = DEF_SIGSQLAYFACTOR;
(*params).defoazdzfactor = DEF_DEFOAZDZFACTOR;
(*params).defothreshfactor = DEF_DEFOTHRESHFACTOR;
(*params).defomax = DEF_DEFOMAX;
(*params).sigsqcorr = DEF_SIGSQCORR;
(*params).defolayconst = DEF_DEFOLAYCONST;
(*params).flipphasesign = DEF_FLIPPHASESIGN as ::core::ffi::c_schar;
(*params).onetilereopt = DEF_ONETILEREOPT as ::core::ffi::c_schar;
(*params).rmtileinit = DEF_RMTILEINIT as ::core::ffi::c_schar;
(*params).initmaxflow = DEF_INITMAXFLOW as ::core::ffi::c_long;
(*params).arcmaxflowconst = DEF_ARCMAXFLOWCONST as ::core::ffi::c_long;
(*params).maxflow = DEF_MAXFLOW as ::core::ffi::c_long;
(*params).krowei = DEF_KROWEI as ::core::ffi::c_long;
(*params).kcolei = DEF_KCOLEI as ::core::ffi::c_long;
(*params).kperpdpsi = DEF_KPERPDPSI as ::core::ffi::c_long;
(*params).kpardpsi = DEF_KPARDPSI as ::core::ffi::c_long;
(*params).threshold = DEF_THRESHOLD;
(*params).initdzr = DEF_INITDZR;
(*params).initdzstep = DEF_INITDZSTEP;
(*params).maxcost = DEF_MAXCOST;
(*params).costscale = DEF_COSTSCALE;
(*params).costscaleambight = DEF_COSTSCALEAMBIGHT;
(*params).dnomincangle = DEF_DNOMINCANGLE;
(*params).srcrow = DEF_SRCROW as ::core::ffi::c_long;
(*params).srccol = DEF_SRCCOL as ::core::ffi::c_long;
(*params).p = DEF_P;
(*params).bidirlpn = DEF_BIDIRLPN as ::core::ffi::c_schar;
(*params).nshortcycle = DEF_NSHORTCYCLE as ::core::ffi::c_long;
(*params).maxnewnodeconst = DEF_MAXNEWNODECONST;
(*params).maxcyclefraction = DEF_MAXCYCLEFRACTION;
(*params).nconnnodemin = DEF_NCONNNODEMIN as ::core::ffi::c_long;
(*params).maxnflowcycles = DEF_MAXNFLOWCYCLES as ::core::ffi::c_long;
(*params).dumpall = DEF_DUMPALL as ::core::ffi::c_schar;
(*params).cs2scalefactor = DEF_CS2SCALEFACTOR as ::core::ffi::c_long;
(*params).nmajorprune = DEF_NMAJORPRUNE as ::core::ffi::c_long;
(*params).prunecostthresh = DEF_PRUNECOSTTHRESH as ::core::ffi::c_long;
(*params).edgemasktop = DEF_EDGEMASKTOP as ::core::ffi::c_long;
(*params).edgemaskbot = DEF_EDGEMASKBOT as ::core::ffi::c_long;
(*params).edgemaskleft = DEF_EDGEMASKLEFT as ::core::ffi::c_long;
(*params).edgemaskright = DEF_EDGEMASKRIGHT as ::core::ffi::c_long;
(*params).parentpid = getpid() as ::core::ffi::c_long;
(*params).ntilerow = DEF_NTILEROW as ::core::ffi::c_long;
(*params).ntilecol = DEF_NTILECOL as ::core::ffi::c_long;
(*params).rowovrlp = DEF_ROWOVRLP as ::core::ffi::c_long;
(*params).colovrlp = DEF_COLOVRLP as ::core::ffi::c_long;
(*params).piecefirstrow = DEF_PIECEFIRSTROW as ::core::ffi::c_long;
(*params).piecefirstcol = DEF_PIECEFIRSTCOL as ::core::ffi::c_long;
(*params).piecenrow = DEF_PIECENROW as ::core::ffi::c_long;
(*params).piecencol = DEF_PIECENCOL as ::core::ffi::c_long;
(*params).tilecostthresh = DEF_TILECOSTTHRESH as ::core::ffi::c_long;
(*params).minregionsize = DEF_MINREGIONSIZE as ::core::ffi::c_long;
(*params).nthreads = DEF_NTHREADS as ::core::ffi::c_long;
(*params).scndryarcflowmax = DEF_SCNDRYARCFLOWMAX as ::core::ffi::c_long;
StrNCopy(
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
DEF_TILEDIR.as_ptr(),
MAXSTRLEN as size_t,
);
(*params).assembleonly = DEF_ASSEMBLEONLY as ::core::ffi::c_schar;
(*params).rmtmptile = DEF_RMTMPTILE as ::core::ffi::c_schar;
(*params).tileedgeweight = DEF_TILEEDGEWEIGHT;
(*params).minconncompfrac = DEF_MINCONNCOMPFRAC;
(*params).conncompthresh = DEF_CONNCOMPTHRESH as ::core::ffi::c_long;
(*params).maxncomps = DEF_MAXNCOMPS as ::core::ffi::c_long;
(*params).conncompouttype = DEF_CONNCOMPOUTTYPE;
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ProcessArgs(
mut argc: ::core::ffi::c_int,
mut argv: *mut *mut ::core::ffi::c_char,
mut infiles: *mut infileT,
mut outfiles: *mut outfileT,
mut linelenptr: *mut ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut i: ::core::ffi::c_long = 0;
let mut j: ::core::ffi::c_long = 0;
let mut noarg_exit: ::core::ffi::c_schar = 0;
noarg_exit = FALSE as ::core::ffi::c_schar;
StrNCopy(
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
*linelenptr = 0 as ::core::ffi::c_long;
if argc < 2 as ::core::ffi::c_int {
fprintf(sp1, OPTIONSHELPBRIEF.as_ptr());
exit(ABNORMAL_EXIT);
}
i = 1 as ::core::ffi::c_long;
while i < argc as ::core::ffi::c_long {
if *(*argv.offset(i as isize)).offset(0 as ::core::ffi::c_int as isize)
as ::core::ffi::c_int
== '-' as i32
{
if strlen(*argv.offset(i as isize)) == 1 as size_t {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"invalid command line argument -\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
} else if *(*argv.offset(i as isize)).offset(1 as ::core::ffi::c_int as isize)
as ::core::ffi::c_int
!= '-' as i32
{
j = 1 as ::core::ffi::c_long;
while (j as size_t) < strlen(*argv.offset(i as isize)) {
if *(*argv.offset(i as isize)).offset(j as isize) as ::core::ffi::c_int
== 'h' as i32
{
fprintf(sp1, OPTIONSHELPFULL.as_ptr());
exit(ABNORMAL_EXIT);
} else {
if *(*argv.offset(i as isize)).offset(j as isize) as ::core::ffi::c_int
== 'u' as i32
{
(*params).unwrapped = TRUE as ::core::ffi::c_schar;
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 't' as i32
{
(*params).costmode = TOPO as ::core::ffi::c_schar;
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'd' as i32
{
(*params).costmode = DEFO as ::core::ffi::c_schar;
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 's' as i32
{
(*params).costmode = SMOOTH as ::core::ffi::c_schar;
(*params).defomax = 0.0f64;
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'q' as i32
{
(*params).eval = TRUE as ::core::ffi::c_schar;
(*params).unwrapped = TRUE as ::core::ffi::c_schar;
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'C' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
ParseConfigLine(
*argv.offset(i as isize),
b"command line\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
0 as ::core::ffi::c_long,
infiles,
outfiles,
linelenptr,
params,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'f' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
ReadConfigFile(
*argv.offset(i as isize),
infiles,
outfiles,
linelenptr,
params,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'o' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'c' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'm' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*infiles).magfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'M' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*infiles).bytemaskfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'a' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
(*params).amplitude = TRUE as ::core::ffi::c_schar;
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'A' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
(*params).amplitude = FALSE as ::core::ffi::c_schar;
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'e' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*infiles).estfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'w' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*infiles).weightfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'g' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'G' as i32
{
(*params).regrowconncomps = TRUE as ::core::ffi::c_schar;
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'b' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
if StringToDouble(
*argv.offset(i as isize),
&raw mut (*params).bperp,
) != 0
|| (*params).bperp == 0.
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"option -%c requires non-zero decimal argument\n\0"
as *const u8
as *const ::core::ffi::c_char,
*(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.offset(j as isize)
as ::core::ffi::c_int,
);
exit(ABNORMAL_EXIT);
}
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'p' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
if StringToDouble(*argv.offset(i as isize), &raw mut (*params).p)
!= 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"option -%c requires decimal argument\n\0" as *const u8
as *const ::core::ffi::c_char,
*(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.offset(j as isize)
as ::core::ffi::c_int,
);
exit(ABNORMAL_EXIT);
}
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'i' as i32
{
(*params).initonly = TRUE as ::core::ffi::c_schar;
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'S' as i32
{
(*params).onetilereopt = TRUE as ::core::ffi::c_schar;
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'k' as i32
{
(*params).rmtmptile = FALSE as ::core::ffi::c_schar;
(*params).rmtileinit = FALSE as ::core::ffi::c_schar;
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'n' as i32
{
(*params).costmode = NOSTATCOSTS as ::core::ffi::c_schar;
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'v' as i32
{
(*params).verbose = TRUE as ::core::ffi::c_schar;
} else if *(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int
== 'l' as i32
{
i += 1;
if i < argc as ::core::ffi::c_long
&& j as size_t
== strlen(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.wrapping_sub(1 as size_t)
{
StrNCopy(
&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
break;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unrecognized option -%c\n\0" as *const u8
as *const ::core::ffi::c_char,
*(*argv.offset(i as isize)).offset(j as isize)
as ::core::ffi::c_int,
);
exit(ABNORMAL_EXIT);
}
if noarg_exit != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"option -%c requires an argument\n\0" as *const u8
as *const ::core::ffi::c_char,
*(*argv.offset((i - 1 as ::core::ffi::c_long) as isize))
.offset(j as isize)
as ::core::ffi::c_int,
);
exit(ABNORMAL_EXIT);
}
j += 1;
}
}
} else {
if strcmp(
*argv.offset(i as isize),
b"--costinfile\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
i += 1;
if i < argc as ::core::ffi::c_long {
StrNCopy(
&raw mut (*infiles).costinfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
*argv.offset(i as isize),
b"--costoutfile\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
i += 1;
if i < argc as ::core::ffi::c_long {
StrNCopy(
&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
*argv.offset(i as isize),
b"--debug\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
*argv.offset(i as isize),
b"--dumpall\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).dumpall = TRUE as ::core::ffi::c_schar;
} else if strcmp(
*argv.offset(i as isize),
b"--mst\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).initmethod = MSTINIT as ::core::ffi::c_schar;
} else if strcmp(
*argv.offset(i as isize),
b"--mcf\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).initmethod = MCFINIT as ::core::ffi::c_schar;
} else if strcmp(
*argv.offset(i as isize),
b"--aa\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if (i + 2 as ::core::ffi::c_long) < argc as ::core::ffi::c_long {
i += 1;
StrNCopy(
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
i += 1;
StrNCopy(
&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
(*infiles).ampfileformat = FLOAT_DATA as ::core::ffi::c_schar;
(*params).amplitude = TRUE as ::core::ffi::c_schar;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
*argv.offset(i as isize),
b"--AA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
i += 1;
if (i + 1 as ::core::ffi::c_long) < argc as ::core::ffi::c_long {
let fresh161 = i;
i = i + 1;
StrNCopy(
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
*argv.offset(fresh161 as isize),
MAXSTRLEN as size_t,
);
StrNCopy(
&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
(*infiles).ampfileformat = FLOAT_DATA as ::core::ffi::c_schar;
(*params).amplitude = FALSE as ::core::ffi::c_schar;
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
*argv.offset(i as isize),
b"--tile\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
i += 1;
if (i + 3 as ::core::ffi::c_long) < argc as ::core::ffi::c_long {
let fresh162 = i;
i = i + 1;
if StringToLong(
*argv.offset(fresh162 as isize),
&raw mut (*params).ntilerow,
) != 0
|| {
let fresh163 = i;
i = i + 1;
StringToLong(
*argv.offset(fresh163 as isize),
&raw mut (*params).ntilecol,
) != 0
}
|| {
let fresh164 = i;
i = i + 1;
StringToLong(
*argv.offset(fresh164 as isize),
&raw mut (*params).rowovrlp,
) != 0
}
|| StringToLong(*argv.offset(i as isize), &raw mut (*params).colovrlp)
!= 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"option %s requires four integer arguments\n\0" as *const u8
as *const ::core::ffi::c_char,
*argv.offset((i - 4 as ::core::ffi::c_long) as isize),
);
exit(ABNORMAL_EXIT);
}
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
*argv.offset(i as isize),
b"--piece\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
i += 1;
if (i + 3 as ::core::ffi::c_long) < argc as ::core::ffi::c_long {
let fresh165 = i;
i = i + 1;
if StringToLong(
*argv.offset(fresh165 as isize),
&raw mut (*params).piecefirstrow,
) != 0
|| {
let fresh166 = i;
i = i + 1;
StringToLong(
*argv.offset(fresh166 as isize),
&raw mut (*params).piecefirstcol,
) != 0
}
|| {
let fresh167 = i;
i = i + 1;
StringToLong(
*argv.offset(fresh167 as isize),
&raw mut (*params).piecenrow,
) != 0
}
|| StringToLong(*argv.offset(i as isize), &raw mut (*params).piecencol)
!= 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"option %s requires four integer arguments\n\0" as *const u8
as *const ::core::ffi::c_char,
*argv.offset((i - 4 as ::core::ffi::c_long) as isize),
);
exit(ABNORMAL_EXIT);
}
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
*argv.offset(i as isize),
b"--nproc\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
i += 1;
if i < argc as ::core::ffi::c_long {
if StringToLong(*argv.offset(i as isize), &raw mut (*params).nthreads) != 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"option %s requires an integer arguemnt\n\0" as *const u8
as *const ::core::ffi::c_char,
*argv.offset((i - 1 as ::core::ffi::c_long) as isize),
);
exit(ABNORMAL_EXIT);
}
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
*argv.offset(i as isize),
b"--tiledir\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
i += 1;
if i < argc as ::core::ffi::c_long {
StrNCopy(
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
} else {
noarg_exit = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
*argv.offset(i as isize),
b"--assemble\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).assembleonly = TRUE as ::core::ffi::c_schar;
} else if strcmp(
*argv.offset(i as isize),
b"--copyright\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
*argv.offset(i as isize),
b"--info\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
fprintf(sp1, COPYRIGHT.as_ptr());
exit(ABNORMAL_EXIT);
} else if strcmp(
*argv.offset(i as isize),
b"--help\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(sp1, OPTIONSHELPFULL.as_ptr());
exit(ABNORMAL_EXIT);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unrecognized option %s\n\0" as *const u8 as *const ::core::ffi::c_char,
*argv.offset(i as isize),
);
exit(ABNORMAL_EXIT);
}
if noarg_exit != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"incorrect number of arguments for option %s\n\0" as *const u8
as *const ::core::ffi::c_char,
*argv.offset((i - 1 as ::core::ffi::c_long) as isize),
);
exit(ABNORMAL_EXIT);
}
}
} else if strlen(&raw mut (*infiles).infile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
MAXSTRLEN as size_t,
);
} else if *linelenptr == 0 as ::core::ffi::c_long {
if StringToLong(*argv.offset(i as isize), linelenptr) != 0
|| *linelenptr <= 0 as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"line length must be positive integer\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"multiple input files: %s and %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
*argv.offset(i as isize),
);
exit(ABNORMAL_EXIT);
}
i += 1;
}
if strlen(&raw mut (*infiles).infile as *mut ::core::ffi::c_char) == 0 || *linelenptr == 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"not enough input arguments. type %s -h for help\n\0" as *const u8
as *const ::core::ffi::c_char,
PROGRAMNAME.as_ptr(),
);
exit(ABNORMAL_EXIT);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CheckParams(
mut infiles: *mut infileT,
mut outfiles: *mut outfileT,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut ni: ::core::ffi::c_long = 0;
let mut nj: ::core::ffi::c_long = 0;
let mut n_0: ::core::ffi::c_long = 0;
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
fp = fopen(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
b"a\0" as *const u8 as *const ::core::ffi::c_char,
) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"file %s is not writable\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
} else {
if ftell(fp) != 0 {
fclose(fp);
} else {
fclose(fp);
remove(&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char);
}
if strcmp(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
) == 0
&& (*params).eval == 0
&& (*params).regrowconncomps == 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: output will overwrite input\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
}
if (*params).initonly as ::core::ffi::c_int != 0
&& (*params).unwrapped as ::core::ffi::c_int != 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"cannot use initialize-only mode with unwrapped input\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).initonly as ::core::ffi::c_int != 0
&& (*params).p >= 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"cannot use initialize-only mode with Lp costs\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).costmode as ::core::ffi::c_int == NOSTATCOSTS
&& !((*params).initonly as ::core::ffi::c_int != 0
|| (*params).p >= 0 as ::core::ffi::c_int as ::core::ffi::c_double)
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"no-statistical-costs option can only be used in\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
sp0,
b" initialize-only or Lp-norm modes\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if strlen(&raw mut (*infiles).costinfile as *mut ::core::ffi::c_char) != 0
&& (*params).costmode as ::core::ffi::c_int == NOSTATCOSTS
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"no-statistical-costs option cannot be given\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
sp0,
b" if input cost file is specified\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if strlen(&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char) != 0
&& (*params).costmode as ::core::ffi::c_int == NOSTATCOSTS
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"no-statistical-costs option cannot be given\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
sp0,
b" if output cost file is specified\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).earthradius <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"earth radius must be nonnegative\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).altitude != 0. {
if (*params).altitude > 0 as ::core::ffi::c_int as ::core::ffi::c_double {
(*params).orbitradius = (*params).earthradius + (*params).altitude;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"platform altitude must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
} else if (*params).orbitradius < (*params).earthradius {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"platform orbit radius must be greater than earth radius\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).costmode as ::core::ffi::c_int == TOPO
&& (*params).baseline < 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"baseline length must be nonnegative\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).costmode as ::core::ffi::c_int == TOPO
&& (*params).baseline == 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: zero baseline may give unpredictable results\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
if (*params).ncorrlooks <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"number of looks ncorrlooks must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).nearrange <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"slant range parameter nearrange must be positive (meters)\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).dr <= 0 as ::core::ffi::c_int as ::core::ffi::c_double
|| (*params).da <= 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"pixel spacings dr and da must be positive (meters)\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).lambda <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"wavelength lambda must be positive (meters)\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).kds <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"scattering model parameter kds must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).specularexp <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"scattering model parameter SPECULAREXP must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).dzrcritfactor < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"dzrcritfactor must be nonnegative\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).laywidth < 1 as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"layover window width laywidth must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).layminei < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"layover minimum brightness must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).sloperatiofactor < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"slope ratio fudge factor must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).sigsqei <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"intensity estimate variance must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).drho <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"correlation step size drho must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).rhosconst1 <= 0 as ::core::ffi::c_int as ::core::ffi::c_double
|| (*params).rhosconst2 <= 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameters rhosconst1 and rhosconst2 must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if strlen(&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char) == 0
&& ((*params).defaultcorr < 0 as ::core::ffi::c_int as ::core::ffi::c_double
|| (*params).defaultcorr > 1 as ::core::ffi::c_int as ::core::ffi::c_double)
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"default correlation must be between 0 and 1\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).rhominfactor < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter rhominfactor must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).ncorrlooksaz < 1 as ::core::ffi::c_long
|| (*params).ncorrlooksrange < 1 as ::core::ffi::c_long
|| (*params).nlooksaz < 1 as ::core::ffi::c_long
|| (*params).nlooksrange < 1 as ::core::ffi::c_long
|| (*params).nlooksother < 1 as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"numbers of looks must be positive integer\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if strlen(&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char) == 0 {
if (*params).ncorrlooksaz < (*params).nlooksaz {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"NCORRLOOKSAZ cannot be smaller than NLOOKSAZ\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
sp0,
b" setting NCORRLOOKSAZ to equal NLOOKSAZ\n\0" as *const u8
as *const ::core::ffi::c_char,
);
(*params).ncorrlooksaz = (*params).nlooksaz;
}
if (*params).ncorrlooksrange < (*params).nlooksrange {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"NCORRLOOKSRANGE cannot be smaller than NLOOKSRANGE\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
sp0,
b" setting NCORRLOOKSRANGE to equal NLOOKSRANGE\n\0" as *const u8
as *const ::core::ffi::c_char,
);
(*params).ncorrlooksrange = (*params).nlooksrange;
}
}
if (*params).azdzfactor < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter azdzfactor must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).dzeifactor < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter dzeifactor must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).dzeiweight < 0 as ::core::ffi::c_int as ::core::ffi::c_double
|| (*params).dzeiweight > 1.0f64
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter dzeiweight must be between 0 and 1\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).dzlayfactor < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter dzlayfactor must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).layconst <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter layconst must be positive\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).layfalloffconst < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter layfalloffconst must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).sigsqshortmin <= 0 as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter sigsqshortmin must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).sigsqlayfactor < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter sigsqlayfactor must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).defoazdzfactor < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter defoazdzfactor must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).defothreshfactor < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter defothreshfactor must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).defomax < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter defomax must be nonnegative\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).sigsqcorr < 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter sigsqcorr must be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).defolayconst <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter defolayconst must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).initmaxflow < 1 as ::core::ffi::c_long
&& (*params).initmaxflow != AUTOCALCSTATMAX as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"initialization maximum flow must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).arcmaxflowconst < 1 as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"arcmaxflowconst must be positive\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).maxflow < 1 as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"maxflow must be positive\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).krowei <= 0 as ::core::ffi::c_long || (*params).kcolei <= 0 as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"averaging window sizes krowei and kcolei must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).kperpdpsi <= 0 as ::core::ffi::c_long
|| (*params).kpardpsi <= 0 as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"averaging window sizes kperpdpsi and kpardpsi must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).threshold <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"numerical solver threshold must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).initdzr <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"initdzr must be positive\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).initdzstep <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"initdzstep must be positive\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).maxcost > POSSHORTRANGE as ::core::ffi::c_double
|| (*params).maxcost <= 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"maxcost must be positive and within range or short int\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).costscale <= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"cost scale factor costscale must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).p < 0 as ::core::ffi::c_int as ::core::ffi::c_double && (*params).p != PROBCOSTP {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Lp-norm parameter p should be nonnegative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).costmode as ::core::ffi::c_int == TOPO
&& (*params).maxflow * (*params).nshortcycle > POSSHORTRANGE as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"maxflow exceeds range of short int for given nshortcycle\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).costmode as ::core::ffi::c_int == DEFO
&& ceil((*params).defomax * (*params).nshortcycle as ::core::ffi::c_double)
> POSSHORTRANGE as ::core::ffi::c_double
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"defomax exceeds range of short int for given nshortcycle\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).nshortcycle < 1 as ::core::ffi::c_long
|| (*params).nshortcycle > MAXNSHORTCYCLE as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"illegal value for nshortcycle\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).maxnewnodeconst <= 0 as ::core::ffi::c_int as ::core::ffi::c_double
|| (*params).maxnewnodeconst > 1 as ::core::ffi::c_int as ::core::ffi::c_double
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"maxnewnodeconst must be between 0 and 1\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).nconnnodemin < 0 as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"nconnnodemin must be nonnegative\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*infiles).infileformat as ::core::ffi::c_int != FLOAT_DATA
|| strlen(&raw mut (*infiles).magfile as *mut ::core::ffi::c_char) != 0
{
(*params).havemagnitude = TRUE as ::core::ffi::c_schar;
} else {
(*params).havemagnitude = FALSE as ::core::ffi::c_schar;
}
if (*params).maxnflowcycles == USEMAXCYCLEFRACTION as ::core::ffi::c_long {
(*params).maxnflowcycles = LRound(
(*params).maxcyclefraction * nlines as ::core::ffi::c_double
/ (*params).ntilerow as ::core::ffi::c_double
* linelen as ::core::ffi::c_double
/ (*params).ntilecol as ::core::ffi::c_double,
);
}
if (*params).initmaxflow == AUTOCALCSTATMAX as ::core::ffi::c_long
&& !((*params).ntilerow == 1 as ::core::ffi::c_long
&& (*params).ntilecol == 1 as ::core::ffi::c_long)
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"initial maximum flow cannot be calculated automatically in tile mode\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if strlen(&raw mut (*infiles).bytemaskfile as *mut ::core::ffi::c_char) != 0
|| (*params).edgemasktop != 0
|| (*params).edgemaskbot != 0
|| (*params).edgemaskleft != 0
|| (*params).edgemaskright != 0
{
if (*params).initonly != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"masking not applicable for initialize-only mode\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
}
if (*params).edgemasktop < 0 as ::core::ffi::c_long
|| (*params).edgemaskbot < 0 as ::core::ffi::c_long
|| (*params).edgemaskleft < 0 as ::core::ffi::c_long
|| (*params).edgemaskright < 0 as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"edgemask parameters cannot be negative\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).edgemasktop + (*params).edgemaskbot >= nlines
|| (*params).edgemaskleft + (*params).edgemaskright >= linelen
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"edge masks cannot exceed input array size\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).ntilerow < 1 as ::core::ffi::c_long
|| (*params).ntilecol < 1 as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"numbers of tile rows and columns must be positive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).rowovrlp < 0 as ::core::ffi::c_long
|| (*params).colovrlp < 0 as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"tile overlaps must be nonnegative\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).ntilerow > 1 as ::core::ffi::c_long
|| (*params).ntilecol > 1 as ::core::ffi::c_long
{
ni = ceil(
(nlines + ((*params).ntilerow - 1 as ::core::ffi::c_long) * (*params).rowovrlp)
as ::core::ffi::c_double
/ (*params).ntilerow as ::core::ffi::c_double,
) as ::core::ffi::c_long;
nj = ceil(
(linelen + ((*params).ntilecol - 1 as ::core::ffi::c_long) * (*params).colovrlp)
as ::core::ffi::c_double
/ (*params).ntilecol as ::core::ffi::c_double,
) as ::core::ffi::c_long;
if (*params).ntilerow + (*params).rowovrlp > nlines
|| (*params).ntilecol + (*params).colovrlp > linelen
|| (*params).ntilerow * (*params).ntilerow > nlines
|| (*params).ntilecol * (*params).ntilecol > linelen
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"tiles too small or overlap too large for given input\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).minregionsize
> (nlines - ((*params).ntilerow - 1 as ::core::ffi::c_long) * (ni - (*params).rowovrlp))
* (linelen
- ((*params).ntilecol - 1 as ::core::ffi::c_long) * (nj - (*params).colovrlp))
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"minimum region size too large for given tile parameters\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if TMPTILEOUTFORMAT != ALT_LINE_DATA && TMPTILEOUTFORMAT != FLOAT_DATA {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unsupported TMPTILEOUTFORMAT value in complied binary\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if TMPTILEOUTFORMAT == FLOAT_DATA
&& (*outfiles).outfileformat as ::core::ffi::c_int != FLOAT_DATA
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"precompiled tile format precludes given output format\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).scndryarcflowmax < 1 as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"parameter scndryarcflowmax too small\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).initonly != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"initialize-only mode and tile mode are mutually exclusive\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).assembleonly != 0 {
n_0 = strlen(&raw mut (*params).tiledir as *mut ::core::ffi::c_char)
as ::core::ffi::c_long;
loop {
n_0 -= 1;
if !(n_0 > 0 as ::core::ffi::c_long
&& (*params).tiledir[n_0 as usize] as ::core::ffi::c_int == '/' as i32)
{
break;
}
(*params).tiledir[n_0 as usize] = '\0' as i32 as ::core::ffi::c_char;
}
if strlen(&raw mut (*params).tiledir as *mut ::core::ffi::c_char) == 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"tile directory name must be specified\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if strcmp(
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
b"/\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
(*params).rmtmptile = FALSE as ::core::ffi::c_schar;
}
if (*params).piecefirstrow != DEF_PIECEFIRSTROW as ::core::ffi::c_long
|| (*params).piecefirstcol != DEF_PIECEFIRSTCOL as ::core::ffi::c_long
|| (*params).piecenrow != DEF_PIECENROW as ::core::ffi::c_long
|| (*params).piecencol != DEF_PIECENCOL as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"piece-only mode cannot be used with multiple tiles\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).costmode as ::core::ffi::c_int == NOSTATCOSTS {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"no-statistical-costs option cannot be used in tile mode\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).rowovrlp < TILEOVRLPWARNTHRESH as ::core::ffi::c_long
|| (*params).colovrlp < TILEOVRLPWARNTHRESH as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: Tile overlap is small (may give bad results)\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
} else {
if (*params).assembleonly != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"assemble-only mode can only be used with multiple tiles\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).nthreads > 1 as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"only one tile--disregarding multiprocessor option\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
if (*params).rowovrlp != 0 || (*params).colovrlp != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"only one tile--disregarding tile overlap values\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
if (*params).onetilereopt != 0 {
fprintf(
sp0,
b"cannot do single-tile reoptimization without tiling params\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
}
if (*params).nthreads < 1 as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"number of processors must be at least one\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
} else if (*params).nthreads > MAXTHREADS as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"number of processors exceeds precomplied limit of %d\n\0" as *const u8
as *const ::core::ffi::c_char,
MAXTHREADS,
);
exit(ABNORMAL_EXIT);
}
(*params).piecefirstrow -= 1;
(*params).piecefirstcol -= 1;
if (*params).piecenrow == 0 {
(*params).piecenrow = nlines;
}
if (*params).piecencol == 0 {
(*params).piecencol = linelen;
}
if (*params).piecefirstrow < 0 as ::core::ffi::c_long
|| (*params).piecefirstcol < 0 as ::core::ffi::c_long
|| (*params).piecenrow < 1 as ::core::ffi::c_long
|| (*params).piecencol < 1 as ::core::ffi::c_long
|| (*params).piecefirstrow + (*params).piecenrow > nlines
|| (*params).piecefirstcol + (*params).piecencol > linelen
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"illegal values for piece of interferogram to unwrap\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).regrowconncomps != 0 {
if strlen(&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char) == 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"no connected component output file specified\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
(*params).unwrapped = TRUE as ::core::ffi::c_schar;
}
if (*params).minconncompfrac < 0 as ::core::ffi::c_int as ::core::ffi::c_double
|| (*params).minconncompfrac > 1 as ::core::ffi::c_int as ::core::ffi::c_double
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"illegal value for minimum connected component fraction\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).maxncomps <= 0 as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"illegal value for maximum number of connected components\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).maxncomps > UCHAR_MAX as ::core::ffi::c_long
&& (*params).conncompouttype == CONNCOMPOUTTYPEUCHAR
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: clipping max num conn comps to fit uchar out type\n\0" as *const u8
as *const ::core::ffi::c_char,
);
(*params).maxncomps = UCHAR_MAX as ::core::ffi::c_long;
}
if (*params).maxncomps > UINT_MAX as ::core::ffi::c_long
&& (*params).conncompouttype == CONNCOMPOUTTYPEUINT
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: clipping max num conn comps to fit uint out type\n\0" as *const u8
as *const ::core::ffi::c_char,
);
(*params).maxncomps = UINT_MAX as ::core::ffi::c_long;
}
if strlen(&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char) != 0 {
if (*params).initonly != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: connected component mask cannot be generated in initialize-only mode\n mask will not be output\n\0"
as *const u8 as *const ::core::ffi::c_char,
);
StrNCopy(
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if (*params).costmode as ::core::ffi::c_int == NOSTATCOSTS {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: connected component mask cannot be generated without statistical costs\n mask will not be output\n\0"
as *const u8 as *const ::core::ffi::c_char,
);
StrNCopy(
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadConfigFile(
mut conffile: *mut ::core::ffi::c_char,
mut infiles: *mut infileT,
mut outfiles: *mut outfileT,
mut linelenptr: *mut ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut parsestatus: ::core::ffi::c_int = 0;
let mut nlines: ::core::ffi::c_long = 0;
let mut nparams: ::core::ffi::c_long = 0;
let mut ptr: *mut ::core::ffi::c_char = ::core::ptr::null_mut::<::core::ffi::c_char>();
let mut buf: [::core::ffi::c_char; 2048] = [0; 2048];
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
if strlen(conffile) != 0 {
fp = fopen(conffile, b"r\0" as *const u8 as *const ::core::ffi::c_char) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unable to read configuration file %s\n\0" as *const u8
as *const ::core::ffi::c_char,
conffile,
);
exit(ABNORMAL_EXIT);
}
} else {
return 0 as ::core::ffi::c_int;
}
nlines = 0 as ::core::ffi::c_long;
nparams = 0 as ::core::ffi::c_long;
loop {
buf[0 as ::core::ffi::c_int as usize] = '\0' as i32 as ::core::ffi::c_char;
ptr = fgets(&raw mut buf as *mut ::core::ffi::c_char, MAXLINELEN, fp);
if ptr.is_null() && strlen(&raw mut buf as *mut ::core::ffi::c_char) == 0 {
break;
}
nlines += 1;
if strlen(&raw mut buf as *mut ::core::ffi::c_char)
>= (MAXLINELEN - 1 as ::core::ffi::c_int) as size_t
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"line %ld in file %s exceeds maximum line length\n\0" as *const u8
as *const ::core::ffi::c_char,
nlines,
conffile,
);
exit(ABNORMAL_EXIT);
}
parsestatus = ParseConfigLine(
&raw mut buf as *mut ::core::ffi::c_char,
conffile,
nlines,
infiles,
outfiles,
linelenptr,
params,
);
if parsestatus > 0 as ::core::ffi::c_int {
nparams += 1;
}
}
fclose(fp);
if nparams > 1 as ::core::ffi::c_long {
fprintf(
sp1,
b"%ld parameters input from file %s (%ld lines total)\n\0" as *const u8
as *const ::core::ffi::c_char,
nparams,
conffile,
nlines,
);
} else if nlines > 1 as ::core::ffi::c_long {
fprintf(
sp1,
b"%ld parameter input from file %s (%ld lines total)\n\0" as *const u8
as *const ::core::ffi::c_char,
nparams,
conffile,
nlines,
);
} else {
fprintf(
sp1,
b"%ld parameter input from file %s (%ld line total)\n\0" as *const u8
as *const ::core::ffi::c_char,
nparams,
conffile,
nlines,
);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn ParseConfigLine(
mut buf: *mut ::core::ffi::c_char,
mut conffile: *mut ::core::ffi::c_char,
mut nlines: ::core::ffi::c_long,
mut infiles: *mut infileT,
mut outfiles: *mut outfileT,
mut linelenptr: *mut ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut nparams: ::core::ffi::c_int = 0;
let mut nfields: ::core::ffi::c_long = 0;
let mut str1: [::core::ffi::c_char; 2048] = [0; 2048];
let mut str2: [::core::ffi::c_char; 2048] = [0; 2048];
let mut badparam: ::core::ffi::c_schar = 0;
nparams = 0 as ::core::ffi::c_int;
badparam = FALSE as ::core::ffi::c_schar;
nfields = sscanf(
buf,
b"%s %s\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut str1 as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
) as ::core::ffi::c_long;
if nfields == 1 as ::core::ffi::c_long
&& isalnum(str1[0 as ::core::ffi::c_int as usize] as ::core::ffi::c_int) != 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unrecognized configuration parameter '%s' (%s:%ld)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut str1 as *mut ::core::ffi::c_char,
conffile,
nlines,
);
exit(ABNORMAL_EXIT);
}
if nfields == 2 as ::core::ffi::c_long
&& isalnum(str1[0 as ::core::ffi::c_int as usize] as ::core::ffi::c_int) != 0
{
nparams += 1;
if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"INFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"OUTFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"WEIGHTFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*infiles).weightfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"AMPFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"AMPFILE1\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strlen(&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char) != 0
&& (*params).amplitude == 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"cannot specify both amplitude and power\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
StrNCopy(
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"AMPFILE2\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strlen(&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char) != 0
&& (*params).amplitude == 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"cannot specify both amplitude and power\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
StrNCopy(
&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
(*infiles).ampfileformat = FLOAT_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"PWRFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"PWRFILE1\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strlen(&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char) != 0
&& (*params).amplitude as ::core::ffi::c_int != 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"cannot specify both amplitude and power\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
StrNCopy(
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
(*params).amplitude = FALSE as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"PWRFILE2\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strlen(&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char) != 0
&& (*params).amplitude as ::core::ffi::c_int != 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"cannot specify both amplitude and power\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
StrNCopy(
&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
(*params).amplitude = FALSE as ::core::ffi::c_schar;
(*infiles).ampfileformat = FLOAT_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MAGFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*infiles).magfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"CORRFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"ESTIMATEFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*infiles).estfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"LINELENGTH\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"LINELEN\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(&raw mut str2 as *mut ::core::ffi::c_char, linelenptr)
as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"STATCOSTMODE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"TOPO\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).costmode = TOPO as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"DEFO\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).costmode = DEFO as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"SMOOTH\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).costmode = SMOOTH as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"NOSTATCOSTS\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).costmode = NOSTATCOSTS as ::core::ffi::c_schar;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"INITONLY\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = SetBooleanSignedChar(
&raw mut (*params).initonly,
&raw mut str2 as *mut ::core::ffi::c_char,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"UNWRAPPED_IN\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = SetBooleanSignedChar(
&raw mut (*params).unwrapped,
&raw mut str2 as *mut ::core::ffi::c_char,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DEBUG\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DUMPALL\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = SetBooleanSignedChar(
&raw mut (*params).dumpall,
&raw mut str2 as *mut ::core::ffi::c_char,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"VERBOSE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = SetBooleanSignedChar(
&raw mut (*params).verbose,
&raw mut str2 as *mut ::core::ffi::c_char,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"INITMETHOD\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"MST\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"mst\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).initmethod = MSTINIT as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"MCF\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"mcf\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"CS2\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"cs2\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).initmethod = MCFINIT as ::core::ffi::c_schar;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"ORBITRADIUS\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).orbitradius,
) as ::core::ffi::c_schar;
if badparam == 0 {
(*params).altitude = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"ALTITUDE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).altitude,
) as ::core::ffi::c_schar;
if badparam == 0 {
(*params).orbitradius = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"EARTHRADIUS\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).earthradius,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"BPERP\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).bperp,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"TRANSMITMODE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"PINGPONG\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"REPEATPASS\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).transmitmode = PINGPONG as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"SINGLEANTENNATRANSMIT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"SAT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"SINGLEANTTRANSMIT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).transmitmode = SINGLEANTTRANSMIT as ::core::ffi::c_schar;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"BASELINE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).baseline,
) as ::core::ffi::c_schar;
if badparam == 0 {
(*params).bperp = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"BASELINEANGLE_RAD\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).baselineangle,
) as ::core::ffi::c_schar;
if badparam == 0 {
(*params).bperp = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"BASELINEANGLE_DEG\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).baselineangle,
) as ::core::ffi::c_schar;
if badparam == 0 {
(*params).baselineangle *= PI / 180.0f64;
(*params).bperp = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NLOOKSRANGE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).nlooksrange,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NLOOKSAZ\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).nlooksaz,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NLOOKSOTHER\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).nlooksother,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NCORRLOOKS\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).ncorrlooks,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NCORRLOOKSRANGE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).ncorrlooksrange,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NCORRLOOKSAZ\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).ncorrlooksaz,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NEARRANGE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NOMRANGE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).nearrange,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).dr,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).da,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"RANGERES\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).rangeres,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"AZRES\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).azres,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"LAMBDA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).lambda,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"KDS\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"KSD\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"KSD\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: parameter KSD interpreted as KDS (%s:%ld)\n\0" as *const u8
as *const ::core::ffi::c_char,
conffile,
nlines,
);
}
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).kds,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"SPECULAREXP\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"N\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).specularexp,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DZRCRITFACTOR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).dzrcritfactor,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"SHADOW\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = SetBooleanSignedChar(
&raw mut (*params).shadow,
&raw mut str2 as *mut ::core::ffi::c_char,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DZEIMIN\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).dzeimin,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"LAYWIDTH\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).laywidth,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"LAYMINEI\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).layminei,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"SLOPERATIOFACTOR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).sloperatiofactor,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"SIGSQEI\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).sigsqei,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DRHO\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).drho,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"RHOSCONST1\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).rhosconst1,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"RHOSCONST2\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).rhosconst2,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"CSTD1\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).cstd1,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"CSTD2\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).cstd2,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"CSTD3\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).cstd3,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DEFAULTCORR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).defaultcorr,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"RHOMINFACTOR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).rhominfactor,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DZLAYPEAK\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).dzlaypeak,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"AZDZFACTOR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).azdzfactor,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DZEIFACTOR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).dzeifactor,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DZEIWEIGHT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).dzeiweight,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DZLAYFACTOR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).dzlayfactor,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"LAYCONST\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).layconst,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"LAYFALLOFFCONST\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).layfalloffconst,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"SIGSQSHORTMIN\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).sigsqshortmin,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"SIGSQLAYFACTOR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).sigsqlayfactor,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DEFOAZDZFACTOR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).defoazdzfactor,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DEFOTHRESHFACTOR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).defothreshfactor,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DEFOMAX_CYCLE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).defomax,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DEFOMAX_RAD\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).defomax,
) as ::core::ffi::c_schar;
if badparam == 0 {
(*params).defomax /= TWOPI;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"SIGSQCORR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).sigsqcorr,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DEFOLAYCONST\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DEFOCONST\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).defolayconst,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"INITMAXFLOW\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).initmaxflow,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"ARCMAXFLOWCONST\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).arcmaxflowconst,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MAXFLOW\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).maxflow,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"KROWEI\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"KROW\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).krowei,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"KCOLEI\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"KCOL\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).kcolei,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"KPERPDPSI\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).kperpdpsi,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"KPARDPSI\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).kpardpsi,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"THRESHOLD\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).threshold,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"INITDZR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).initdzr,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"INITDZSTEP\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).initdzstep,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MAXCOST\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).maxcost,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"COSTSCALE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).costscale,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"COSTSCALEAMBIGHT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).costscaleambight,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DNOMINCANGLE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).dnomincangle,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"CS2SCALEFACTOR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).cs2scalefactor,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NMAJORPRUNE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).nmajorprune,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"PRUNECOSTTHRESH\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).prunecostthresh,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"PLPN\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).p,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"BIDIRLPN\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = SetBooleanSignedChar(
&raw mut (*params).bidirlpn,
&raw mut str2 as *mut ::core::ffi::c_char,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"EDGEMASKTOP\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).edgemasktop,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"EDGEMASKBOT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).edgemaskbot,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"EDGEMASKLEFT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).edgemaskleft,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"EDGEMASKRIGHT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).edgemaskright,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"PIECEFIRSTROW\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).piecefirstrow,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"PIECEFIRSTCOL\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).piecefirstcol,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"PIECENROW\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).piecenrow,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"PIECENCOL\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).piecencol,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NTILEROW\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).ntilerow,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NTILECOL\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).ntilecol,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"ROWOVRLP\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).rowovrlp,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"COLOVRLP\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).colovrlp,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"TILECOSTTHRESH\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).tilecostthresh,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MINREGIONSIZE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).minregionsize,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"TILEEDGEWEIGHT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).tileedgeweight,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"SCNDRYARCFLOWMAX\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).scndryarcflowmax,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"TILEDIR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"ASSEMBLEONLY\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = SetBooleanSignedChar(
&raw mut (*params).assembleonly,
&raw mut str2 as *mut ::core::ffi::c_char,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"SINGLETILEREOPTIMIZE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = SetBooleanSignedChar(
&raw mut (*params).onetilereopt,
&raw mut str2 as *mut ::core::ffi::c_char,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"RMTMPTILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = SetBooleanSignedChar(
&raw mut (*params).rmtmptile,
&raw mut str2 as *mut ::core::ffi::c_char,
);
(*params).rmtileinit = (*params).rmtmptile;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MINCONNCOMPFRAC\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).minconncompfrac,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"CONNCOMPTHRESH\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).conncompthresh,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MAXNCOMPS\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).maxncomps,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"CONNCOMPOUTTYPE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"UCHAR\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).conncompouttype = CONNCOMPOUTTYPEUCHAR;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"UINT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*params).conncompouttype = CONNCOMPOUTTYPEUINT;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NSHORTCYCLE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).nshortcycle,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MAXNEWNODECONST\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).maxnewnodeconst,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MAXNFLOWCYCLES\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).maxnflowcycles,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MAXCYCLEFRACTION\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToDouble(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).maxcyclefraction,
) as ::core::ffi::c_schar;
(*params).maxnflowcycles = USEMAXCYCLEFRACTION as ::core::ffi::c_long;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"SOURCEMODE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: SOURCEMODE keyword no longer supported--ignoring\n\0" as *const u8
as *const ::core::ffi::c_char,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NCONNNODEMIN\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).nconnnodemin,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NPROC\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
|| strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"NTHREADS\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = StringToLong(
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut (*params).nthreads,
) as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"COSTINFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*infiles).costinfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"BYTEMASKFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*infiles).bytemaskfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"DOTILEMASKFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*infiles).dotilemaskfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"COSTOUTFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"LOGFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"INFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"COMPLEX_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).infileformat = COMPLEX_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"FLOAT_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).infileformat = FLOAT_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_LINE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).infileformat = ALT_LINE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_SAMPLE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).infileformat = ALT_SAMPLE_DATA as ::core::ffi::c_schar;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"UNWRAPPEDINFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_LINE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).unwrappedinfileformat = ALT_LINE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_SAMPLE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).unwrappedinfileformat = ALT_SAMPLE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"FLOAT_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).unwrappedinfileformat = FLOAT_DATA as ::core::ffi::c_schar;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MAGFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_LINE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).magfileformat = ALT_LINE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_SAMPLE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).magfileformat = ALT_SAMPLE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"FLOAT_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).magfileformat = FLOAT_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"COMPLEX_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).magfileformat = COMPLEX_DATA as ::core::ffi::c_schar;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"OUTFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_LINE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*outfiles).outfileformat = ALT_LINE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_SAMPLE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*outfiles).outfileformat = ALT_SAMPLE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"FLOAT_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*outfiles).outfileformat = FLOAT_DATA as ::core::ffi::c_schar;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"CORRFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_LINE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).corrfileformat = ALT_LINE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_SAMPLE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).corrfileformat = ALT_SAMPLE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"FLOAT_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).corrfileformat = FLOAT_DATA as ::core::ffi::c_schar;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"AMPFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_LINE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).ampfileformat = ALT_LINE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_SAMPLE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).ampfileformat = ALT_SAMPLE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"FLOAT_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).ampfileformat = FLOAT_DATA as ::core::ffi::c_schar;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"ESTFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_LINE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).estfileformat = ALT_LINE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"ALT_SAMPLE_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).estfileformat = ALT_SAMPLE_DATA as ::core::ffi::c_schar;
} else if strcmp(
&raw mut str2 as *mut ::core::ffi::c_char,
b"FLOAT_DATA\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
(*infiles).estfileformat = FLOAT_DATA as ::core::ffi::c_schar;
} else {
badparam = TRUE as ::core::ffi::c_schar;
}
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"INITFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).initfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"FLOWFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).flowfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"EIFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).eifile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"ROWCOSTFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).rowcostfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"COLCOSTFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).colcostfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MSTROWCOSTFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).mstrowcostfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MSTCOLCOSTFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).mstcolcostfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"MSTCOSTSFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).mstcostsfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"CORRDUMPFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).corrdumpfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"RAWCORRDUMPFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).rawcorrdumpfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"CONNCOMPFILE\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
StrNCopy(
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else if strcmp(
&raw mut str1 as *mut ::core::ffi::c_char,
b"REGROWCONNCOMPS\0" as *const u8 as *const ::core::ffi::c_char,
) == 0
{
badparam = SetBooleanSignedChar(
&raw mut (*params).regrowconncomps,
&raw mut str2 as *mut ::core::ffi::c_char,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unrecognized configuration parameter '%s' (%s:%ld)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut str1 as *mut ::core::ffi::c_char,
conffile,
nlines,
);
exit(ABNORMAL_EXIT);
}
if badparam != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"illegal argument %s for parameter %s (%s:%ld)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut str2 as *mut ::core::ffi::c_char,
&raw mut str1 as *mut ::core::ffi::c_char,
conffile,
nlines,
);
exit(ABNORMAL_EXIT);
}
}
return nparams;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn WriteConfigLogFile(
mut argc: ::core::ffi::c_int,
mut argv: *mut *mut ::core::ffi::c_char,
mut infiles: *mut infileT,
mut outfiles: *mut outfileT,
mut linelen: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut t: [time_t; 1] = [0; 1];
let mut k: ::core::ffi::c_long = 0;
let mut buf: [::core::ffi::c_char; 512] = [0; 512];
let mut ptr: *mut ::core::ffi::c_char = ::core::ptr::null_mut::<::core::ffi::c_char>();
let mut hostnamestr: [::core::ffi::c_char; 512] = [0; 512];
if strlen(&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char) != 0 {
fp = fopen(
&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char,
b"w\0" as *const u8 as *const ::core::ffi::c_char,
) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unable to write to log file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
fprintf(
sp1,
b"Logging run-time parameters to file %s\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char,
);
fprintf(
fp,
b"# %s v%s\n\0" as *const u8 as *const ::core::ffi::c_char,
PROGRAMNAME.as_ptr(),
VERSION.as_ptr(),
);
time(&raw mut t as *mut time_t);
fprintf(
fp,
b"# Log file generated %s\0" as *const u8 as *const ::core::ffi::c_char,
ctime(&raw mut t as *mut time_t),
);
if gethostname(
&raw mut hostnamestr as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
) != 0
{
fprintf(
fp,
b"# Could not determine host name\n\0" as *const u8 as *const ::core::ffi::c_char,
);
} else {
fprintf(
fp,
b"# Host name: %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut hostnamestr as *mut ::core::ffi::c_char,
);
}
fprintf(
fp,
b"# PID %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).parentpid,
);
ptr = getcwd(
&raw mut buf as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
if !ptr.is_null() {
fprintf(
fp,
b"# Current working directory: %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut buf as *mut ::core::ffi::c_char,
);
} else {
fprintf(
fp,
b"# Could not determine current working directory\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
fprintf(
fp,
b"# Command line call:\0" as *const u8 as *const ::core::ffi::c_char,
);
k = 0 as ::core::ffi::c_long;
while k < argc as ::core::ffi::c_long {
fprintf(
fp,
b" %s\0" as *const u8 as *const ::core::ffi::c_char,
*argv.offset(k as isize),
);
k += 1;
}
fprintf(fp, b"\n\n\0" as *const u8 as *const ::core::ffi::c_char);
fprintf(
fp,
b"# Data type size information for executable as compiled\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"# sizeof(short): %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
::core::mem::size_of::<::core::ffi::c_short>(),
);
fprintf(
fp,
b"# sizeof(int): %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
::core::mem::size_of::<::core::ffi::c_int>(),
);
fprintf(
fp,
b"# sizeof(long): %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
::core::mem::size_of::<::core::ffi::c_long>(),
);
fprintf(
fp,
b"# sizeof(float): %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
::core::mem::size_of::<::core::ffi::c_float>(),
);
fprintf(
fp,
b"# sizeof(double): %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
::core::mem::size_of::<::core::ffi::c_double>(),
);
fprintf(
fp,
b"# sizeof(void *): %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
::core::mem::size_of::<*mut ::core::ffi::c_void>(),
);
fprintf(
fp,
b"# sizeof(size_t): %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
::core::mem::size_of::<size_t>(),
);
fprintf(fp, b"\n\0" as *const u8 as *const ::core::ffi::c_char);
fprintf(
fp,
b"# File input and output and runtime options\n\0" as *const u8
as *const ::core::ffi::c_char,
);
LogStringParam(
fp,
b"INFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
);
fprintf(
fp,
b"LINELENGTH %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
linelen,
);
LogStringParam(
fp,
b"OUTFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"WEIGHTFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*infiles).weightfile as *mut ::core::ffi::c_char,
);
if (*params).amplitude != 0 {
if strlen(&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char) != 0 {
LogStringParam(
fp,
b"AMPFILE1\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"AMPFILE2\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char,
);
} else {
LogStringParam(
fp,
b"AMPFILE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
);
}
} else if strlen(&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char) != 0 {
LogStringParam(
fp,
b"PWRFILE1\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"PWRFILE2\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char,
);
} else {
LogStringParam(
fp,
b"PWRFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
);
}
LogStringParam(
fp,
b"MAGFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*infiles).magfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"CORRFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"ESTIMATEFILE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*infiles).estfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"COSTINFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*infiles).costinfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"COSTOUTFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"BYTEMASKFILE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*infiles).bytemaskfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"LOGFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char,
);
if (*params).costmode as ::core::ffi::c_int == TOPO {
fprintf(
fp,
b"STATCOSTMODE TOPO\n\0" as *const u8 as *const ::core::ffi::c_char,
);
} else if (*params).costmode as ::core::ffi::c_int == DEFO {
fprintf(
fp,
b"STATCOSTMODE DEFO\n\0" as *const u8 as *const ::core::ffi::c_char,
);
} else if (*params).costmode as ::core::ffi::c_int == SMOOTH {
fprintf(
fp,
b"STATCOSTMODE SMOOTH\n\0" as *const u8 as *const ::core::ffi::c_char,
);
} else if (*params).costmode as ::core::ffi::c_int == NOSTATCOSTS {
fprintf(
fp,
b"STATCOSTMODE NOSTATCOSTS\n\0" as *const u8 as *const ::core::ffi::c_char,
);
}
LogBoolParam(
fp,
b"INITONLY\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
(*params).initonly,
);
LogBoolParam(
fp,
b"UNWRAPPED_IN\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*params).unwrapped,
);
LogBoolParam(
fp,
b"DEBUG\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
(*params).dumpall,
);
if (*params).initmethod as ::core::ffi::c_int == MSTINIT {
fprintf(
fp,
b"INITMETHOD MST\n\0" as *const u8 as *const ::core::ffi::c_char,
);
} else if (*params).initmethod as ::core::ffi::c_int == MCFINIT {
fprintf(
fp,
b"INITMETHOD MCF\n\0" as *const u8 as *const ::core::ffi::c_char,
);
}
LogBoolParam(
fp,
b"VERBOSE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
(*params).verbose,
);
fprintf(
fp,
b"\n# File Formats\n\0" as *const u8 as *const ::core::ffi::c_char,
);
LogFileFormat(
fp,
b"INFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*infiles).infileformat,
);
LogFileFormat(
fp,
b"OUTFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*outfiles).outfileformat,
);
LogFileFormat(
fp,
b"AMPFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*infiles).ampfileformat,
);
LogFileFormat(
fp,
b"MAGFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*infiles).magfileformat,
);
LogFileFormat(
fp,
b"CORRFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*infiles).corrfileformat,
);
LogFileFormat(
fp,
b"ESTFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*infiles).estfileformat,
);
LogFileFormat(
fp,
b"UNWRAPPEDINFILEFORMAT\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*infiles).unwrappedinfileformat,
);
fprintf(
fp,
b"\n# SAR and Geometry Parameters\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"ALTITUDE %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).orbitradius - (*params).earthradius,
);
fprintf(
fp,
b"# ORBITRADIUS %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).orbitradius,
);
fprintf(
fp,
b"EARTHRADIUS %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).earthradius,
);
if (*params).bperp != 0. {
fprintf(
fp,
b"BPERP %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).bperp,
);
} else {
fprintf(
fp,
b"BASELINE %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).baseline,
);
fprintf(
fp,
b"BASELINEANGLE_DEG %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).baselineangle * (180.0f64 / PI),
);
}
if (*params).transmitmode as ::core::ffi::c_int == PINGPONG {
fprintf(
fp,
b"TRANSMITMODE REPEATPASS\n\0" as *const u8 as *const ::core::ffi::c_char,
);
} else if (*params).transmitmode as ::core::ffi::c_int == SINGLEANTTRANSMIT {
fprintf(
fp,
b"TRANSMITMODE SINGLEANTENNATRANSMIT\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
fprintf(
fp,
b"NEARRANGE %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).nearrange,
);
fprintf(
fp,
b"DR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).dr,
);
fprintf(
fp,
b"DA %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).da,
);
fprintf(
fp,
b"RANGERES %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).rangeres,
);
fprintf(
fp,
b"AZRES %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).azres,
);
fprintf(
fp,
b"LAMBDA %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).lambda,
);
fprintf(
fp,
b"NLOOKSRANGE %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).nlooksrange,
);
fprintf(
fp,
b"NLOOKSAZ %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).nlooksaz,
);
fprintf(
fp,
b"NLOOKSOTHER %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).nlooksother,
);
fprintf(
fp,
b"NCORRLOOKS %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).ncorrlooks,
);
fprintf(
fp,
b"NCORRLOOKSRANGE %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).ncorrlooksrange,
);
fprintf(
fp,
b"NCORRLOOKSAZ %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).ncorrlooksaz,
);
fprintf(
fp,
b"\n# Scattering model parameters\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"KDS %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).kds,
);
fprintf(
fp,
b"SPECULAREXP %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).specularexp,
);
fprintf(
fp,
b"DZRCRITFACTOR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).dzrcritfactor,
);
LogBoolParam(
fp,
b"SHADOW\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
(*params).shadow,
);
fprintf(
fp,
b"DZEIMIN %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).dzeimin,
);
fprintf(
fp,
b"LAYWIDTH %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).laywidth,
);
fprintf(
fp,
b"LAYMINEI %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).layminei,
);
fprintf(
fp,
b"SLOPERATIOFACTOR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).sloperatiofactor,
);
fprintf(
fp,
b"SIGSQEI %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).sigsqei,
);
fprintf(
fp,
b"\n# Decorrelation model parameters\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"DRHO %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).drho,
);
fprintf(
fp,
b"RHOSCONST1 %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).rhosconst1,
);
fprintf(
fp,
b"RHOSCONST2 %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).rhosconst2,
);
fprintf(
fp,
b"CSTD1 %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).cstd1,
);
fprintf(
fp,
b"CSTD2 %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).cstd2,
);
fprintf(
fp,
b"CSTD3 %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).cstd3,
);
fprintf(
fp,
b"DEFAULTCORR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).defaultcorr,
);
fprintf(
fp,
b"RHOMINFACTOR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).rhominfactor,
);
fprintf(
fp,
b"\n# PDF model parameters\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"DZLAYPEAK %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).dzlaypeak,
);
fprintf(
fp,
b"AZDZFACTOR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).azdzfactor,
);
fprintf(
fp,
b"DZEIFACTOR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).dzeifactor,
);
fprintf(
fp,
b"DZEIWEIGHT %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).dzeiweight,
);
fprintf(
fp,
b"DZLAYFACTOR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).dzlayfactor,
);
fprintf(
fp,
b"LAYCONST %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).layconst,
);
fprintf(
fp,
b"LAYFALLOFFCONST %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).layfalloffconst,
);
fprintf(
fp,
b"SIGSQSHORTMIN %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).sigsqshortmin,
);
fprintf(
fp,
b"SIGSQLAYFACTOR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).sigsqlayfactor,
);
fprintf(
fp,
b"\n# Deformation mode parameters\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"DEFOAZDZFACTOR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).defoazdzfactor,
);
fprintf(
fp,
b"DEFOTHRESHFACTOR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).defothreshfactor,
);
fprintf(
fp,
b"DEFOMAX_CYCLE %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).defomax,
);
fprintf(
fp,
b"SIGSQCORR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).sigsqcorr,
);
fprintf(
fp,
b"DEFOCONST %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).defolayconst,
);
fprintf(
fp,
b"\n# Algorithm parameters\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"INITMAXFLOW %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).initmaxflow,
);
fprintf(
fp,
b"ARCMAXFLOWCONST %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).arcmaxflowconst,
);
fprintf(
fp,
b"MAXFLOW %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).maxflow,
);
fprintf(
fp,
b"KROWEI %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).krowei,
);
fprintf(
fp,
b"KCOLEI %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).kcolei,
);
fprintf(
fp,
b"KPARDPSI %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).kpardpsi,
);
fprintf(
fp,
b"KPERPDPSI %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).kperpdpsi,
);
fprintf(
fp,
b"THRESHOLD %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).threshold,
);
fprintf(
fp,
b"INITDZR %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).initdzr,
);
fprintf(
fp,
b"INITDZSTEP %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).initdzstep,
);
fprintf(
fp,
b"MAXCOST %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).maxcost,
);
fprintf(
fp,
b"COSTSCALE %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).costscale,
);
fprintf(
fp,
b"COSTSCALEAMBIGHT %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).costscaleambight,
);
fprintf(
fp,
b"DNOMINCANGLE %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).dnomincangle,
);
fprintf(
fp,
b"NSHORTCYCLE %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).nshortcycle,
);
fprintf(
fp,
b"MAXNEWNODECONST %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).maxnewnodeconst,
);
if (*params).maxnflowcycles == USEMAXCYCLEFRACTION as ::core::ffi::c_long {
fprintf(
fp,
b"MAXCYCLEFRACTION %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).maxcyclefraction,
);
} else {
fprintf(
fp,
b"MAXNFLOWCYCLES %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).maxnflowcycles,
);
}
fprintf(
fp,
b"NCONNNODEMIN %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).nconnnodemin,
);
fprintf(
fp,
b"CS2SCALEFACTOR %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).cs2scalefactor,
);
fprintf(
fp,
b"NMAJORPRUNE %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).nmajorprune,
);
fprintf(
fp,
b"PRUNECOSTTHRESH %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).prunecostthresh,
);
if (*params).p != PROBCOSTP {
fprintf(
fp,
b"PLPN %.8g\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).p,
);
LogBoolParam(
fp,
b"BIDIRLPN\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*params).bidirlpn,
);
} else {
fprintf(
fp,
b"# PLPN %.8g (not set)\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).p,
);
LogBoolParam(
fp,
b"# BIDIRLPN\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*params).bidirlpn,
);
}
fprintf(
fp,
b"\n# File names for dumping intermediate arrays\n\0" as *const u8
as *const ::core::ffi::c_char,
);
LogStringParam(
fp,
b"INITFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*outfiles).initfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"FLOWFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*outfiles).flowfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"EIFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*outfiles).eifile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"ROWCOSTFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*outfiles).rowcostfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"COLCOSTFILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*outfiles).colcostfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"MSTROWCOSTFILE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*outfiles).mstrowcostfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"MSTCOLCOSTFILE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*outfiles).mstcolcostfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"MSTCOSTSFILE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*outfiles).mstcostsfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"RAWCORRDUMPFILE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*outfiles).rawcorrdumpfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"CORRDUMPFILE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*outfiles).corrdumpfile as *mut ::core::ffi::c_char,
);
fprintf(
fp,
b"\n# Edge masking parameters\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"EDGEMASKTOP %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).edgemasktop,
);
fprintf(
fp,
b"EDGEMASKBOT %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).edgemaskbot,
);
fprintf(
fp,
b"EDGEMASKLEFT %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).edgemaskleft,
);
fprintf(
fp,
b"EDGEMASKRIGHT %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).edgemaskright,
);
if (*params).ntilerow == 1 as ::core::ffi::c_long
&& (*params).ntilecol == 1 as ::core::ffi::c_long
{
fprintf(
fp,
b"\n# Piece extraction parameters\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"PIECEFIRSTROW %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).piecefirstrow + 1 as ::core::ffi::c_long,
);
fprintf(
fp,
b"PIECEFIRSTCOL %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).piecefirstcol + 1 as ::core::ffi::c_long,
);
fprintf(
fp,
b"PIECENROW %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).piecenrow,
);
fprintf(
fp,
b"PIECENCOL %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).piecencol,
);
} else {
fprintf(
fp,
b"\n# Piece extraction parameters\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"# Parameters ignored because of tile mode\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"# PIECEFIRSTROW %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).piecefirstrow,
);
fprintf(
fp,
b"# PIECEFIRSTCOL %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).piecefirstcol,
);
fprintf(
fp,
b"# PIECENROW %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).piecenrow,
);
fprintf(
fp,
b"# PIECENCOL %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).piecencol,
);
}
fprintf(
fp,
b"\n# Tile control\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
fp,
b"NTILEROW %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).ntilerow,
);
fprintf(
fp,
b"NTILECOL %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).ntilecol,
);
fprintf(
fp,
b"ROWOVRLP %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).rowovrlp,
);
fprintf(
fp,
b"COLOVRLP %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).colovrlp,
);
fprintf(
fp,
b"NPROC %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).nthreads,
);
fprintf(
fp,
b"TILECOSTTHRESH %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).tilecostthresh,
);
fprintf(
fp,
b"MINREGIONSIZE %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).minregionsize,
);
fprintf(
fp,
b"TILEEDGEWEIGHT %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).tileedgeweight,
);
fprintf(
fp,
b"SCNDRYARCFLOWMAX %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).scndryarcflowmax,
);
LogBoolParam(
fp,
b"RMTMPTILE\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
(*params).rmtmptile,
);
LogStringParam(
fp,
b"DOTILEMASKFILE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*infiles).dotilemaskfile as *mut ::core::ffi::c_char,
);
LogStringParam(
fp,
b"TILEDIR\0" as *const u8 as *const ::core::ffi::c_char as *mut ::core::ffi::c_char,
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
);
LogBoolParam(
fp,
b"ASSEMBLEONLY\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*params).assembleonly,
);
LogBoolParam(
fp,
b"SINGLETILEREOPTIMIZE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*params).onetilereopt,
);
fprintf(
fp,
b"\n# Connected component control\n\0" as *const u8 as *const ::core::ffi::c_char,
);
LogStringParam(
fp,
b"CONNCOMPFILE\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
);
LogBoolParam(
fp,
b"REGROWCONNCOMPS\0" as *const u8 as *const ::core::ffi::c_char
as *mut ::core::ffi::c_char,
(*params).regrowconncomps,
);
fprintf(
fp,
b"MINCONNCOMPFRAC %.8f\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).minconncompfrac,
);
fprintf(
fp,
b"CONNCOMPTHRESH %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).conncompthresh,
);
fprintf(
fp,
b"MAXNCOMPS %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
(*params).maxncomps,
);
if (*params).conncompouttype == CONNCOMPOUTTYPEUCHAR {
fprintf(
fp,
b"CONNCOMPOUTTYPE UCHAR\n\0" as *const u8 as *const ::core::ffi::c_char,
);
} else if (*params).conncompouttype == CONNCOMPOUTTYPEUINT {
fprintf(
fp,
b"CONNCOMPOUTTYPE UINT\n\0" as *const u8 as *const ::core::ffi::c_char,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR: bad value of params->conncompouttype\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if fclose(fp) != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR in closing log file %s (disk full?)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn LogStringParam(
mut fp: *mut FILE,
mut key: *mut ::core::ffi::c_char,
mut value: *mut ::core::ffi::c_char,
) -> ::core::ffi::c_int {
if strlen(value) != 0 {
fprintf(
fp,
b"%s %s\n\0" as *const u8 as *const ::core::ffi::c_char,
key,
value,
);
fflush(fp);
} else {
fprintf(
fp,
b"# Empty value for parameter %s\n\0" as *const u8 as *const ::core::ffi::c_char,
key,
);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn LogBoolParam(
mut fp: *mut FILE,
mut key: *mut ::core::ffi::c_char,
mut boolvalue: ::core::ffi::c_schar,
) -> ::core::ffi::c_int {
if boolvalue != 0 {
fprintf(
fp,
b"%s TRUE\n\0" as *const u8 as *const ::core::ffi::c_char,
key,
);
} else {
fprintf(
fp,
b"%s FALSE\n\0" as *const u8 as *const ::core::ffi::c_char,
key,
);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn LogFileFormat(
mut fp: *mut FILE,
mut key: *mut ::core::ffi::c_char,
mut fileformat: ::core::ffi::c_schar,
) -> ::core::ffi::c_int {
if fileformat as ::core::ffi::c_int == COMPLEX_DATA {
fprintf(
fp,
b"%s COMPLEX_DATA\n\0" as *const u8 as *const ::core::ffi::c_char,
key,
);
} else if fileformat as ::core::ffi::c_int == FLOAT_DATA {
fprintf(
fp,
b"%s FLOAT_DATA\n\0" as *const u8 as *const ::core::ffi::c_char,
key,
);
} else if fileformat as ::core::ffi::c_int == ALT_LINE_DATA {
fprintf(
fp,
b"%s ALT_LINE_DATA\n\0" as *const u8 as *const ::core::ffi::c_char,
key,
);
} else if fileformat as ::core::ffi::c_int == ALT_SAMPLE_DATA {
fprintf(
fp,
b"%s ALT_SAMPLE_DATA\n\0" as *const u8 as *const ::core::ffi::c_char,
key,
);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn GetNLines(
mut infiles: *mut infileT,
mut linelen: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut filesize: ::core::ffi::c_long = 0;
let mut datasize: ::core::ffi::c_long = 0;
fp = fopen(
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
b"r\0" as *const u8 as *const ::core::ffi::c_char,
) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"can't open file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_END);
filesize = ftell(fp);
fclose(fp);
if (*params).unwrapped == 0 && (*infiles).infileformat as ::core::ffi::c_int == FLOAT_DATA
|| (*params).unwrapped as ::core::ffi::c_int != 0
&& (*infiles).unwrappedinfileformat as ::core::ffi::c_int == FLOAT_DATA
{
datasize = ::core::mem::size_of::<::core::ffi::c_float>() as ::core::ffi::c_long;
} else {
datasize = (2 as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
as ::core::ffi::c_long;
}
if filesize % (datasize * linelen) != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"extra data in file %s (bad linelength?)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return filesize / (datasize * linelen);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn WriteOutputFile(
mut mag: *mut *mut ::core::ffi::c_float,
mut unwrappedphase: *mut *mut ::core::ffi::c_float,
mut outfile: *mut ::core::ffi::c_char,
mut outfiles: *mut outfileT,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
if (*outfiles).outfileformat as ::core::ffi::c_int == ALT_LINE_DATA {
WriteAltLineFile(mag, unwrappedphase, outfile, nrow, ncol);
} else if (*outfiles).outfileformat as ::core::ffi::c_int == ALT_SAMPLE_DATA {
WriteAltSampFile(mag, unwrappedphase, outfile, nrow, ncol);
} else if (*outfiles).outfileformat as ::core::ffi::c_int == FLOAT_DATA {
Write2DArray(
unwrappedphase as *mut *mut ::core::ffi::c_void,
outfile,
nrow,
ncol,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: Illegal format specified for output file\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
sp0,
b" using default floating-point format\n\0" as *const u8
as *const ::core::ffi::c_char,
);
Write2DArray(
unwrappedphase as *mut *mut ::core::ffi::c_void,
outfile,
nrow,
ncol,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn OpenOutputFile(
mut outfile: *mut ::core::ffi::c_char,
mut realoutfile: *mut ::core::ffi::c_char,
) -> *mut FILE {
let mut path: [::core::ffi::c_char; 512] = [0; 512];
let mut basename: [::core::ffi::c_char; 512] = [0; 512];
let mut dumpfile: [::core::ffi::c_char; 512] = [0; 512];
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
fp = fopen(outfile, b"w\0" as *const u8 as *const ::core::ffi::c_char) as *mut FILE;
if fp.is_null() {
ParseFilename(
outfile,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
StrNCopy(
&raw mut dumpfile as *mut ::core::ffi::c_char,
DUMP_PATH.as_ptr(),
MAXSTRLEN as size_t,
);
strcat(
&raw mut dumpfile as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
fp = fopen(
&raw mut dumpfile as *mut ::core::ffi::c_char,
b"w\0" as *const u8 as *const ::core::ffi::c_char,
) as *mut FILE;
if !fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: Can't write to file %s. Dumping to file %s\n\0" as *const u8
as *const ::core::ffi::c_char,
outfile,
&raw mut dumpfile as *mut ::core::ffi::c_char,
);
StrNCopy(
realoutfile,
&raw mut dumpfile as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Unable to write to file %s or dump to file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
outfile,
&raw mut dumpfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
} else {
StrNCopy(realoutfile, outfile, MAXSTRLEN as size_t);
}
return fp;
}
unsafe extern "C" fn WriteAltLineFile(
mut mag: *mut *mut ::core::ffi::c_float,
mut phase: *mut *mut ::core::ffi::c_float,
mut outfile: *mut ::core::ffi::c_char,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_int = 0;
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut realoutfile: [::core::ffi::c_char; 512] = [0; 512];
fp = OpenOutputFile(outfile, &raw mut realoutfile as *mut ::core::ffi::c_char);
row = 0 as ::core::ffi::c_int;
while (row as ::core::ffi::c_long) < nrow {
if fwrite(
*mag.offset(row as isize) as *const ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
ncol as size_t,
fp,
) != ncol as ::core::ffi::c_ulong
|| fwrite(
*phase.offset(row as isize) as *const ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
ncol as size_t,
fp,
) != ncol as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while writing to file %s (device full?)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
row += 1;
}
if fclose(fp) != 0 {
fprintf(
sp0,
b"WARNING: problem closing file %s (disk full?)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn WriteAltSampFile(
mut arr1: *mut *mut ::core::ffi::c_float,
mut arr2: *mut *mut ::core::ffi::c_float,
mut outfile: *mut ::core::ffi::c_char,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut outline: *mut ::core::ffi::c_float = ::core::ptr::null_mut::<::core::ffi::c_float>();
let mut realoutfile: [::core::ffi::c_char; 512] = [0; 512];
outline = MAlloc(
((2 as ::core::ffi::c_long * ncol) as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as size_t),
) as *mut ::core::ffi::c_float;
fp = OpenOutputFile(outfile, &raw mut realoutfile as *mut ::core::ffi::c_char);
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*outline.offset((2 as ::core::ffi::c_long * col) as isize) =
*(*arr1.offset(row as isize)).offset(col as isize);
*outline.offset((2 as ::core::ffi::c_long * col + 1 as ::core::ffi::c_long) as isize) =
*(*arr2.offset(row as isize)).offset(col as isize);
col += 1;
}
if fwrite(
outline as *const ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
(2 as ::core::ffi::c_long * ncol) as size_t,
fp,
) != (2 as ::core::ffi::c_long * ncol) as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while writing to file %s (device full?)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
row += 1;
}
if fclose(fp) != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: problem closing file %s (disk full?)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Write2DArray(
mut array: *mut *mut ::core::ffi::c_void,
mut filename: *mut ::core::ffi::c_char,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut size: size_t,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_int = 0;
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut realoutfile: [::core::ffi::c_char; 512] = [0; 512];
fp = OpenOutputFile(filename, &raw mut realoutfile as *mut ::core::ffi::c_char);
row = 0 as ::core::ffi::c_int;
while (row as ::core::ffi::c_long) < nrow {
if fwrite(*array.offset(row as isize), size, ncol as size_t, fp)
!= ncol as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while writing to file %s (device full?)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
row += 1;
}
if fclose(fp) != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: problem closing file %s (disk full?)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Write2DRowColArray(
mut array: *mut *mut ::core::ffi::c_void,
mut filename: *mut ::core::ffi::c_char,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut size: size_t,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_int = 0;
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut realoutfile: [::core::ffi::c_char; 512] = [0; 512];
fp = OpenOutputFile(filename, &raw mut realoutfile as *mut ::core::ffi::c_char);
row = 0 as ::core::ffi::c_int;
while (row as ::core::ffi::c_long) < nrow - 1 as ::core::ffi::c_long {
if fwrite(*array.offset(row as isize), size, ncol as size_t, fp)
!= ncol as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while writing to file %s (device full?)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
row += 1;
}
row = (nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_int;
while (row as ::core::ffi::c_long) < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long
{
if fwrite(
*array.offset(row as isize),
size,
(ncol - 1 as ::core::ffi::c_long) as size_t,
fp,
) != (ncol - 1 as ::core::ffi::c_long) as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while writing to file %s (device full?)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
row += 1;
}
if fclose(fp) != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: problem closing file %s (disk full?)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadInputFile(
mut infiles: *mut infileT,
mut magptr: *mut *mut *mut ::core::ffi::c_float,
mut wrappedphaseptr: *mut *mut *mut ::core::ffi::c_float,
mut flowsptr: *mut *mut *mut ::core::ffi::c_short,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut params: *mut paramT,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut mag: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut wrappedphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut unwrappedphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut flows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
mag = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
wrappedphase = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
unwrappedphase = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
flows = ::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
if (*tileparams).ncol > LARGESHORT as ::core::ffi::c_long
|| (*tileparams).nrow > LARGESHORT as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"one or more interferogram dimensions too large\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*tileparams).ncol < 2 as ::core::ffi::c_long
|| (*tileparams).nrow < 2 as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"input interferogram must be at least 2x2\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).unwrapped == 0 {
fprintf(
sp1,
b"Reading wrapped phase from file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
);
if (*infiles).infileformat as ::core::ffi::c_int == COMPLEX_DATA {
ReadComplexFile(
&raw mut mag,
&raw mut wrappedphase,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).infileformat as ::core::ffi::c_int == ALT_LINE_DATA {
ReadAltLineFile(
&raw mut mag,
&raw mut wrappedphase,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).infileformat as ::core::ffi::c_int == ALT_SAMPLE_DATA {
ReadAltSampFile(
&raw mut mag,
&raw mut wrappedphase,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).infileformat as ::core::ffi::c_int == FLOAT_DATA {
Read2DArray(
&raw mut wrappedphase as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"illegal input file format specification\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if ValidDataArray(wrappedphase, nrow, ncol) == 0
|| !mag.is_null() && ValidDataArray(mag, nrow, ncol) == 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"NaN or infinity found in input float data\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if !mag.is_null() && NonNegDataArray(mag, nrow, ncol) == 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Negative magnitude found in input magnitude data\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
FlipPhaseArraySign(wrappedphase, params, nrow, ncol);
WrapPhase(wrappedphase, nrow, ncol);
} else {
fprintf(
sp1,
b"Reading unwrapped phase from file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
);
if (*infiles).unwrappedinfileformat as ::core::ffi::c_int == ALT_LINE_DATA {
ReadAltLineFile(
&raw mut mag,
&raw mut unwrappedphase,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).unwrappedinfileformat as ::core::ffi::c_int == ALT_SAMPLE_DATA {
ReadAltSampFile(
&raw mut mag,
&raw mut unwrappedphase,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).unwrappedinfileformat as ::core::ffi::c_int == FLOAT_DATA {
Read2DArray(
&raw mut unwrappedphase as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*infiles).infile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal input file format specification\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if ValidDataArray(unwrappedphase, nrow, ncol) == 0
|| !mag.is_null() && ValidDataArray(mag, nrow, ncol) == 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"NaN or infinity found in input float data\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if !mag.is_null() && NonNegDataArray(mag, nrow, ncol) == 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Negative magnitude found in input magnitude data\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
FlipPhaseArraySign(unwrappedphase, params, nrow, ncol);
wrappedphase = ExtractFlow(unwrappedphase, &raw mut flows, nrow, ncol);
Free2DArray(
unwrappedphase as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
}
if (*tileparams).nrow != nlines || (*tileparams).ncol != linelen {
fprintf(
sp2,
b"Read %ldx%ld array of pixels starting at row,col %ld,%ld\n\0" as *const u8
as *const ::core::ffi::c_char,
(*tileparams).nrow,
(*tileparams).ncol,
(*tileparams).firstrow,
(*tileparams).firstcol,
);
}
if mag.is_null() {
mag = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*mag.offset(row as isize)).offset(col as isize) = 1.0f32;
col += 1;
}
row += 1;
}
}
*wrappedphaseptr = wrappedphase;
*magptr = mag;
*flowsptr = flows;
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadMagnitude(
mut mag: *mut *mut ::core::ffi::c_float,
mut infiles: *mut infileT,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut dummy: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
dummy = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
if strlen(&raw mut (*infiles).magfile as *mut ::core::ffi::c_char) != 0 {
fprintf(
sp1,
b"Reading interferogram magnitude from file %s\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*infiles).magfile as *mut ::core::ffi::c_char,
);
if (*infiles).magfileformat as ::core::ffi::c_int == FLOAT_DATA {
Read2DArray(
&raw mut mag as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*infiles).magfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
} else if (*infiles).magfileformat as ::core::ffi::c_int == COMPLEX_DATA {
ReadComplexFile(
&raw mut mag,
&raw mut dummy,
&raw mut (*infiles).magfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).magfileformat as ::core::ffi::c_int == ALT_LINE_DATA {
ReadAltLineFile(
&raw mut mag,
&raw mut dummy,
&raw mut (*infiles).magfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).magfileformat as ::core::ffi::c_int == ALT_SAMPLE_DATA {
ReadAltSampFile(
&raw mut mag,
&raw mut dummy,
&raw mut (*infiles).magfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
}
}
if !dummy.is_null() {
Free2DArray(
dummy as *mut *mut ::core::ffi::c_void,
(*tileparams).nrow as ::core::ffi::c_uint,
);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadByteMask(
mut mag: *mut *mut ::core::ffi::c_float,
mut infiles: *mut infileT,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut fullrow: ::core::ffi::c_long = 0;
let mut fullcol: ::core::ffi::c_long = 0;
let mut bytemask: *mut *mut ::core::ffi::c_schar =
::core::ptr::null_mut::<*mut ::core::ffi::c_schar>();
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
bytemask = ::core::ptr::null_mut::<*mut ::core::ffi::c_schar>();
if strlen(&raw mut (*infiles).bytemaskfile as *mut ::core::ffi::c_char) != 0 {
fprintf(
sp1,
b"Reading byte mask from file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*infiles).bytemaskfile as *mut ::core::ffi::c_char,
);
Read2DArray(
&raw mut bytemask as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*infiles).bytemaskfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
::core::mem::size_of::<*mut ::core::ffi::c_schar>() as size_t,
::core::mem::size_of::<::core::ffi::c_schar>() as size_t,
);
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
fullrow = (*tileparams).firstrow + row;
fullcol = (*tileparams).firstcol + col;
if !bytemask.is_null()
&& *(*bytemask.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
|| fullrow < (*params).edgemasktop
|| fullcol < (*params).edgemaskleft
|| fullrow >= nlines - (*params).edgemaskbot
|| fullcol >= linelen - (*params).edgemaskright
{
*(*mag.offset(row as isize)).offset(col as isize) =
0 as ::core::ffi::c_int as ::core::ffi::c_float;
}
col += 1;
}
row += 1;
}
if !bytemask.is_null() {
Free2DArray(
bytemask as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadUnwrappedEstimateFile(
mut unwrappedestptr: *mut *mut *mut ::core::ffi::c_float,
mut infiles: *mut infileT,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut params: *mut paramT,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut dummy: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
dummy = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
fprintf(
sp1,
b"Reading coarse unwrapped estimate from file %s\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*infiles).estfile as *mut ::core::ffi::c_char,
);
if (*infiles).estfileformat as ::core::ffi::c_int == ALT_LINE_DATA {
ReadAltLineFilePhase(
unwrappedestptr,
&raw mut (*infiles).estfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).estfileformat as ::core::ffi::c_int == FLOAT_DATA {
Read2DArray(
unwrappedestptr as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*infiles).estfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
} else if (*infiles).estfileformat as ::core::ffi::c_int == ALT_SAMPLE_DATA {
ReadAltSampFile(
&raw mut dummy,
unwrappedestptr,
&raw mut (*infiles).estfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal file format specification for file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*infiles).estfile as *mut ::core::ffi::c_char,
);
}
if !dummy.is_null() {
Free2DArray(
dummy as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
}
if ValidDataArray(*unwrappedestptr, nrow, ncol) == 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Infinity or NaN found in file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*infiles).estfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
FlipPhaseArraySign(*unwrappedestptr, params, nrow, ncol);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadWeightsFile(
mut weightsptr: *mut *mut *mut ::core::ffi::c_short,
mut weightfile: *mut ::core::ffi::c_char,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut rowweight: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut colweight: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut printwarning: ::core::ffi::c_schar = 0;
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
if strlen(weightfile) != 0 {
fprintf(
sp1,
b"Reading weights from file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
weightfile,
);
Read2DRowColFile(
weightsptr as *mut *mut *mut ::core::ffi::c_void,
weightfile,
linelen,
nlines,
tileparams,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
rowweight = *weightsptr;
colweight = (*weightsptr).offset((nrow - 1 as ::core::ffi::c_long) as isize)
as *mut *mut ::core::ffi::c_short;
printwarning = FALSE as ::core::ffi::c_schar;
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if (*(*rowweight.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int)
< 0 as ::core::ffi::c_int
{
*(*rowweight.offset(row as isize)).offset(col as isize) =
0 as ::core::ffi::c_short;
printwarning = TRUE as ::core::ffi::c_schar;
}
col += 1;
}
row += 1;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
if (*(*colweight.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int)
< 0 as ::core::ffi::c_int
{
*(*colweight.offset(row as isize)).offset(col as isize) =
0 as ::core::ffi::c_short;
printwarning = TRUE as ::core::ffi::c_schar;
}
col += 1;
}
row += 1;
}
if printwarning != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: Weights must be nonnegative. Clipping to 0\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
} else {
fprintf(
sp1,
b"No weight file specified. Assuming uniform weights\n\0" as *const u8
as *const ::core::ffi::c_char,
);
*weightsptr = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
rowweight = *weightsptr;
colweight = (*weightsptr).offset((nrow - 1 as ::core::ffi::c_long) as isize)
as *mut *mut ::core::ffi::c_short;
Set2DShortArray(
rowweight,
nrow - 1 as ::core::ffi::c_long,
ncol,
DEF_WEIGHT as ::core::ffi::c_long,
);
Set2DShortArray(
colweight,
nrow,
ncol - 1 as ::core::ffi::c_long,
DEF_WEIGHT as ::core::ffi::c_long,
);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadIntensity(
mut pwrptr: *mut *mut *mut ::core::ffi::c_float,
mut pwr1ptr: *mut *mut *mut ::core::ffi::c_float,
mut pwr2ptr: *mut *mut *mut ::core::ffi::c_float,
mut infiles: *mut infileT,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut params: *mut paramT,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut pwr: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut pwr1: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut pwr2: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
pwr = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
pwr1 = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
pwr2 = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
if strlen(&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char) != 0 {
fprintf(
sp1,
b"Reading brightness data from files %s and %s\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char,
);
if (*infiles).ampfileformat as ::core::ffi::c_int == FLOAT_DATA {
Read2DArray(
&raw mut pwr1 as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
Read2DArray(
&raw mut pwr2 as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal file formats specified for files %s, %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
&raw mut (*infiles).ampfile2 as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
} else {
fprintf(
sp1,
b"Reading brightness data from file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
);
if (*infiles).ampfileformat as ::core::ffi::c_int == ALT_SAMPLE_DATA {
ReadAltSampFile(
&raw mut pwr1,
&raw mut pwr2,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).ampfileformat as ::core::ffi::c_int == ALT_LINE_DATA {
ReadAltLineFile(
&raw mut pwr1,
&raw mut pwr2,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).ampfileformat as ::core::ffi::c_int == FLOAT_DATA {
Read2DArray(
&raw mut pwr as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
pwr1 = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
pwr2 = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal file format specified for file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*infiles).ampfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
}
if !pwr1.is_null() && ValidDataArray(pwr1, nrow, ncol) == 0
|| !pwr2.is_null() && ValidDataArray(pwr2, nrow, ncol) == 0
|| !pwr.is_null() && ValidDataArray(pwr, nrow, ncol) == 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Infinity or NaN found in amplitude or power data\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if !pwr1.is_null() && NonNegDataArray(pwr1, nrow, ncol) == 0
|| !pwr2.is_null() && NonNegDataArray(pwr2, nrow, ncol) == 0
|| !pwr.is_null() && NonNegDataArray(pwr, nrow, ncol) == 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Negative value found in amplitude or power data\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if (*params).amplitude != 0 {
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if !pwr1.is_null() && !pwr2.is_null() {
*(*pwr1.offset(row as isize)).offset(col as isize) *=
*(*pwr1.offset(row as isize)).offset(col as isize);
*(*pwr2.offset(row as isize)).offset(col as isize) *=
*(*pwr2.offset(row as isize)).offset(col as isize);
} else {
*(*pwr.offset(row as isize)).offset(col as isize) *=
*(*pwr.offset(row as isize)).offset(col as isize);
}
col += 1;
}
row += 1;
}
}
if !pwr1.is_null() && !pwr2.is_null() {
if pwr.is_null() {
pwr = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*pwr.offset(row as isize)).offset(col as isize) =
((*(*pwr1.offset(row as isize)).offset(col as isize)
+ *(*pwr2.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double
/ 2.0f64) as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
}
*pwrptr = pwr;
*pwr1ptr = pwr1;
*pwr2ptr = pwr2;
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadCorrelation(
mut corrptr: *mut *mut *mut ::core::ffi::c_float,
mut infiles: *mut infileT,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut corr: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut dummy: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut nrow: ::core::ffi::c_long = 0;
nrow = (*tileparams).nrow;
dummy = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
corr = ::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
fprintf(
sp1,
b"Reading correlation data from file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char,
);
if (*infiles).corrfileformat as ::core::ffi::c_int == ALT_SAMPLE_DATA {
ReadAltSampFile(
&raw mut dummy,
&raw mut corr,
&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).corrfileformat as ::core::ffi::c_int == ALT_LINE_DATA {
ReadAltLineFilePhase(
&raw mut corr,
&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
);
} else if (*infiles).corrfileformat as ::core::ffi::c_int == FLOAT_DATA {
Read2DArray(
&raw mut corr as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char,
linelen,
nlines,
tileparams,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal file format specified for file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*infiles).corrfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if !dummy.is_null() {
Free2DArray(
dummy as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
}
*corrptr = corr;
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadAltLineFile(
mut mag: *mut *mut *mut ::core::ffi::c_float,
mut phase: *mut *mut *mut ::core::ffi::c_float,
mut alfile: *mut ::core::ffi::c_char,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut filesize: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut padlen: ::core::ffi::c_long = 0;
fp = fopen(alfile, b"r\0" as *const u8 as *const ::core::ffi::c_char) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Can't open file %s\nAbort\n\0" as *const u8 as *const ::core::ffi::c_char,
alfile,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_END);
filesize = ftell(fp);
if filesize as usize
!= ((2 as ::core::ffi::c_long * nlines * linelen) as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"File %s wrong size (%ldx%ld array expected)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
alfile,
nlines,
linelen,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_SET);
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
if (*mag).is_null() {
*mag = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
}
if (*phase).is_null() {
*phase = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
}
fseek(
fp,
(((*tileparams).firstrow * 2 as ::core::ffi::c_long * linelen + (*tileparams).firstcol)
as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
as ::core::ffi::c_long,
SEEK_CUR,
);
padlen = ((linelen - ncol) as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
if fread(
*(*mag).offset(row as isize) as *mut ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
ncol as size_t,
fp,
) != ncol as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while reading from file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
alfile,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, padlen, SEEK_CUR);
if fread(
*(*phase).offset(row as isize) as *mut ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
ncol as size_t,
fp,
) != ncol as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while reading from file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
alfile,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, padlen, SEEK_CUR);
row += 1;
}
fclose(fp);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadAltLineFilePhase(
mut phase: *mut *mut *mut ::core::ffi::c_float,
mut alfile: *mut ::core::ffi::c_char,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut filesize: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut padlen: ::core::ffi::c_long = 0;
fp = fopen(alfile, b"r\0" as *const u8 as *const ::core::ffi::c_char) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Can't open file %s\nAbort\n\0" as *const u8 as *const ::core::ffi::c_char,
alfile,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_END);
filesize = ftell(fp);
if filesize as usize
!= ((2 as ::core::ffi::c_long * nlines * linelen) as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"File %s wrong size (%ldx%ld array expected)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
alfile,
nlines,
linelen,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_SET);
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
if (*phase).is_null() {
*phase = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
}
fseek(
fp,
(((*tileparams).firstrow * 2 as ::core::ffi::c_long * linelen
+ linelen
+ (*tileparams).firstcol) as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
as ::core::ffi::c_long,
SEEK_CUR,
);
padlen = ((2 as ::core::ffi::c_long * linelen - ncol) as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
if fread(
*(*phase).offset(row as isize) as *mut ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
ncol as size_t,
fp,
) != ncol as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while reading from file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
alfile,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, padlen, SEEK_CUR);
row += 1;
}
fclose(fp);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadComplexFile(
mut mag: *mut *mut *mut ::core::ffi::c_float,
mut phase: *mut *mut *mut ::core::ffi::c_float,
mut rifile: *mut ::core::ffi::c_char,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut filesize: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut padlen: ::core::ffi::c_long = 0;
let mut inpline: *mut ::core::ffi::c_float = ::core::ptr::null_mut::<::core::ffi::c_float>();
fp = fopen(rifile, b"r\0" as *const u8 as *const ::core::ffi::c_char) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Can't open file %s\nAbort\n\0" as *const u8 as *const ::core::ffi::c_char,
rifile,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_END);
filesize = ftell(fp);
if filesize as usize
!= ((2 as ::core::ffi::c_long * nlines * linelen) as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"File %s wrong size (%ldx%ld array expected)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
rifile,
nlines,
linelen,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_SET);
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
if (*mag).is_null() {
*mag = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
}
if (*phase).is_null() {
*phase = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
}
inpline = MAlloc(
((2 as ::core::ffi::c_long * ncol) as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as size_t),
) as *mut ::core::ffi::c_float;
fseek(
fp,
((((*tileparams).firstrow * linelen + (*tileparams).firstcol) * 2 as ::core::ffi::c_long)
as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
as ::core::ffi::c_long,
SEEK_CUR,
);
padlen = (((linelen - ncol) * 2 as ::core::ffi::c_long) as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
if fread(
inpline as *mut ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
(2 as ::core::ffi::c_long * ncol) as size_t,
fp,
) != (2 as ::core::ffi::c_long * ncol) as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while reading from file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
rifile,
);
exit(ABNORMAL_EXIT);
}
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*(*mag).offset(row as isize)).offset(col as isize) = sqrt(
(*inpline.offset((2 as ::core::ffi::c_long * col) as isize)
* *inpline.offset((2 as ::core::ffi::c_long * col) as isize)
+ *inpline.offset(
(2 as ::core::ffi::c_long * col + 1 as ::core::ffi::c_long) as isize,
) * *inpline.offset(
(2 as ::core::ffi::c_long * col + 1 as ::core::ffi::c_long) as isize,
)) as ::core::ffi::c_double,
)
as ::core::ffi::c_float;
if *inpline.offset((2 as ::core::ffi::c_long * col + 1 as ::core::ffi::c_long) as isize)
== 0 as ::core::ffi::c_int as ::core::ffi::c_float
&& *inpline.offset((2 as ::core::ffi::c_long * col) as isize)
== 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
*(*(*phase).offset(row as isize)).offset(col as isize) =
0 as ::core::ffi::c_int as ::core::ffi::c_float;
} else {
let ref mut fresh168 = *(*(*phase).offset(row as isize)).offset(col as isize);
*fresh168 = atan2(
*inpline.offset(
(2 as ::core::ffi::c_long * col + 1 as ::core::ffi::c_long) as isize,
) as ::core::ffi::c_double,
*inpline.offset((2 as ::core::ffi::c_long * col) as isize)
as ::core::ffi::c_double,
) as ::core::ffi::c_float;
if IsFinite(*fresh168 as ::core::ffi::c_double) == 0 {
*(*(*phase).offset(row as isize)).offset(col as isize) =
0 as ::core::ffi::c_int as ::core::ffi::c_float;
} else if *(*(*phase).offset(row as isize)).offset(col as isize)
< 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
let ref mut fresh169 = *(*(*phase).offset(row as isize)).offset(col as isize);
*fresh169 =
(*fresh169 as ::core::ffi::c_double + TWOPI) as ::core::ffi::c_float;
} else if *(*(*phase).offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
>= TWOPI
{
let ref mut fresh170 = *(*(*phase).offset(row as isize)).offset(col as isize);
*fresh170 =
(*fresh170 as ::core::ffi::c_double - TWOPI) as ::core::ffi::c_float;
}
}
col += 1;
}
fseek(fp, padlen, SEEK_CUR);
row += 1;
}
free(inpline as *mut ::core::ffi::c_void);
fclose(fp);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Read2DArray(
mut arr: *mut *mut *mut ::core::ffi::c_void,
mut infile: *mut ::core::ffi::c_char,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
mut elptrsize: size_t,
mut elsize: size_t,
) -> ::core::ffi::c_int {
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut filesize: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut padlen: ::core::ffi::c_long = 0;
fp = fopen(infile, b"r\0" as *const u8 as *const ::core::ffi::c_char) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Can't open file %s\nAbort\n\0" as *const u8 as *const ::core::ffi::c_char,
infile,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_END);
filesize = ftell(fp);
if filesize as size_t != ((nlines * linelen) as size_t).wrapping_mul(elsize) {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"File %s wrong size (%ldx%ld array expected)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
infile,
nlines,
linelen,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_SET);
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
if (*arr).is_null() {
*arr = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
elptrsize as ::core::ffi::c_int,
elsize,
);
}
fseek(
fp,
((linelen * (*tileparams).firstrow + (*tileparams).firstcol) as size_t).wrapping_mul(elsize)
as ::core::ffi::c_long,
SEEK_CUR,
);
padlen = ((linelen - ncol) as size_t).wrapping_mul(elsize) as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
if fread(*(*arr).offset(row as isize), elsize, ncol as size_t, fp)
!= ncol as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while reading from file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
infile,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, padlen, SEEK_CUR);
row += 1;
}
fclose(fp);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReadAltSampFile(
mut arr1: *mut *mut *mut ::core::ffi::c_float,
mut arr2: *mut *mut *mut ::core::ffi::c_float,
mut infile: *mut ::core::ffi::c_char,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
) -> ::core::ffi::c_int {
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut filesize: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut padlen: ::core::ffi::c_long = 0;
let mut inpline: *mut ::core::ffi::c_float = ::core::ptr::null_mut::<::core::ffi::c_float>();
fp = fopen(infile, b"r\0" as *const u8 as *const ::core::ffi::c_char) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Can't open file %s\nAbort\n\0" as *const u8 as *const ::core::ffi::c_char,
infile,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_END);
filesize = ftell(fp);
if filesize as usize
!= ((2 as ::core::ffi::c_long * nlines * linelen) as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"File %s wrong size (%ldx%ld array expected)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
infile,
nlines,
linelen,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_SET);
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
if (*arr1).is_null() {
*arr1 = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
}
if (*arr2).is_null() {
*arr2 = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
}
inpline = MAlloc(
((2 as ::core::ffi::c_long * ncol) as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as size_t),
) as *mut ::core::ffi::c_float;
fseek(
fp,
((((*tileparams).firstrow * linelen + (*tileparams).firstcol) * 2 as ::core::ffi::c_long)
as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
as ::core::ffi::c_long,
SEEK_CUR,
);
padlen = (((linelen - ncol) * 2 as ::core::ffi::c_long) as usize)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as usize)
as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
if fread(
inpline as *mut ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
(2 as ::core::ffi::c_long * ncol) as size_t,
fp,
) != (2 as ::core::ffi::c_long * ncol) as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while reading from file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
infile,
);
exit(ABNORMAL_EXIT);
}
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*(*arr1).offset(row as isize)).offset(col as isize) =
*inpline.offset((2 as ::core::ffi::c_long * col) as isize);
*(*(*arr2).offset(row as isize)).offset(col as isize) = *inpline
.offset((2 as ::core::ffi::c_long * col + 1 as ::core::ffi::c_long) as isize);
col += 1;
}
fseek(fp, padlen, SEEK_CUR);
row += 1;
}
free(inpline as *mut ::core::ffi::c_void);
fclose(fp);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Read2DRowColFile(
mut arr: *mut *mut *mut ::core::ffi::c_void,
mut filename: *mut ::core::ffi::c_char,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
mut size: size_t,
) -> ::core::ffi::c_int {
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut row: ::core::ffi::c_long = 0;
let mut nel: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut padlen: ::core::ffi::c_long = 0;
let mut filelen: ::core::ffi::c_long = 0;
fp = fopen(filename, b"r\0" as *const u8 as *const ::core::ffi::c_char) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Can't open file %s\nAbort\n\0" as *const u8 as *const ::core::ffi::c_char,
filename,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_END);
filelen = ftell(fp);
fseek(fp, 0 as ::core::ffi::c_long, SEEK_SET);
nel = (filelen as size_t).wrapping_div(size) as ::core::ffi::c_long;
if 2 as ::core::ffi::c_long * linelen * nlines - nlines - linelen != nel
|| (filelen as size_t).wrapping_rem(size) != 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"File %s wrong size (%ld elements expected)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
filename,
2 as ::core::ffi::c_long * linelen * nlines - nlines - linelen,
);
exit(ABNORMAL_EXIT);
}
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
if (*arr).is_null() {
*arr = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut ::core::ffi::c_void>() as ::core::ffi::c_int,
size,
);
}
fseek(
fp,
((linelen * (*tileparams).firstrow + (*tileparams).firstcol) as size_t).wrapping_mul(size)
as ::core::ffi::c_long,
SEEK_SET,
);
padlen = ((linelen - ncol) as size_t).wrapping_mul(size) as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
if fread(*(*arr).offset(row as isize), size, ncol as size_t, fp)
!= ncol as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while reading from file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
filename,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, padlen, SEEK_CUR);
row += 1;
}
fseek(
fp,
((linelen * (nlines - 1 as ::core::ffi::c_long)
+ (linelen - 1 as ::core::ffi::c_long) * (*tileparams).firstrow
+ (*tileparams).firstcol) as size_t)
.wrapping_mul(size) as ::core::ffi::c_long,
SEEK_SET,
);
row = nrow - 1 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if fread(
*(*arr).offset(row as isize),
size,
(ncol - 1 as ::core::ffi::c_long) as size_t,
fp,
) != (ncol - 1 as ::core::ffi::c_long) as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while reading from file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
filename,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, padlen, SEEK_CUR);
row += 1;
}
fclose(fp);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Read2DRowColFileRows(
mut arr: *mut *mut *mut ::core::ffi::c_void,
mut filename: *mut ::core::ffi::c_char,
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut tileparams: *mut tileparamT,
mut size: size_t,
) -> ::core::ffi::c_int {
let mut fp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut row: ::core::ffi::c_long = 0;
let mut nel: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut padlen: ::core::ffi::c_long = 0;
let mut filelen: ::core::ffi::c_long = 0;
fp = fopen(filename, b"r\0" as *const u8 as *const ::core::ffi::c_char) as *mut FILE;
if fp.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Can't open file %s\nAbort\n\0" as *const u8 as *const ::core::ffi::c_char,
filename,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, 0 as ::core::ffi::c_long, SEEK_END);
filelen = ftell(fp);
fseek(fp, 0 as ::core::ffi::c_long, SEEK_SET);
nel = (filelen as size_t).wrapping_div(size) as ::core::ffi::c_long;
if 2 as ::core::ffi::c_long * linelen * nlines - nlines - linelen != nel
|| (filelen as size_t).wrapping_rem(size) != 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"File %s wrong size (%ld elements expected)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
filename,
2 as ::core::ffi::c_long * linelen * nlines - nlines - linelen,
);
exit(ABNORMAL_EXIT);
}
nrow = (*tileparams).nrow;
ncol = (*tileparams).ncol;
if (*arr).is_null() {
*arr = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_void>() as ::core::ffi::c_int,
size,
);
}
fseek(
fp,
((linelen * (*tileparams).firstrow + (*tileparams).firstcol) as size_t).wrapping_mul(size)
as ::core::ffi::c_long,
SEEK_SET,
);
padlen = ((linelen - ncol) as size_t).wrapping_mul(size) as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
if fread(*(*arr).offset(row as isize), size, ncol as size_t, fp)
!= ncol as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while reading from file %s\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
filename,
);
exit(ABNORMAL_EXIT);
}
fseek(fp, padlen, SEEK_CUR);
row += 1;
}
fclose(fp);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetDumpAll(
mut outfiles: *mut outfileT,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
if (*params).dumpall != 0 {
if strlen(&raw mut (*outfiles).initfile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*outfiles).initfile as *mut ::core::ffi::c_char,
DUMP_INITFILE.as_ptr(),
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).flowfile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*outfiles).flowfile as *mut ::core::ffi::c_char,
DUMP_FLOWFILE.as_ptr(),
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).eifile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*outfiles).eifile as *mut ::core::ffi::c_char,
DUMP_EIFILE.as_ptr(),
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).rowcostfile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*outfiles).rowcostfile as *mut ::core::ffi::c_char,
DUMP_ROWCOSTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).colcostfile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*outfiles).colcostfile as *mut ::core::ffi::c_char,
DUMP_COLCOSTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).mstrowcostfile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*outfiles).mstrowcostfile as *mut ::core::ffi::c_char,
DUMP_MSTROWCOSTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).mstcolcostfile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*outfiles).mstcolcostfile as *mut ::core::ffi::c_char,
DUMP_MSTCOLCOSTFILE.as_ptr(),
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).mstcostsfile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*outfiles).mstcostsfile as *mut ::core::ffi::c_char,
DUMP_MSTCOSTSFILE.as_ptr(),
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).corrdumpfile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*outfiles).corrdumpfile as *mut ::core::ffi::c_char,
DUMP_CORRDUMPFILE.as_ptr(),
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).rawcorrdumpfile as *mut ::core::ffi::c_char) == 0 {
StrNCopy(
&raw mut (*outfiles).rawcorrdumpfile as *mut ::core::ffi::c_char,
DUMP_RAWCORRDUMPFILE.as_ptr(),
MAXSTRLEN as size_t,
);
}
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetStreamPointers() -> ::core::ffi::c_int {
fflush(::core::ptr::null_mut::<FILE>());
sp0 = __stderrp;
if sp0.is_null() {
sp0 = fopen(
NULLFILE.as_ptr(),
b"w\0" as *const u8 as *const ::core::ffi::c_char,
) as *mut FILE;
if sp0.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unable to open null file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
NULLFILE.as_ptr(),
);
exit(ABNORMAL_EXIT);
}
}
sp1 = __stdoutp;
if sp1.is_null() {
sp1 = fopen(
NULLFILE.as_ptr(),
b"w\0" as *const u8 as *const ::core::ffi::c_char,
) as *mut FILE;
if sp1.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unable to open null file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
NULLFILE.as_ptr(),
);
exit(ABNORMAL_EXIT);
}
}
sp2 = ::core::ptr::null_mut::<FILE>();
if sp2.is_null() {
sp2 = fopen(
NULLFILE.as_ptr(),
b"w\0" as *const u8 as *const ::core::ffi::c_char,
) as *mut FILE;
if sp2.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unable to open null file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
NULLFILE.as_ptr(),
);
exit(ABNORMAL_EXIT);
}
}
sp3 = ::core::ptr::null_mut::<FILE>();
if sp3.is_null() {
sp3 = fopen(
NULLFILE.as_ptr(),
b"w\0" as *const u8 as *const ::core::ffi::c_char,
) as *mut FILE;
if sp3.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"unable to open null file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
NULLFILE.as_ptr(),
);
exit(ABNORMAL_EXIT);
}
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetVerboseOut(mut params: *mut paramT) -> ::core::ffi::c_int {
fflush(::core::ptr::null_mut::<FILE>());
if (*params).verbose != 0 {
if sp2 != __stdoutp && sp2 != __stderrp && sp2 != __stdinp && !sp2.is_null() {
fclose(sp2);
}
sp2 = __stdoutp;
if sp3 != __stdoutp && sp3 != __stderrp && sp3 != __stdinp && !sp3.is_null() {
fclose(sp3);
}
sp3 = __stdoutp;
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn DumpIncrCostFiles(
mut incrcosts: *mut *mut incrcostT,
mut iincrcostfile: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
let mut incrcostfile: [::core::ffi::c_char; 512] = [0; 512];
let mut tempstr: [::core::ffi::c_char; 512] = [0; 512];
let mut tempcosts: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
tempcosts = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
*(*tempcosts.offset(row as isize)).offset(col as isize) =
(*(*incrcosts.offset(row as isize)).offset(col as isize)).poscost;
col += 1;
}
row += 1;
}
strncpy(
&raw mut incrcostfile as *mut ::core::ffi::c_char,
INCRCOSTFILEPOS.as_ptr(),
(MAXSTRLEN - 1 as ::core::ffi::c_int) as size_t,
);
sprintf(
&raw mut tempstr as *mut ::core::ffi::c_char,
b".%ld_%ld\0" as *const u8 as *const ::core::ffi::c_char,
iincrcostfile,
nflow,
);
strncat(
&raw mut incrcostfile as *mut ::core::ffi::c_char,
&raw mut tempstr as *mut ::core::ffi::c_char,
(MAXSTRLEN as size_t)
.wrapping_sub(strlen(&raw mut incrcostfile as *mut ::core::ffi::c_char))
.wrapping_sub(1 as size_t),
);
Write2DRowColArray(
tempcosts as *mut *mut ::core::ffi::c_void,
&raw mut incrcostfile as *mut ::core::ffi::c_char,
nrow,
ncol,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
*(*tempcosts.offset(row as isize)).offset(col as isize) =
(*(*incrcosts.offset(row as isize)).offset(col as isize)).negcost;
col += 1;
}
row += 1;
}
strncpy(
&raw mut incrcostfile as *mut ::core::ffi::c_char,
INCRCOSTFILENEG.as_ptr(),
(MAXSTRLEN - 1 as ::core::ffi::c_int) as size_t,
);
sprintf(
&raw mut tempstr as *mut ::core::ffi::c_char,
b".%ld_%ld\0" as *const u8 as *const ::core::ffi::c_char,
iincrcostfile,
nflow,
);
strncat(
&raw mut incrcostfile as *mut ::core::ffi::c_char,
&raw mut tempstr as *mut ::core::ffi::c_char,
(MAXSTRLEN as size_t)
.wrapping_sub(strlen(&raw mut incrcostfile as *mut ::core::ffi::c_char))
.wrapping_sub(1 as size_t),
);
Write2DRowColArray(
tempcosts as *mut *mut ::core::ffi::c_void,
&raw mut incrcostfile as *mut ::core::ffi::c_char,
nrow,
ncol,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
Free2DArray(
tempcosts as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn MakeTileDir(
mut params: *mut paramT,
mut outfiles: *mut outfileT,
) -> ::core::ffi::c_int {
let mut path: [::core::ffi::c_char; 512] = [0; 512];
let mut basename: [::core::ffi::c_char; 512] = [0; 512];
let mut statbuf: [stat; 1] = [stat {
st_dev: 0,
st_mode: 0,
st_nlink: 0,
st_ino: 0,
st_uid: 0,
st_gid: 0,
st_rdev: 0,
st_atimespec: timespec {
tv_sec: 0,
tv_nsec: 0,
},
st_mtimespec: timespec {
tv_sec: 0,
tv_nsec: 0,
},
st_ctimespec: timespec {
tv_sec: 0,
tv_nsec: 0,
},
st_birthtimespec: timespec {
tv_sec: 0,
tv_nsec: 0,
},
st_size: 0,
st_blocks: 0,
st_blksize: 0,
st_flags: 0,
st_gen: 0,
st_lspare: 0,
st_qspare: [0; 2],
}; 1];
memset(
&raw mut path as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut basename as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut statbuf as *mut stat as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<stat>() as size_t,
);
if strlen(&raw mut (*params).tiledir as *mut ::core::ffi::c_char) == 0 {
ParseFilename(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
b"%s%s%ld\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
TMPTILEDIRROOT.as_ptr(),
(*params).parentpid,
);
}
if stat(
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
&raw mut statbuf as *mut stat,
) == 0
{
return 0 as ::core::ffi::c_int;
}
fprintf(
sp1,
b"Creating temporary directory %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
);
if mkdir(
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
TILEDIRMODE as mode_t,
) != 0
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error creating directory %s\nAbort\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetTileInitOutfile(
mut outfile: *mut ::core::ffi::c_char,
mut pid: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut path: [::core::ffi::c_char; 512] = [0; 512];
let mut basename: [::core::ffi::c_char; 512] = [0; 512];
let mut statbuf: [stat; 1] = [stat {
st_dev: 0,
st_mode: 0,
st_nlink: 0,
st_ino: 0,
st_uid: 0,
st_gid: 0,
st_rdev: 0,
st_atimespec: timespec {
tv_sec: 0,
tv_nsec: 0,
},
st_mtimespec: timespec {
tv_sec: 0,
tv_nsec: 0,
},
st_ctimespec: timespec {
tv_sec: 0,
tv_nsec: 0,
},
st_birthtimespec: timespec {
tv_sec: 0,
tv_nsec: 0,
},
st_size: 0,
st_blocks: 0,
st_blksize: 0,
st_flags: 0,
st_gen: 0,
st_lspare: 0,
st_qspare: [0; 2],
}; 1];
memset(
&raw mut path as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut basename as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut statbuf as *mut stat as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<stat>() as size_t,
);
ParseFilename(
outfile,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
outfile,
b"%s%s%ld_%s\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
TILEINITFILEROOT.as_ptr(),
pid,
&raw mut basename as *mut ::core::ffi::c_char,
);
if stat(outfile, &raw mut statbuf as *mut stat) == 0 {
fprintf(
sp0,
b"ERROR: refusing to write tile init to existing file %s\n\0" as *const u8
as *const ::core::ffi::c_char,
outfile,
);
exit(ABNORMAL_EXIT);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ParseFilename(
mut filename: *mut ::core::ffi::c_char,
mut path: *mut ::core::ffi::c_char,
mut basename: *mut ::core::ffi::c_char,
) -> ::core::ffi::c_int {
let mut tempstring: [::core::ffi::c_char; 512] = [0; 512];
let mut tempouttok: *mut ::core::ffi::c_char = ::core::ptr::null_mut::<::core::ffi::c_char>();
if strlen(filename) == 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Zero-length filename passed to ParseFilename()\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if *filename.offset(0 as ::core::ffi::c_int as isize) as ::core::ffi::c_int == '/' as i32 {
StrNCopy(
path,
b"/\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
path,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
StrNCopy(
&raw mut tempstring as *mut ::core::ffi::c_char,
filename,
MAXSTRLEN as size_t,
);
tempouttok = strtok(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"/\0" as *const u8 as *const ::core::ffi::c_char,
);
loop {
StrNCopy(basename, tempouttok, MAXSTRLEN as size_t);
tempouttok = strtok(
::core::ptr::null_mut::<::core::ffi::c_char>(),
b"/\0" as *const u8 as *const ::core::ffi::c_char,
);
if tempouttok.is_null() {
break;
}
strcat(path, basename);
strcat(path, b"/\0" as *const u8 as *const ::core::ffi::c_char);
}
if strlen(basename) == 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Zero-length base filename found in ParseFilename()\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return 0 as ::core::ffi::c_int;
}
static mut NeighborNode: Option<
unsafe extern "C" fn(
*mut nodeT,
::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut *mut nodeT,
*mut nodeT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut boundaryT,
*mut *mut nodesuppT,
) -> *mut nodeT,
> = None;
static mut GetArc: Option<
unsafe extern "C" fn(
*mut nodeT,
*mut nodeT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut *mut nodeT,
*mut *mut nodesuppT,
) -> (),
> = None;
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetGridNetworkFunctionPointers() -> ::core::ffi::c_int {
NeighborNode = Some(
NeighborNodeGrid
as unsafe extern "C" fn(
*mut nodeT,
::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut *mut nodeT,
*mut nodeT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut boundaryT,
*mut *mut nodesuppT,
) -> *mut nodeT,
)
as Option<
unsafe extern "C" fn(
*mut nodeT,
::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut *mut nodeT,
*mut nodeT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut boundaryT,
*mut *mut nodesuppT,
) -> *mut nodeT,
>;
GetArc = Some(
GetArcGrid
as unsafe extern "C" fn(
*mut nodeT,
*mut nodeT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut *mut nodeT,
*mut *mut nodesuppT,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut nodeT,
*mut nodeT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut *mut nodeT,
*mut *mut nodesuppT,
) -> (),
>;
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetNonGridNetworkFunctionPointers() -> ::core::ffi::c_int {
NeighborNode = Some(
NeighborNodeNonGrid
as unsafe extern "C" fn(
*mut nodeT,
::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut *mut nodeT,
*mut nodeT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut boundaryT,
*mut *mut nodesuppT,
) -> *mut nodeT,
)
as Option<
unsafe extern "C" fn(
*mut nodeT,
::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut *mut nodeT,
*mut nodeT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut boundaryT,
*mut *mut nodesuppT,
) -> *mut nodeT,
>;
GetArc = Some(
GetArcNonGrid
as unsafe extern "C" fn(
*mut nodeT,
*mut nodeT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut *mut nodeT,
*mut *mut nodesuppT,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut nodeT,
*mut nodeT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut *mut nodeT,
*mut *mut nodesuppT,
) -> (),
>;
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn TreeSolve(
mut nodes_0: *mut *mut nodeT,
mut nodesupp: *mut *mut nodesuppT,
mut ground: *mut nodeT,
mut source: *mut nodeT,
mut candidatelistptr: *mut *mut candidateT,
mut candidatebagptr: *mut *mut candidateT,
mut candidatelistsizeptr: *mut ::core::ffi::c_long,
mut candidatebagsizeptr: *mut ::core::ffi::c_long,
mut bkts: *mut bucketT,
mut flows: *mut *mut ::core::ffi::c_short,
mut costs: *mut *mut ::core::ffi::c_void,
mut incrcosts: *mut *mut incrcostT,
mut apexes: *mut *mut *mut nodeT,
mut iscandidate: *mut *mut ::core::ffi::c_schar,
mut ngroundarcs: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut mag: *mut *mut ::core::ffi::c_float,
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut outfile: *mut ::core::ffi::c_char,
mut nnoderow: ::core::ffi::c_long,
mut nnodesperrow: *mut ::core::ffi::c_int,
mut narcrow: ::core::ffi::c_long,
mut narcsperrow: *mut ::core::ffi::c_int,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut outfiles: *mut outfileT,
mut nconnected: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
let mut i: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcdir: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut upperarcnum: ::core::ffi::c_long = 0;
let mut arcrow1: ::core::ffi::c_long = 0;
let mut arccol1: ::core::ffi::c_long = 0;
let mut arcdir1: ::core::ffi::c_long = 0;
let mut arcrow2: ::core::ffi::c_long = 0;
let mut arccol2: ::core::ffi::c_long = 0;
let mut arcdir2: ::core::ffi::c_long = 0;
let mut treesize: ::core::ffi::c_long = 0;
let mut candidatelistsize: ::core::ffi::c_long = 0;
let mut candidatebagsize: ::core::ffi::c_long = 0;
let mut violation: ::core::ffi::c_long = 0;
let mut groupcounter: ::core::ffi::c_long = 0;
let mut fromgroup: ::core::ffi::c_long = 0;
let mut group1: ::core::ffi::c_long = 0;
let mut apexlistbase: ::core::ffi::c_long = 0;
let mut apexlistlen: ::core::ffi::c_long = 0;
let mut cyclecost: ::core::ffi::c_long = 0;
let mut outcostto: ::core::ffi::c_long = 0;
let mut startlevel: ::core::ffi::c_long = 0;
let mut dlevel: ::core::ffi::c_long = 0;
let mut doutcost: ::core::ffi::c_long = 0;
let mut dincost: ::core::ffi::c_long = 0;
let mut candidatelistlen: ::core::ffi::c_long = 0;
let mut candidatebagnext: ::core::ffi::c_long = 0;
let mut inondegen: ::core::ffi::c_long = 0;
let mut ipivots: ::core::ffi::c_long = 0;
let mut nnewnodes: ::core::ffi::c_long = 0;
let mut maxnewnodes: ::core::ffi::c_long = 0;
let mut templong: ::core::ffi::c_long = 0;
let mut nmajor: ::core::ffi::c_long = 0;
let mut nmajorprune: ::core::ffi::c_long = 0;
let mut npruned: ::core::ffi::c_long = 0;
let mut prunecostthresh: ::core::ffi::c_long = 0;
let mut fromside: ::core::ffi::c_schar = 0;
let mut candidatelist: *mut candidateT = ::core::ptr::null_mut::<candidateT>();
let mut candidatebag: *mut candidateT = ::core::ptr::null_mut::<candidateT>();
let mut tempcandidateptr: *mut candidateT = ::core::ptr::null_mut::<candidateT>();
let mut from: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut cycleapex: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut node1: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut node2: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut leavingparent: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut leavingchild: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut root: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut mntpt: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut oldmntpt: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut skipthread: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut tempnode1: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut tempnode2: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut firstfromnode: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut firsttonode: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut apexlist: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
let mut boundary: [boundaryT; 1] = [boundaryST {
node: [nodeST {
row: 0,
col: 0,
next: ::core::ptr::null_mut::<nodeST>(),
prev: ::core::ptr::null_mut::<nodeST>(),
pred: ::core::ptr::null_mut::<nodeST>(),
level: 0,
group: 0,
incost: 0,
outcost: 0,
}; 1],
neighborlist: ::core::ptr::null_mut::<neighborT>(),
boundarylist: ::core::ptr::null_mut::<*mut nodeT>(),
nneighbor: 0,
nboundary: 0,
}; 1];
let mut unwrappedphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
memset(
&raw mut boundary as *mut boundaryT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<boundaryT>() as size_t,
);
from = ::core::ptr::null_mut::<nodeT>();
to = ::core::ptr::null_mut::<nodeT>();
cycleapex = ::core::ptr::null_mut::<nodeT>();
node1 = ::core::ptr::null_mut::<nodeT>();
node2 = ::core::ptr::null_mut::<nodeT>();
leavingparent = ::core::ptr::null_mut::<nodeT>();
leavingchild = ::core::ptr::null_mut::<nodeT>();
root = ::core::ptr::null_mut::<nodeT>();
mntpt = ::core::ptr::null_mut::<nodeT>();
oldmntpt = ::core::ptr::null_mut::<nodeT>();
skipthread = ::core::ptr::null_mut::<nodeT>();
tempnode1 = ::core::ptr::null_mut::<nodeT>();
tempnode2 = ::core::ptr::null_mut::<nodeT>();
firstfromnode = ::core::ptr::null_mut::<nodeT>();
firsttonode = ::core::ptr::null_mut::<nodeT>();
candidatelist = *candidatelistptr;
candidatebag = *candidatebagptr;
candidatelistsize = *candidatelistsizeptr;
candidatebagsize = *candidatebagsizeptr;
candidatelistlen = 0 as ::core::ffi::c_long;
candidatebagnext = 0 as ::core::ffi::c_long;
source = InitBoundary(
source,
nodes_0,
&raw mut boundary as *mut boundaryT,
nodesupp,
mag,
ground,
ngroundarcs,
nrow,
ncol,
params,
&raw mut nconnected,
);
(*bkts).curr = (*bkts).maxind;
InitTree(
source,
nodes_0,
&raw mut boundary as *mut boundaryT,
nodesupp,
ground,
ngroundarcs,
bkts,
nflow,
incrcosts,
nrow,
ncol,
params,
);
apexlistlen = INITARRSIZE as ::core::ffi::c_long;
apexlist = MAlloc(
(apexlistlen as size_t).wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
groupcounter = 2 as ::core::ffi::c_long;
ipivots = 0 as ::core::ffi::c_long;
inondegen = 0 as ::core::ffi::c_long;
maxnewnodes = ceil(nconnected as ::core::ffi::c_double * (*params).maxnewnodeconst)
as ::core::ffi::c_long;
nnewnodes = 0 as ::core::ffi::c_long;
treesize = 1 as ::core::ffi::c_long;
npruned = 0 as ::core::ffi::c_long;
nmajor = 0 as ::core::ffi::c_long;
nmajorprune = (*params).nmajorprune;
prunecostthresh = (*params).prunecostthresh;
fprintf(
sp3,
b"Treesize: %-10ld Pivots: %-11ld Improvements: %-11ld\0" as *const u8
as *const ::core::ffi::c_char,
treesize,
ipivots,
inondegen,
);
while treesize < nconnected {
nnewnodes = 0 as ::core::ffi::c_long;
while nnewnodes < maxnewnodes && treesize < nconnected {
to = MinOutCostNode(bkts);
from = (*to).pred as *mut nodeT;
GetArc.expect("non-null function pointer")(
from,
to,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
nodes_0,
nodesupp,
);
(*to).group = 1 as ::core::ffi::c_int;
(*to).level = (*from).level.wrapping_add(1 as ::core::ffi::c_uint);
(*to).incost =
(*from).incost + GetCost(incrcosts, arcrow, arccol, -arcdir) as ::core::ffi::c_int;
(*to).next = (*from).next;
(*to).prev = from as *mut nodeST;
(*(*to).next).prev = to as *mut nodeST;
(*from).next = to as *mut nodeST;
from = to;
arcnum = GetArcNumLims(
(*from).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
&raw mut boundary as *mut boundaryT,
);
while arcnum < upperarcnum {
arcnum += 1;
to = NeighborNode.expect("non-null function pointer")(
from,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
&raw mut boundary as *mut boundaryT,
nodesupp,
);
if (*to).group > 0 as ::core::ffi::c_int {
if to != (*from).pred {
cycleapex = FindApex(from, to);
let ref mut fresh42 =
*(*apexes.offset(arcrow as isize)).offset(arccol as isize);
*fresh42 = cycleapex;
CheckArcReducedCost(
from,
to,
cycleapex,
arcrow,
arccol,
arcdir,
&raw mut candidatebag,
&raw mut candidatebagnext,
&raw mut candidatebagsize,
incrcosts,
iscandidate,
params,
);
} else {
let ref mut fresh43 =
*(*apexes.offset(arcrow as isize)).offset(arccol as isize);
*fresh43 = ::core::ptr::null_mut::<nodeT>();
}
} else if (*to).group != PRUNED && (*to).group != MASKED {
AddNewNode(
from, to, arcdir, bkts, nflow, incrcosts, arcrow, arccol, params,
);
}
}
nnewnodes += 1;
treesize += 1;
}
while candidatebagnext != 0 {
if dumpresults_global != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"\n\nDumping current solution to file %s\n\0" as *const u8
as *const ::core::ffi::c_char,
outfile,
);
if requestedstop_global != 0 {
Free2DArray(
costs,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long)
as ::core::ffi::c_uint,
);
}
unwrappedphase = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
IntegratePhase(wrappedphase, unwrappedphase, flows, nrow, ncol);
FlipPhaseArraySign(unwrappedphase, params, nrow, ncol);
WriteOutputFile(
mag,
unwrappedphase,
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
outfiles,
nrow,
ncol,
);
if requestedstop_global != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Program exiting\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
Free2DArray(
unwrappedphase as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
dumpresults_global = FALSE as ::core::ffi::c_char;
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"\n\nProgram continuing\n\0" as *const u8 as *const ::core::ffi::c_char,
);
}
tempcandidateptr = candidatebag;
candidatebag = candidatelist;
candidatelist = tempcandidateptr;
templong = candidatebagsize;
candidatebagsize = candidatelistsize;
candidatelistsize = templong;
candidatelistlen = candidatebagnext;
candidatebagnext = 0 as ::core::ffi::c_long;
qsort(
candidatelist as *mut ::core::ffi::c_void,
candidatelistlen as size_t,
::core::mem::size_of::<candidateT>() as size_t,
Some(
CandidateCompare
as unsafe extern "C" fn(
*const ::core::ffi::c_void,
*const ::core::ffi::c_void,
) -> ::core::ffi::c_int,
),
);
i = 0 as ::core::ffi::c_long;
while i < candidatelistlen {
if (*candidatelist.offset(i as isize)).arcdir as ::core::ffi::c_int
> 1 as ::core::ffi::c_int
{
(*candidatelist.offset(i as isize)).arcdir = 1 as ::core::ffi::c_schar;
} else if ((*candidatelist.offset(i as isize)).arcdir as ::core::ffi::c_int)
< -(1 as ::core::ffi::c_int)
{
(*candidatelist.offset(i as isize)).arcdir =
-(1 as ::core::ffi::c_int) as ::core::ffi::c_schar;
}
i += 1;
}
i = 0 as ::core::ffi::c_long;
while i < candidatelistlen {
from = (*candidatelist.offset(i as isize)).from;
to = (*candidatelist.offset(i as isize)).to;
arcdir = (*candidatelist.offset(i as isize)).arcdir as ::core::ffi::c_long;
arcrow = (*candidatelist.offset(i as isize)).arcrow as ::core::ffi::c_long;
arccol = (*candidatelist.offset(i as isize)).arccol as ::core::ffi::c_long;
*(*iscandidate.offset(arcrow as isize)).offset(arccol as isize) =
FALSE as ::core::ffi::c_schar;
outcostto = ((*from).outcost
+ GetCost(incrcosts, arcrow, arccol, arcdir) as ::core::ffi::c_int)
as ::core::ffi::c_long;
cyclecost = outcostto + (*to).incost as ::core::ffi::c_long
- (**(*apexes.offset(arcrow as isize)).offset(arccol as isize)).outcost
as ::core::ffi::c_long
- (**(*apexes.offset(arcrow as isize)).offset(arccol as isize)).incost
as ::core::ffi::c_long;
if !(outcostto < (*to).outcost as ::core::ffi::c_long
|| cyclecost < 0 as ::core::ffi::c_long)
{
from = to;
to = (*candidatelist.offset(i as isize)).from;
arcdir = -arcdir;
outcostto = ((*from).outcost
+ GetCost(incrcosts, arcrow, arccol, arcdir) as ::core::ffi::c_int)
as ::core::ffi::c_long;
cyclecost = outcostto + (*to).incost as ::core::ffi::c_long
- (**(*apexes.offset(arcrow as isize)).offset(arccol as isize)).outcost
as ::core::ffi::c_long
- (**(*apexes.offset(arcrow as isize)).offset(arccol as isize)).incost
as ::core::ffi::c_long;
}
if outcostto < (*to).outcost as ::core::ffi::c_long
|| cyclecost < 0 as ::core::ffi::c_long
{
groupcounter += 1;
if groupcounter > MAXGROUPBASE as ::core::ffi::c_long {
row = 0 as ::core::ffi::c_long;
while row < nnoderow {
col = 0 as ::core::ffi::c_long;
while col < *nnodesperrow.offset(row as isize) as ::core::ffi::c_long {
if (*(*nodes_0.offset(row as isize)).offset(col as isize)).group
> 0 as ::core::ffi::c_int
{
(*(*nodes_0.offset(row as isize)).offset(col as isize)).group =
1 as ::core::ffi::c_int;
}
col += 1;
}
row += 1;
}
if !ground.is_null() && (*ground).group > 0 as ::core::ffi::c_int {
(*ground).group = 1 as ::core::ffi::c_int;
}
if (*(&raw mut (*(&raw mut boundary as *mut boundaryT)).node as *mut nodeT))
.group
> 0 as ::core::ffi::c_int
{
(*(&raw mut (*(&raw mut boundary as *mut boundaryT)).node
as *mut nodeT))
.group = 1 as ::core::ffi::c_int;
}
groupcounter = 2 as ::core::ffi::c_long;
}
if cyclecost < 0 as ::core::ffi::c_long {
loop {
fromside = TRUE as ::core::ffi::c_schar;
node1 = from;
node2 = to;
leavingchild = ::core::ptr::null_mut::<nodeT>();
let ref mut fresh44 =
*(*flows.offset(arcrow as isize)).offset(arccol as isize);
*fresh44 = (*fresh44 as ::core::ffi::c_long + arcdir * nflow)
as ::core::ffi::c_short;
ReCalcCost(
costs,
incrcosts,
*(*flows.offset(arcrow as isize)).offset(arccol as isize)
as ::core::ffi::c_long,
arcrow,
arccol,
nflow,
nrow,
params,
);
violation =
GetCost(incrcosts, arcrow, arccol, arcdir) as ::core::ffi::c_long;
if (*node1).level > (*node2).level {
while (*node1).level != (*node2).level {
GetArc.expect("non-null function pointer")(
(*node1).pred as *mut nodeT,
node1,
&raw mut arcrow1,
&raw mut arccol1,
&raw mut arcdir1,
nrow,
ncol,
nodes_0,
nodesupp,
);
let ref mut fresh45 =
*(*flows.offset(arcrow1 as isize)).offset(arccol1 as isize);
*fresh45 = (*fresh45 as ::core::ffi::c_long + arcdir1 * nflow)
as ::core::ffi::c_short;
ReCalcCost(
costs,
incrcosts,
*(*flows.offset(arcrow1 as isize)).offset(arccol1 as isize)
as ::core::ffi::c_long,
arcrow1,
arccol1,
nflow,
nrow,
params,
);
if leavingchild.is_null()
&& *(*flows.offset(arcrow1 as isize))
.offset(arccol1 as isize)
== 0
{
leavingchild = node1;
}
violation += GetCost(incrcosts, arcrow1, arccol1, arcdir1)
as ::core::ffi::c_long;
(*node1).group = (groupcounter + 1 as ::core::ffi::c_long)
as ::core::ffi::c_int;
node1 = (*node1).pred as *mut nodeT;
}
} else {
while (*node1).level != (*node2).level {
GetArc.expect("non-null function pointer")(
(*node2).pred as *mut nodeT,
node2,
&raw mut arcrow2,
&raw mut arccol2,
&raw mut arcdir2,
nrow,
ncol,
nodes_0,
nodesupp,
);
let ref mut fresh46 =
*(*flows.offset(arcrow2 as isize)).offset(arccol2 as isize);
*fresh46 = (*fresh46 as ::core::ffi::c_long - arcdir2 * nflow)
as ::core::ffi::c_short;
ReCalcCost(
costs,
incrcosts,
*(*flows.offset(arcrow2 as isize)).offset(arccol2 as isize)
as ::core::ffi::c_long,
arcrow2,
arccol2,
nflow,
nrow,
params,
);
if *(*flows.offset(arcrow2 as isize)).offset(arccol2 as isize)
== 0
{
leavingchild = node2;
fromside = FALSE as ::core::ffi::c_schar;
}
violation += GetCost(incrcosts, arcrow2, arccol2, -arcdir2)
as ::core::ffi::c_long;
(*node2).group = groupcounter as ::core::ffi::c_int;
node2 = (*node2).pred as *mut nodeT;
}
}
while node1 != node2 {
GetArc.expect("non-null function pointer")(
(*node1).pred as *mut nodeT,
node1,
&raw mut arcrow1,
&raw mut arccol1,
&raw mut arcdir1,
nrow,
ncol,
nodes_0,
nodesupp,
);
GetArc.expect("non-null function pointer")(
(*node2).pred as *mut nodeT,
node2,
&raw mut arcrow2,
&raw mut arccol2,
&raw mut arcdir2,
nrow,
ncol,
nodes_0,
nodesupp,
);
let ref mut fresh47 =
*(*flows.offset(arcrow1 as isize)).offset(arccol1 as isize);
*fresh47 = (*fresh47 as ::core::ffi::c_long + arcdir1 * nflow)
as ::core::ffi::c_short;
let ref mut fresh48 =
*(*flows.offset(arcrow2 as isize)).offset(arccol2 as isize);
*fresh48 = (*fresh48 as ::core::ffi::c_long - arcdir2 * nflow)
as ::core::ffi::c_short;
ReCalcCost(
costs,
incrcosts,
*(*flows.offset(arcrow1 as isize)).offset(arccol1 as isize)
as ::core::ffi::c_long,
arcrow1,
arccol1,
nflow,
nrow,
params,
);
ReCalcCost(
costs,
incrcosts,
*(*flows.offset(arcrow2 as isize)).offset(arccol2 as isize)
as ::core::ffi::c_long,
arcrow2,
arccol2,
nflow,
nrow,
params,
);
violation += (GetCost(incrcosts, arcrow1, arccol1, arcdir1)
as ::core::ffi::c_int
+ GetCost(incrcosts, arcrow2, arccol2, -arcdir2)
as ::core::ffi::c_int)
as ::core::ffi::c_long;
if *(*flows.offset(arcrow2 as isize)).offset(arccol2 as isize) == 0
{
leavingchild = node2;
fromside = FALSE as ::core::ffi::c_schar;
} else if leavingchild.is_null()
&& *(*flows.offset(arcrow1 as isize)).offset(arccol1 as isize)
== 0
{
leavingchild = node1;
}
(*node1).group =
(groupcounter + 1 as ::core::ffi::c_long) as ::core::ffi::c_int;
(*node2).group = groupcounter as ::core::ffi::c_int;
node1 = (*node1).pred as *mut nodeT;
node2 = (*node2).pred as *mut nodeT;
}
if violation >= 0 as ::core::ffi::c_long {
break;
}
}
inondegen += 1;
} else {
fromside = FALSE as ::core::ffi::c_schar;
node1 = from;
node2 = to;
leavingchild = ::core::ptr::null_mut::<nodeT>();
if (*node1).level > (*node2).level {
while (*node1).level != (*node2).level {
(*node1).group =
(groupcounter + 1 as ::core::ffi::c_long) as ::core::ffi::c_int;
node1 = (*node1).pred as *mut nodeT;
}
} else {
while (*node1).level != (*node2).level {
if outcostto < (*node2).outcost as ::core::ffi::c_long {
leavingchild = node2;
GetArc.expect("non-null function pointer")(
(*node2).pred as *mut nodeT,
node2,
&raw mut arcrow2,
&raw mut arccol2,
&raw mut arcdir2,
nrow,
ncol,
nodes_0,
nodesupp,
);
outcostto += GetCost(incrcosts, arcrow2, arccol2, -arcdir2)
as ::core::ffi::c_long;
} else {
outcostto = VERYFAR as ::core::ffi::c_long;
}
(*node2).group = groupcounter as ::core::ffi::c_int;
node2 = (*node2).pred as *mut nodeT;
}
}
while node1 != node2 {
if outcostto < (*node2).outcost as ::core::ffi::c_long {
leavingchild = node2;
GetArc.expect("non-null function pointer")(
(*node2).pred as *mut nodeT,
node2,
&raw mut arcrow2,
&raw mut arccol2,
&raw mut arcdir2,
nrow,
ncol,
nodes_0,
nodesupp,
);
outcostto += GetCost(incrcosts, arcrow2, arccol2, -arcdir2)
as ::core::ffi::c_long;
} else {
outcostto = VERYFAR as ::core::ffi::c_long;
}
(*node1).group =
(groupcounter + 1 as ::core::ffi::c_long) as ::core::ffi::c_int;
(*node2).group = groupcounter as ::core::ffi::c_int;
node1 = (*node1).pred as *mut nodeT;
node2 = (*node2).pred as *mut nodeT;
}
}
cycleapex = node1;
if leavingchild.is_null() {
fromside = TRUE as ::core::ffi::c_schar;
leavingparent = from;
} else {
leavingparent = (*leavingchild).pred as *mut nodeT;
}
if fromside != 0 {
groupcounter += 1;
fromgroup = groupcounter - 1 as ::core::ffi::c_long;
tempnode1 = from;
from = to;
to = tempnode1;
} else {
fromgroup = groupcounter + 1 as ::core::ffi::c_long;
}
if cyclecost < 0 as ::core::ffi::c_long {
firstfromnode = ::core::ptr::null_mut::<nodeT>();
firsttonode = ::core::ptr::null_mut::<nodeT>();
arcnum = GetArcNumLims(
(*cycleapex).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
&raw mut boundary as *mut boundaryT,
);
while arcnum < upperarcnum {
arcnum += 1;
tempnode1 = NeighborNode.expect("non-null function pointer")(
cycleapex,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
&raw mut boundary as *mut boundaryT,
nodesupp,
);
if (*tempnode1).group as ::core::ffi::c_long == groupcounter
&& (*(*apexes.offset(arcrow as isize)).offset(arccol as isize))
.is_null()
{
firsttonode = tempnode1;
if !firstfromnode.is_null() {
break;
}
} else {
if !((*tempnode1).group as ::core::ffi::c_long == fromgroup
&& (*(*apexes.offset(arcrow as isize)).offset(arccol as isize))
.is_null())
{
continue;
}
firstfromnode = tempnode1;
if !firsttonode.is_null() {
break;
}
}
}
(*cycleapex).group =
(groupcounter + 2 as ::core::ffi::c_long) as ::core::ffi::c_int;
if !firsttonode.is_null() {
NonDegenUpdateChildren(
cycleapex,
leavingparent,
firsttonode,
0 as ::core::ffi::c_long,
ngroundarcs,
nflow,
nodes_0,
nodesupp,
ground,
&raw mut boundary as *mut boundaryT,
apexes,
incrcosts,
nrow,
ncol,
params,
);
}
if !firstfromnode.is_null() {
NonDegenUpdateChildren(
cycleapex,
from,
firstfromnode,
1 as ::core::ffi::c_long,
ngroundarcs,
nflow,
nodes_0,
nodesupp,
ground,
&raw mut boundary as *mut boundaryT,
apexes,
incrcosts,
nrow,
ncol,
params,
);
}
groupcounter = (*from).group as ::core::ffi::c_long;
apexlistbase = (*cycleapex).group as ::core::ffi::c_long;
fromgroup = (*cycleapex).group as ::core::ffi::c_long;
} else {
(*cycleapex).group = fromgroup as ::core::ffi::c_int;
groupcounter += 2 as ::core::ffi::c_long;
apexlistbase = groupcounter + 1 as ::core::ffi::c_long;
}
if leavingchild.is_null() {
skipthread = to;
} else {
root = from;
oldmntpt = to;
while oldmntpt != leavingparent {
mntpt = root;
root = oldmntpt;
oldmntpt = (*root).pred as *mut nodeT;
(*root).pred = mntpt as *mut nodeST;
GetArc.expect("non-null function pointer")(
mntpt,
root,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
nodes_0,
nodesupp,
);
dlevel = (*mntpt)
.level
.wrapping_sub((*root).level)
.wrapping_add(1 as ::core::ffi::c_uint)
as ::core::ffi::c_long;
doutcost = ((*mntpt).outcost - (*root).outcost
+ GetCost(incrcosts, arcrow, arccol, arcdir) as ::core::ffi::c_int)
as ::core::ffi::c_long;
dincost = ((*mntpt).incost - (*root).incost
+ GetCost(incrcosts, arcrow, arccol, -arcdir) as ::core::ffi::c_int)
as ::core::ffi::c_long;
node1 = root;
startlevel = (*root).level as ::core::ffi::c_long;
groupcounter += 1;
loop {
(*node1).level = ((*node1).level as ::core::ffi::c_long + dlevel)
as ::core::ffi::c_uint;
(*node1).outcost = ((*node1).outcost as ::core::ffi::c_long
+ doutcost)
as ::core::ffi::c_int;
(*node1).incost = ((*node1).incost as ::core::ffi::c_long + dincost)
as ::core::ffi::c_int;
(*node1).group = groupcounter as ::core::ffi::c_int;
if (*(*node1).next).level as ::core::ffi::c_long <= startlevel {
break;
}
node1 = (*node1).next as *mut nodeT;
}
(*(*root).prev).next = (*node1).next;
(*(*node1).next).prev = (*root).prev;
(*node1).next = (*mntpt).next;
(*(*mntpt).next).prev = node1 as *mut nodeST;
(*mntpt).next = root as *mut nodeST;
(*root).prev = mntpt as *mut nodeST;
}
skipthread = (*node1).next as *mut nodeT;
GetArc.expect("non-null function pointer")(
from,
to,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
nodes_0,
nodesupp,
);
let ref mut fresh49 =
*(*apexes.offset(arcrow as isize)).offset(arccol as isize);
*fresh49 = ::core::ptr::null_mut::<nodeT>();
GetArc.expect("non-null function pointer")(
leavingparent,
leavingchild,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
nodes_0,
nodesupp,
);
let ref mut fresh50 =
*(*apexes.offset(arcrow as isize)).offset(arccol as isize);
*fresh50 = cycleapex;
if groupcounter - apexlistbase + 1 as ::core::ffi::c_long > apexlistlen {
apexlistlen = (1.5f64
* (groupcounter - apexlistbase + 1 as ::core::ffi::c_long)
as ::core::ffi::c_double)
as ::core::ffi::c_long;
apexlist = ReAlloc(
apexlist as *mut ::core::ffi::c_void,
(apexlistlen as size_t).wrapping_mul(::core::mem::size_of::<
*mut nodeT,
>(
)
as size_t),
) as *mut *mut nodeT;
}
node2 = leavingchild;
group1 = groupcounter;
while group1 >= apexlistbase {
let ref mut fresh51 =
*apexlist.offset((group1 - apexlistbase) as isize);
*fresh51 = node2;
node2 = (*node2).pred as *mut nodeT;
group1 -= 1;
}
node1 = to;
startlevel = (*to).level as ::core::ffi::c_long;
loop {
arcnum = GetArcNumLims(
(*node1).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
&raw mut boundary as *mut boundaryT,
);
while arcnum < upperarcnum {
arcnum += 1;
node2 = NeighborNode.expect("non-null function pointer")(
node1,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
&raw mut boundary as *mut boundaryT,
nodesupp,
);
if (*node2).group > 0 as ::core::ffi::c_int {
if (*node2).group < (*node1).group
&& !(*(*apexes.offset(arcrow as isize))
.offset(arccol as isize))
.is_null()
{
if (*node2).group as ::core::ffi::c_long >= apexlistbase {
let ref mut fresh52 = *(*apexes
.offset(arcrow as isize))
.offset(arccol as isize);
*fresh52 = *apexlist.offset(
((*node2).group as ::core::ffi::c_long
- apexlistbase)
as isize,
);
} else if (**(*apexes.offset(arcrow as isize))
.offset(arccol as isize))
.level
> (*cycleapex).level
{
let ref mut fresh53 = *(*apexes
.offset(arcrow as isize))
.offset(arccol as isize);
*fresh53 = cycleapex;
} else if *(*apexes.offset(arcrow as isize))
.offset(arccol as isize)
== cycleapex
{
tempnode2 = node2;
while (*tempnode2).group as ::core::ffi::c_long
!= fromgroup
{
tempnode2 = (*tempnode2).pred as *mut nodeT;
}
let ref mut fresh54 = *(*apexes
.offset(arcrow as isize))
.offset(arccol as isize);
*fresh54 = tempnode2;
}
CheckArcReducedCost(
node1,
node2,
*(*apexes.offset(arcrow as isize))
.offset(arccol as isize),
arcrow,
arccol,
arcdir,
&raw mut candidatebag,
&raw mut candidatebagnext,
&raw mut candidatebagsize,
incrcosts,
iscandidate,
params,
);
}
} else if (*node2).group != PRUNED && (*node2).group != MASKED {
AddNewNode(
node1, node2, arcdir, bkts, nflow, incrcosts, arcrow,
arccol, params,
);
}
}
node1 = (*node1).next as *mut nodeT;
if (*node1).level as ::core::ffi::c_long <= startlevel {
break;
}
}
}
if cyclecost < 0 as ::core::ffi::c_long {
loop {
if !firstfromnode.is_null() && (*firstfromnode).pred == cycleapex {
node1 = firstfromnode;
firstfromnode = ::core::ptr::null_mut::<nodeT>();
} else {
if !(!firsttonode.is_null() && (*firsttonode).pred == cycleapex) {
break;
}
node1 = firsttonode;
firsttonode = ::core::ptr::null_mut::<nodeT>();
}
startlevel = (*node1).level as ::core::ffi::c_long;
loop {
arcnum = GetArcNumLims(
(*node1).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
&raw mut boundary as *mut boundaryT,
);
while arcnum < upperarcnum {
arcnum += 1;
node2 = NeighborNode.expect("non-null function pointer")(
node1,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
&raw mut boundary as *mut boundaryT,
nodesupp,
);
if (*node2).group > 0 as ::core::ffi::c_int {
if !(*(*apexes.offset(arcrow as isize))
.offset(arccol as isize))
.is_null()
&& ((*node2).group != (*node1).group
|| (*node1).group as ::core::ffi::c_long
== apexlistbase)
{
CheckArcReducedCost(
node1,
node2,
*(*apexes.offset(arcrow as isize))
.offset(arccol as isize),
arcrow,
arccol,
arcdir,
&raw mut candidatebag,
&raw mut candidatebagnext,
&raw mut candidatebagsize,
incrcosts,
iscandidate,
params,
);
}
} else if (*node2).group != PRUNED && (*node2).group != MASKED {
AddNewNode(
node1, node2, arcdir, bkts, nflow, incrcosts, arcrow,
arccol, params,
);
}
}
node1 = (*node1).next as *mut nodeT;
if node1 == to {
node1 = skipthread;
}
if (*node1).level as ::core::ffi::c_long <= startlevel {
break;
}
}
}
}
ipivots += 1;
}
i += 1;
}
fprintf(
sp3,
b"\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08Treesize: %-10ld Pivots: %-11ld Improvements: %-11ld\0"
as *const u8 as *const ::core::ffi::c_char,
treesize,
ipivots,
inondegen,
);
fflush(sp3);
}
nmajor += 1;
if nmajor % nmajorprune == 0 {
npruned += PruneTree(
source,
nodes_0,
ground,
&raw mut boundary as *mut boundaryT,
nodesupp,
incrcosts,
flows,
ngroundarcs,
prunecostthresh,
nrow,
ncol,
);
}
}
node1 = (*source).next as *mut nodeT;
while node1 != source {
if (*(*node1).pred).level != (*node1).level.wrapping_sub(1 as ::core::ffi::c_uint) {
printf(
b"Error detected: row %d, col%d, level %d has pred row %d, col%d, level %d\n\0"
as *const u8 as *const ::core::ffi::c_char,
(*node1).row,
(*node1).col,
(*node1).level,
(*(*node1).pred).row,
(*(*node1).pred).col,
(*(*node1).pred).level,
);
}
node1 = (*node1).next as *mut nodeT;
}
DischargeBoundary(
nodes_0,
ground,
&raw mut boundary as *mut boundaryT,
nodesupp,
flows,
iscandidate,
mag,
wrappedphase,
ngroundarcs,
nrow,
ncol,
);
i = 0 as ::core::ffi::c_long;
while i < (*bkts).size {
if !(*(*bkts).bucketbase.offset(i as isize)).is_null() {
printf(
b"ERROR: bucket %ld not empty after TreeSolve (row=%d, col=%d)\n\0" as *const u8
as *const ::core::ffi::c_char,
i,
(**(*bkts).bucketbase.offset(i as isize)).row,
(**(*bkts).bucketbase.offset(i as isize)).col,
);
break;
} else {
i += 1;
}
}
CleanUpBoundaryNodes(
source,
&raw mut boundary as *mut boundaryT,
mag,
nodes_0,
ground,
nrow,
ncol,
ngroundarcs,
nodesupp,
);
if !(*(&raw mut boundary as *mut boundaryT))
.neighborlist
.is_null()
{
free((*(&raw mut boundary as *mut boundaryT)).neighborlist as *mut ::core::ffi::c_void);
}
if !(*(&raw mut boundary as *mut boundaryT))
.boundarylist
.is_null()
{
free((*(&raw mut boundary as *mut boundaryT)).boundarylist as *mut ::core::ffi::c_void);
}
fprintf(
sp3,
b"\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08Treesize: %-10ld Pivots: %-11ld Improvements: %-11ld\n\0"
as *const u8 as *const ::core::ffi::c_char,
treesize,
ipivots,
inondegen,
);
fflush(sp3);
*candidatelistptr = candidatelist;
*candidatebagptr = candidatebag;
*candidatelistsizeptr = candidatelistsize;
*candidatebagsizeptr = candidatebagsize;
free(apexlist as *mut ::core::ffi::c_void);
return inondegen;
}
unsafe extern "C" fn AddNewNode(
mut from: *mut nodeT,
mut to: *mut nodeT,
mut arcdir: ::core::ffi::c_long,
mut bkts: *mut bucketT,
mut nflow: ::core::ffi::c_long,
mut incrcosts: *mut *mut incrcostT,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut params: *mut paramT,
) {
let mut newoutcost: ::core::ffi::c_long = 0;
newoutcost = ((*from).outcost
+ GetCost(incrcosts, arcrow, arccol, arcdir) as ::core::ffi::c_int)
as ::core::ffi::c_long;
if newoutcost < (*to).outcost as ::core::ffi::c_long || (*to).pred == from {
if (*to).group == INBUCKET {
if ((*to).outcost as ::core::ffi::c_long) < (*bkts).maxind {
if (*to).outcost as ::core::ffi::c_long > (*bkts).minind {
BucketRemove(to, (*to).outcost as ::core::ffi::c_long, bkts);
} else {
BucketRemove(to, (*bkts).minind, bkts);
}
} else {
BucketRemove(to, (*bkts).maxind, bkts);
}
}
(*to).outcost = newoutcost as ::core::ffi::c_int;
(*to).pred = from as *mut nodeST;
if newoutcost < (*bkts).maxind {
if newoutcost > (*bkts).minind {
BucketInsert(to, newoutcost, bkts);
if newoutcost < (*bkts).curr {
(*bkts).curr = newoutcost;
}
} else {
BucketInsert(to, (*bkts).minind, bkts);
(*bkts).curr = (*bkts).minind;
}
} else {
BucketInsert(to, (*bkts).maxind, bkts);
}
(*to).group = INBUCKET;
}
}
unsafe extern "C" fn CheckArcReducedCost(
mut from: *mut nodeT,
mut to: *mut nodeT,
mut apex: *mut nodeT,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut arcdir: ::core::ffi::c_long,
mut candidatebagptr: *mut *mut candidateT,
mut candidatebagnextptr: *mut ::core::ffi::c_long,
mut candidatebagsizeptr: *mut ::core::ffi::c_long,
mut incrcosts: *mut *mut incrcostT,
mut iscandidate: *mut *mut ::core::ffi::c_schar,
mut params: *mut paramT,
) {
let mut apexcost: ::core::ffi::c_long = 0;
let mut fwdarcdist: ::core::ffi::c_long = 0;
let mut revarcdist: ::core::ffi::c_long = 0;
let mut violation: ::core::ffi::c_long = 0;
let mut temp: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
if *(*iscandidate.offset(arcrow as isize)).offset(arccol as isize) != 0 {
return;
}
apexcost = ((*apex).outcost + (*apex).incost) as ::core::ffi::c_long;
fwdarcdist = GetCost(incrcosts, arcrow, arccol, arcdir) as ::core::ffi::c_long;
violation =
fwdarcdist + (*from).outcost as ::core::ffi::c_long + (*to).incost as ::core::ffi::c_long
- apexcost;
if violation < 0 as ::core::ffi::c_long {
arcdir *= 2 as ::core::ffi::c_long;
} else {
revarcdist = GetCost(incrcosts, arcrow, arccol, -arcdir) as ::core::ffi::c_long;
violation = revarcdist
+ (*to).outcost as ::core::ffi::c_long
+ (*from).incost as ::core::ffi::c_long
- apexcost;
if violation < 0 as ::core::ffi::c_long {
arcdir *= -(2 as ::core::ffi::c_int) as ::core::ffi::c_long;
temp = from;
from = to;
to = temp;
} else {
violation = fwdarcdist + (*from).outcost as ::core::ffi::c_long
- (*to).outcost as ::core::ffi::c_long;
if violation >= 0 as ::core::ffi::c_long {
violation = revarcdist + (*to).outcost as ::core::ffi::c_long
- (*from).outcost as ::core::ffi::c_long;
if violation < 0 as ::core::ffi::c_long {
arcdir = -arcdir;
temp = from;
from = to;
to = temp;
}
}
}
}
if violation < 0 as ::core::ffi::c_long {
if *candidatebagnextptr >= *candidatebagsizeptr {
*candidatebagsizeptr += CANDIDATEBAGSTEP as ::core::ffi::c_long;
*candidatebagptr = ReAlloc(
*candidatebagptr as *mut ::core::ffi::c_void,
(*candidatebagsizeptr as size_t)
.wrapping_mul(::core::mem::size_of::<candidateT>() as size_t),
) as *mut candidateT;
}
(*(*candidatebagptr).offset(*candidatebagnextptr as isize)).violation = violation;
let ref mut fresh57 = (*(*candidatebagptr).offset(*candidatebagnextptr as isize)).from;
*fresh57 = from;
let ref mut fresh58 = (*(*candidatebagptr).offset(*candidatebagnextptr as isize)).to;
*fresh58 = to;
(*(*candidatebagptr).offset(*candidatebagnextptr as isize)).arcrow =
arcrow as ::core::ffi::c_int;
(*(*candidatebagptr).offset(*candidatebagnextptr as isize)).arccol =
arccol as ::core::ffi::c_int;
(*(*candidatebagptr).offset(*candidatebagnextptr as isize)).arcdir =
arcdir as ::core::ffi::c_schar;
*candidatebagnextptr += 1;
*(*iscandidate.offset(arcrow as isize)).offset(arccol as isize) =
TRUE as ::core::ffi::c_schar;
}
}
unsafe extern "C" fn InitBoundary(
mut source: *mut nodeT,
mut nodes_0: *mut *mut nodeT,
mut boundary: *mut boundaryT,
mut nodesupp: *mut *mut nodesuppT,
mut mag: *mut *mut ::core::ffi::c_float,
mut ground: *mut nodeT,
mut ngroundarcs: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut params: *mut paramT,
mut nconnectedptr: *mut ::core::ffi::c_long,
) -> *mut nodeT {
let mut iseligible: ::core::ffi::c_int = 0;
let mut isinteriornode: ::core::ffi::c_int = 0;
let mut k: ::core::ffi::c_long = 0;
let mut nlist: ::core::ffi::c_long = 0;
let mut ninteriorneighbor: ::core::ffi::c_long = 0;
let mut nlistmem: ::core::ffi::c_long = 0;
let mut nboundarymem: ::core::ffi::c_long = 0;
let mut nneighbormem: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut upperarcnum: ::core::ffi::c_long = 0;
let mut neighborarcnum: ::core::ffi::c_long = 0;
let mut neighborupperarcnum: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcdir: ::core::ffi::c_long = 0;
let mut nconnected: ::core::ffi::c_long = 0;
let mut nodelist: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
let mut boundarylist: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
let mut from: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut end: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut neighborlist: *mut neighborT = ::core::ptr::null_mut::<neighborT>();
(*(&raw mut (*boundary).node as *mut nodeT)).row = BOUNDARYROW;
(*(&raw mut (*boundary).node as *mut nodeT)).col = BOUNDARYCOL;
let ref mut fresh60 = (*(&raw mut (*boundary).node as *mut nodeT)).next;
*fresh60 = ::core::ptr::null_mut::<nodeST>();
let ref mut fresh61 = (*(&raw mut (*boundary).node as *mut nodeT)).prev;
*fresh61 = ::core::ptr::null_mut::<nodeST>();
let ref mut fresh62 = (*(&raw mut (*boundary).node as *mut nodeT)).pred;
*fresh62 = ::core::ptr::null_mut::<nodeST>();
(*(&raw mut (*boundary).node as *mut nodeT)).level = 0 as ::core::ffi::c_uint;
(*(&raw mut (*boundary).node as *mut nodeT)).group = 0 as ::core::ffi::c_int;
(*(&raw mut (*boundary).node as *mut nodeT)).incost = VERYFAR;
(*(&raw mut (*boundary).node as *mut nodeT)).outcost = VERYFAR;
(*boundary).neighborlist = ::core::ptr::null_mut::<neighborT>();
(*boundary).boundarylist = ::core::ptr::null_mut::<*mut nodeT>();
(*boundary).nneighbor = 0 as ::core::ffi::c_long;
(*boundary).nboundary = 0 as ::core::ffi::c_long;
if !nodesupp.is_null() {
return source;
}
if mag.is_null() {
return source;
}
nconnected = ScanRegion(
source,
nodes_0,
mag,
ground,
ngroundarcs,
nrow,
ncol,
MASKED,
);
if source == ground {
return source;
}
if IsRegionEdgeNode(
mag,
(*source).row as ::core::ffi::c_long,
(*source).col as ::core::ffi::c_long,
nrow,
ncol,
) == 0
{
fprintf(
sp0,
b"WARNING: Non edge node as source in InitBoundary()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
nlistmem = NLISTMEMINCR as ::core::ffi::c_long;
nodelist =
MAlloc((nlistmem as size_t).wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t))
as *mut *mut nodeT;
let ref mut fresh63 = *nodelist.offset(0 as ::core::ffi::c_int as isize);
*fresh63 = source;
nlist = 1 as ::core::ffi::c_long;
(*source).next = ::core::ptr::null_mut::<nodeST>();
(*source).group = BOUNDARYCANDIDATE;
from = source;
end = source;
loop {
arcnum = GetArcNumLims(
(*from).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
::core::ptr::null_mut::<boundaryT>(),
);
while arcnum < upperarcnum {
arcnum += 1;
to = NeighborNode.expect("non-null function pointer")(
from,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
::core::ptr::null_mut::<boundaryT>(),
nodesupp,
);
if IsRegionEdgeArc(mag, arcrow, arccol, nrow, ncol) != 0
&& (*to).group != BOUNDARYCANDIDATE
{
if nlist == nlistmem {
nlistmem += NLISTMEMINCR as ::core::ffi::c_long;
nodelist = ReAlloc(
nodelist as *mut ::core::ffi::c_void,
(nlistmem as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
}
let fresh64 = nlist;
nlist = nlist + 1;
let ref mut fresh65 = *nodelist.offset(fresh64 as isize);
*fresh65 = to;
(*to).group = BOUNDARYCANDIDATE;
(*end).next = to as *mut nodeST;
(*to).next = ::core::ptr::null_mut::<nodeST>();
end = to;
}
}
if (*from).next.is_null() {
break;
}
from = (*from).next as *mut nodeT;
}
nboundarymem = NLISTMEMINCR as ::core::ffi::c_long;
boundarylist = MAlloc(
(nboundarymem as size_t).wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
k = 0 as ::core::ffi::c_long;
while k < nlist {
if (**nodelist.offset(k as isize)).row != GROUNDROW {
iseligible = TRUE;
ninteriorneighbor = 0 as ::core::ffi::c_long;
arcnum = GetArcNumLims(
(**nodelist.offset(k as isize)).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
::core::ptr::null_mut::<boundaryT>(),
);
while arcnum < upperarcnum {
arcnum += 1;
from = NeighborNode.expect("non-null function pointer")(
*nodelist.offset(k as isize),
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
::core::ptr::null_mut::<boundaryT>(),
nodesupp,
);
isinteriornode = (IsRegionInteriorArc(mag, arcrow, arccol, nrow, ncol) != 0
&& (*from).group != MASKED
&& (*from).level != BOUNDARYLEVEL as ::core::ffi::c_uint)
as ::core::ffi::c_int;
if isinteriornode != 0 {
ninteriorneighbor += 1;
}
if isinteriornode != 0
|| (*from).group == BOUNDARYCANDIDATE
&& (*from).level != BOUNDARYLEVEL as ::core::ffi::c_uint
{
neighborarcnum = GetArcNumLims(
(*from).row as ::core::ffi::c_long,
&raw mut neighborupperarcnum,
ngroundarcs,
::core::ptr::null_mut::<boundaryT>(),
);
while neighborarcnum < neighborupperarcnum {
neighborarcnum += 1;
to = NeighborNode.expect("non-null function pointer")(
from,
neighborarcnum,
&raw mut neighborupperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
::core::ptr::null_mut::<boundaryT>(),
nodesupp,
);
if !((*to).level == BOUNDARYLEVEL as ::core::ffi::c_uint) {
continue;
}
iseligible = FALSE;
break;
}
}
if iseligible == 0 {
break;
}
}
if iseligible != 0 && ninteriorneighbor > 0 as ::core::ffi::c_long {
(**nodelist.offset(k as isize)).level = BOUNDARYLEVEL as ::core::ffi::c_uint;
(*boundary).nboundary += 1;
if (*boundary).nboundary > nboundarymem {
nboundarymem += NLISTMEMINCR as ::core::ffi::c_long;
boundarylist = ReAlloc(
boundarylist as *mut ::core::ffi::c_void,
(nboundarymem as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
}
let ref mut fresh66 = *boundarylist
.offset(((*boundary).nboundary - 1 as ::core::ffi::c_long) as isize);
*fresh66 = *nodelist.offset(k as isize);
}
}
k += 1;
}
k = 0 as ::core::ffi::c_long;
while k < nlist {
(**nodelist.offset(k as isize)).group = 0 as ::core::ffi::c_int;
let ref mut fresh67 = (**nodelist.offset(k as isize)).next;
*fresh67 = ::core::ptr::null_mut::<nodeST>();
k += 1;
}
free(nodelist as *mut ::core::ffi::c_void);
if (*boundary).nboundary < MINBOUNDARYSIZE as ::core::ffi::c_long {
k = 0 as ::core::ffi::c_long;
while k < (*boundary).nboundary {
(**boundarylist.offset(k as isize)).level = 0 as ::core::ffi::c_uint;
(**boundarylist.offset(k as isize)).group = 0 as ::core::ffi::c_int;
k += 1;
}
free(boundarylist as *mut ::core::ffi::c_void);
(*(&raw mut (*boundary).node as *mut nodeT)).row = BOUNDARYROW;
(*(&raw mut (*boundary).node as *mut nodeT)).col = BOUNDARYCOL;
let ref mut fresh68 = (*(&raw mut (*boundary).node as *mut nodeT)).next;
*fresh68 = ::core::ptr::null_mut::<nodeST>();
let ref mut fresh69 = (*(&raw mut (*boundary).node as *mut nodeT)).prev;
*fresh69 = ::core::ptr::null_mut::<nodeST>();
let ref mut fresh70 = (*(&raw mut (*boundary).node as *mut nodeT)).pred;
*fresh70 = ::core::ptr::null_mut::<nodeST>();
(*(&raw mut (*boundary).node as *mut nodeT)).level = 0 as ::core::ffi::c_uint;
(*(&raw mut (*boundary).node as *mut nodeT)).group = 0 as ::core::ffi::c_int;
(*(&raw mut (*boundary).node as *mut nodeT)).incost = VERYFAR;
(*(&raw mut (*boundary).node as *mut nodeT)).outcost = VERYFAR;
(*boundary).neighborlist = ::core::ptr::null_mut::<neighborT>();
(*boundary).boundarylist = ::core::ptr::null_mut::<*mut nodeT>();
(*boundary).nneighbor = 0 as ::core::ffi::c_long;
(*boundary).nboundary = 0 as ::core::ffi::c_long;
return source;
}
nneighbormem = NLISTMEMINCR as ::core::ffi::c_long;
neighborlist = MAlloc(
(nneighbormem as size_t).wrapping_mul(::core::mem::size_of::<neighborT>() as size_t),
) as *mut neighborT;
k = 0 as ::core::ffi::c_long;
while k < (*boundary).nboundary {
arcnum = GetArcNumLims(
(**boundarylist.offset(k as isize)).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
::core::ptr::null_mut::<boundaryT>(),
);
while arcnum < upperarcnum {
arcnum += 1;
to = NeighborNode.expect("non-null function pointer")(
*boundarylist.offset(k as isize),
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
::core::ptr::null_mut::<boundaryT>(),
nodesupp,
);
if (*to).group != MASKED && (*to).level != BOUNDARYLEVEL as ::core::ffi::c_uint {
(*boundary).nneighbor += 1;
if (*boundary).nneighbor > nneighbormem {
nneighbormem += NLISTMEMINCR as ::core::ffi::c_long;
neighborlist = ReAlloc(
neighborlist as *mut ::core::ffi::c_void,
(nneighbormem as size_t)
.wrapping_mul(::core::mem::size_of::<neighborT>() as size_t),
) as *mut neighborT;
}
let ref mut fresh71 = (*neighborlist
.offset(((*boundary).nneighbor - 1 as ::core::ffi::c_long) as isize))
.neighbor;
*fresh71 = to;
(*neighborlist
.offset(((*boundary).nneighbor - 1 as ::core::ffi::c_long) as isize))
.arcrow = arcrow as ::core::ffi::c_int;
(*neighborlist
.offset(((*boundary).nneighbor - 1 as ::core::ffi::c_long) as isize))
.arccol = arccol as ::core::ffi::c_int;
(*neighborlist
.offset(((*boundary).nneighbor - 1 as ::core::ffi::c_long) as isize))
.arcdir = arcdir as ::core::ffi::c_int;
}
}
k += 1;
}
k = 0 as ::core::ffi::c_long;
while k < (*boundary).nboundary {
(**boundarylist.offset(k as isize)).group = BOUNDARYPTR;
(**boundarylist.offset(k as isize)).level = 0 as ::core::ffi::c_uint;
k += 1;
}
(*boundary).neighborlist = ReAlloc(
neighborlist as *mut ::core::ffi::c_void,
((*boundary).nneighbor as size_t)
.wrapping_mul(::core::mem::size_of::<neighborT>() as size_t),
) as *mut neighborT;
(*boundary).boundarylist = ReAlloc(
boundarylist as *mut ::core::ffi::c_void,
((*boundary).nboundary as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
nconnected = CheckBoundary(
nodes_0,
mag,
ground,
ngroundarcs,
boundary,
nrow,
ncol,
params,
&raw mut (*boundary).node as *mut nodeT,
);
if !nconnectedptr.is_null() {
if nconnected + (*boundary).nboundary - 1 as ::core::ffi::c_long != *nconnectedptr {
fprintf(
sp1,
b"WARNING: Changed number of connected nodes in InitBoundary()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
*nconnectedptr = nconnected;
}
return &raw mut (*boundary).node as *mut nodeT;
}
unsafe extern "C" fn CheckBoundary(
mut nodes_0: *mut *mut nodeT,
mut mag: *mut *mut ::core::ffi::c_float,
mut ground: *mut nodeT,
mut ngroundarcs: ::core::ffi::c_long,
mut boundary: *mut boundaryT,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut params: *mut paramT,
mut start: *mut nodeT,
) -> ::core::ffi::c_long {
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcdir: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut upperarcnum: ::core::ffi::c_long = 0;
let mut nontree: ::core::ffi::c_long = 0;
let mut nboundaryarc: ::core::ffi::c_long = 0;
let mut nboundarynode: ::core::ffi::c_long = 0;
let mut nconnected: ::core::ffi::c_long = 0;
let mut node1: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut node2: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut end: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut nodesupp: *mut *mut nodesuppT = ::core::ptr::null_mut::<*mut nodesuppT>();
if (*start).group == MASKED {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR: ineligible starting node in CheckBoundary()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
nconnected = 0 as ::core::ffi::c_long;
end = start;
nodesupp = ::core::ptr::null_mut::<*mut nodesuppT>();
node1 = start;
(*node1).group = INBUCKET;
while !node1.is_null() {
arcnum = GetArcNumLims(
(*node1).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
boundary,
);
while arcnum < upperarcnum {
arcnum += 1;
node2 = NeighborNode.expect("non-null function pointer")(
node1,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
boundary,
nodesupp,
);
if (*node2).group != MASKED && (*node2).group != ONTREE && (*node2).group != INBUCKET {
(*node2).group = INBUCKET;
(*end).next = node2 as *mut nodeST;
(*node2).next = ::core::ptr::null_mut::<nodeST>();
end = node2;
}
}
(*node1).group = ONTREE;
nconnected += 1;
node1 = (*node1).next as *mut nodeT;
}
node1 = start;
nontree = 0 as ::core::ffi::c_long;
nboundaryarc = 0 as ::core::ffi::c_long;
nboundarynode = 0 as ::core::ffi::c_long;
while !node1.is_null() {
arcnum = GetArcNumLims(
(*node1).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
boundary,
);
while arcnum < upperarcnum {
arcnum += 1;
node2 = NeighborNode.expect("non-null function pointer")(
node1,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
boundary,
nodesupp,
);
if (*node2).row == BOUNDARYROW {
nboundaryarc += 1;
}
}
if (*node1).row == BOUNDARYROW {
nboundarynode += 1;
}
nontree += 1;
if (*node1).group == ONTREE {
(*node1).group = 0 as ::core::ffi::c_int;
}
node1 = (*node1).next as *mut nodeT;
}
if nontree != nconnected {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR: inconsistent num connected nodes in CheckBoundary()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if nboundaryarc != (*boundary).nneighbor {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR: inconsistent num neighbor nodes in CheckBoundary()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if nboundarynode != 1 as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR: number of boundary nodes is not 1 in CheckBoundary()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return nconnected;
}
unsafe extern "C" fn IsRegionEdgeArc(
mut mag: *mut *mut ::core::ffi::c_float,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row1: ::core::ffi::c_long = 0;
let mut col1: ::core::ffi::c_long = 0;
let mut row2: ::core::ffi::c_long = 0;
let mut col2: ::core::ffi::c_long = 0;
let mut nzeromag: ::core::ffi::c_long = 0;
if mag.is_null() {
return 0 as ::core::ffi::c_int;
}
if arcrow < nrow - 1 as ::core::ffi::c_long {
row1 = arcrow;
row2 = row1 + 1 as ::core::ffi::c_long;
col1 = arccol;
col2 = col1;
} else {
row1 = arcrow - (nrow - 1 as ::core::ffi::c_long);
row2 = row1;
col1 = arccol;
col2 = col1 + 1 as ::core::ffi::c_long;
}
nzeromag = 0 as ::core::ffi::c_long;
if *(*mag.offset(row1 as isize)).offset(col1 as isize)
== 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
nzeromag += 1;
}
if *(*mag.offset(row2 as isize)).offset(col2 as isize)
== 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
nzeromag += 1;
}
if nzeromag == 1 as ::core::ffi::c_long {
return 1 as ::core::ffi::c_int;
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn IsRegionInteriorArc(
mut mag: *mut *mut ::core::ffi::c_float,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row1: ::core::ffi::c_long = 0;
let mut col1: ::core::ffi::c_long = 0;
let mut row2: ::core::ffi::c_long = 0;
let mut col2: ::core::ffi::c_long = 0;
if mag.is_null() {
return 1 as ::core::ffi::c_int;
}
if arcrow < nrow - 1 as ::core::ffi::c_long {
row1 = arcrow;
row2 = row1 + 1 as ::core::ffi::c_long;
col1 = arccol;
col2 = col1;
} else {
row1 = arcrow - (nrow - 1 as ::core::ffi::c_long);
row2 = row1;
col1 = arccol;
col2 = col1 + 1 as ::core::ffi::c_long;
}
if *(*mag.offset(row1 as isize)).offset(col1 as isize)
> 0 as ::core::ffi::c_int as ::core::ffi::c_float
&& *(*mag.offset(row2 as isize)).offset(col2 as isize)
> 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
return 1 as ::core::ffi::c_int;
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn IsRegionArc(
mut mag: *mut *mut ::core::ffi::c_float,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row1: ::core::ffi::c_long = 0;
let mut col1: ::core::ffi::c_long = 0;
let mut row2: ::core::ffi::c_long = 0;
let mut col2: ::core::ffi::c_long = 0;
if mag.is_null() {
return 1 as ::core::ffi::c_int;
}
if arcrow < nrow - 1 as ::core::ffi::c_long {
row1 = arcrow;
row2 = row1 + 1 as ::core::ffi::c_long;
col1 = arccol;
col2 = col1;
} else {
row1 = arcrow - (nrow - 1 as ::core::ffi::c_long);
row2 = row1;
col1 = arccol;
col2 = col1 + 1 as ::core::ffi::c_long;
}
if *(*mag.offset(row1 as isize)).offset(col1 as isize)
> 0 as ::core::ffi::c_int as ::core::ffi::c_float
|| *(*mag.offset(row2 as isize)).offset(col2 as isize)
> 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
return 1 as ::core::ffi::c_int;
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn IsRegionEdgeNode(
mut mag: *mut *mut ::core::ffi::c_float,
mut row: ::core::ffi::c_long,
mut col: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut onezeromag: ::core::ffi::c_int = 0;
let mut onenonzeromag: ::core::ffi::c_int = 0;
if mag.is_null() {
return 0 as ::core::ffi::c_int;
}
if row == GROUNDROW as ::core::ffi::c_long {
return 0 as ::core::ffi::c_int;
}
onezeromag = FALSE;
onenonzeromag = FALSE;
if *(*mag.offset(row as isize)).offset(col as isize)
== 0 as ::core::ffi::c_int as ::core::ffi::c_float
|| *(*mag.offset((row + 1 as ::core::ffi::c_long) as isize)).offset(col as isize)
== 0 as ::core::ffi::c_int as ::core::ffi::c_float
|| *(*mag.offset(row as isize)).offset((col + 1 as ::core::ffi::c_long) as isize)
== 0 as ::core::ffi::c_int as ::core::ffi::c_float
|| *(*mag.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
== 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
onezeromag = TRUE;
}
if *(*mag.offset(row as isize)).offset(col as isize)
!= 0 as ::core::ffi::c_int as ::core::ffi::c_float
|| *(*mag.offset((row + 1 as ::core::ffi::c_long) as isize)).offset(col as isize)
!= 0 as ::core::ffi::c_int as ::core::ffi::c_float
|| *(*mag.offset(row as isize)).offset((col + 1 as ::core::ffi::c_long) as isize)
!= 0 as ::core::ffi::c_int as ::core::ffi::c_float
|| *(*mag.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
!= 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
onenonzeromag = TRUE;
}
if onezeromag != 0 && onenonzeromag != 0 {
return 1 as ::core::ffi::c_int;
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn CleanUpBoundaryNodes(
mut source: *mut nodeT,
mut boundary: *mut boundaryT,
mut mag: *mut *mut ::core::ffi::c_float,
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut ngroundarcs: ::core::ffi::c_long,
mut nodesupp: *mut *mut nodesuppT,
) -> ::core::ffi::c_int {
let mut nconnected: ::core::ffi::c_long = 0;
let mut start: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
if !nodesupp.is_null() {
return 0 as ::core::ffi::c_int;
}
if (*source).row == BOUNDARYROW {
start = (*(*boundary)
.neighborlist
.offset(0 as ::core::ffi::c_int as isize))
.neighbor;
} else {
start = source;
}
nconnected = ScanRegion(
start,
nodes_0,
mag,
ground,
ngroundarcs,
nrow,
ncol,
0 as ::core::ffi::c_int,
);
return nconnected as ::core::ffi::c_int;
}
unsafe extern "C" fn DischargeBoundary(
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
mut boundary: *mut boundaryT,
mut nodesupp: *mut *mut nodesuppT,
mut flows: *mut *mut ::core::ffi::c_short,
mut iscandidate: *mut *mut ::core::ffi::c_schar,
mut mag: *mut *mut ::core::ffi::c_float,
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut ngroundarcs: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut nedgenode: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut fromrow: ::core::ffi::c_long = 0;
let mut fromcol: ::core::ffi::c_long = 0;
let mut todir: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut upperarcnum: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcdir: ::core::ffi::c_long = 0;
let mut narccol: ::core::ffi::c_long = 0;
let mut surplus: ::core::ffi::c_long = 0;
let mut residue: ::core::ffi::c_long = 0;
let mut excess: ::core::ffi::c_long = 0;
let mut from: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut nextnode: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
if !nodesupp.is_null()
|| boundary.is_null()
|| (*boundary).nboundary == 0 as ::core::ffi::c_long
|| (*boundary).nneighbor == 0 as ::core::ffi::c_long
{
return 0 as ::core::ffi::c_int;
}
nextnode = *(*boundary)
.boundarylist
.offset(0 as ::core::ffi::c_int as isize);
row = (*nextnode).row as ::core::ffi::c_long;
col = (*nextnode).col as ::core::ffi::c_long;
if IsRegionEdgeNode(mag, row, col, nrow, ncol) == 0 {
fprintf(
sp0,
b"ERROR: DischargeBoundary() start node %ld, %ld not on edge\n\0" as *const u8
as *const ::core::ffi::c_char,
row,
col,
);
exit(ABNORMAL_EXIT);
}
row = 0 as ::core::ffi::c_long;
col = 0 as ::core::ffi::c_long;
todir = 0 as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
narccol = ncol;
} else {
narccol = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < narccol {
*(*iscandidate.offset(row as isize)).offset(col as isize) = 0 as ::core::ffi::c_schar;
col += 1;
}
row += 1;
}
nedgenode = 1 as ::core::ffi::c_long;
loop {
from = nextnode;
(*from).outcost = -(1 as ::core::ffi::c_int);
nextnode = ::core::ptr::null_mut::<nodeT>();
arcnum = GetArcNumLims(
(*from).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
::core::ptr::null_mut::<boundaryT>(),
);
while arcnum < upperarcnum {
arcnum += 1;
to = NeighborNode.expect("non-null function pointer")(
from,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
::core::ptr::null_mut::<boundaryT>(),
nodesupp,
);
if !(IsRegionEdgeArc(mag, arcrow, arccol, nrow, ncol) != 0
&& (*(*iscandidate.offset(arcrow as isize)).offset(arccol as isize)
as ::core::ffi::c_int
== -(1 as ::core::ffi::c_int)
|| *(*iscandidate.offset(arcrow as isize)).offset(arccol as isize)
as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
&& (*to).outcost != -(1 as ::core::ffi::c_int)))
{
continue;
}
nextnode = to;
row = arcrow;
col = arccol;
todir = arcdir;
if *(*iscandidate.offset(arcrow as isize)).offset(arccol as isize) == 0 {
break;
}
}
if nextnode.is_null() {
break;
}
let ref mut fresh55 = *(*iscandidate.offset(row as isize)).offset(col as isize);
*fresh55 -= 1;
if *fresh55 as ::core::ffi::c_int == -(2 as ::core::ffi::c_int) {
fromrow = (*from).row as ::core::ffi::c_long;
fromcol = (*from).col as ::core::ffi::c_long;
surplus = (*(*flows.offset(fromrow as isize)).offset(fromcol as isize)
as ::core::ffi::c_int
- *(*flows.offset(fromrow as isize))
.offset((fromcol + 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
+ *(*flows.offset((fromrow + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(fromcol as isize) as ::core::ffi::c_int
- *(*flows.offset(
(fromrow + 1 as ::core::ffi::c_long + nrow - 1 as ::core::ffi::c_long) as isize,
))
.offset(fromcol as isize) as ::core::ffi::c_int)
as ::core::ffi::c_long;
residue = NodeResidue(wrappedphase, fromrow, fromcol) as ::core::ffi::c_long;
excess = surplus + residue;
let ref mut fresh56 = *(*flows.offset(row as isize)).offset(col as isize);
*fresh56 = (*fresh56 as ::core::ffi::c_long + todir * excess) as ::core::ffi::c_short;
nedgenode += 1;
}
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if row < nrow - 1 as ::core::ffi::c_long {
if *(*iscandidate.offset(row as isize)).offset(col as isize) != 0 {
if col > 0 as ::core::ffi::c_long {
(*(*nodes_0.offset(row as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize))
.outcost = 0 as ::core::ffi::c_int;
}
if col < ncol - 1 as ::core::ffi::c_long {
(*(*nodes_0.offset(row as isize)).offset(col as isize)).outcost =
0 as ::core::ffi::c_int;
}
}
*(*iscandidate.offset(row as isize)).offset(col as isize) =
FALSE as ::core::ffi::c_schar;
}
if col < ncol - 1 as ::core::ffi::c_long {
if *(*iscandidate.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)
!= 0
{
if row > 0 as ::core::ffi::c_long {
(*(*nodes_0.offset((row - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.outcost = 0 as ::core::ffi::c_int;
}
if row < nrow - 1 as ::core::ffi::c_long {
(*(*nodes_0.offset(row as isize)).offset(col as isize)).outcost =
0 as ::core::ffi::c_int;
}
}
*(*iscandidate.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize) = FALSE as ::core::ffi::c_schar;
}
col += 1;
}
row += 1;
}
*(*iscandidate.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) = TRUE as ::core::ffi::c_schar;
*(*iscandidate.offset((2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) = TRUE as ::core::ffi::c_schar;
*(*iscandidate.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) = TRUE as ::core::ffi::c_schar;
*(*iscandidate.offset((2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) = TRUE as ::core::ffi::c_schar;
return nedgenode as ::core::ffi::c_int;
}
unsafe extern "C" fn InitTree(
mut source: *mut nodeT,
mut nodes_0: *mut *mut nodeT,
mut boundary: *mut boundaryT,
mut nodesupp: *mut *mut nodesuppT,
mut ground: *mut nodeT,
mut ngroundarcs: ::core::ffi::c_long,
mut bkts: *mut bucketT,
mut nflow: ::core::ffi::c_long,
mut incrcosts: *mut *mut incrcostT,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut arcnum: ::core::ffi::c_long = 0;
let mut upperarcnum: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcdir: ::core::ffi::c_long = 0;
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
(*source).group = 1 as ::core::ffi::c_int;
(*source).outcost = 0 as ::core::ffi::c_int;
(*source).incost = 0 as ::core::ffi::c_int;
(*source).pred = ::core::ptr::null_mut::<nodeST>();
(*source).prev = source as *mut nodeST;
(*source).next = source as *mut nodeST;
(*source).level = 0 as ::core::ffi::c_uint;
arcnum = GetArcNumLims(
(*source).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
boundary,
);
while arcnum < upperarcnum {
arcnum += 1;
to = NeighborNode.expect("non-null function pointer")(
source,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
boundary,
nodesupp,
);
if (*to).group != PRUNED && (*to).group != MASKED {
AddNewNode(
source, to, arcdir, bkts, nflow, incrcosts, arcrow, arccol, params,
);
}
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn FindApex(mut from: *mut nodeT, mut to: *mut nodeT) -> *mut nodeT {
if (*from).level > (*to).level {
while (*from).level != (*to).level {
from = (*from).pred as *mut nodeT;
}
} else {
while (*from).level != (*to).level {
to = (*to).pred as *mut nodeT;
}
}
while from != to {
from = (*from).pred as *mut nodeT;
to = (*to).pred as *mut nodeT;
}
return from;
}
unsafe extern "C" fn CandidateCompare(
mut c1: *const ::core::ffi::c_void,
mut c2: *const ::core::ffi::c_void,
) -> ::core::ffi::c_int {
if labs((*(c1 as *mut candidateT)).arcdir as ::core::ffi::c_long) > 1 as ::core::ffi::c_long {
if labs((*(c2 as *mut candidateT)).arcdir as ::core::ffi::c_long) < 2 as ::core::ffi::c_long
{
return -(1 as ::core::ffi::c_int);
}
} else if labs((*(c2 as *mut candidateT)).arcdir as ::core::ffi::c_long)
> 1 as ::core::ffi::c_long
{
return 1 as ::core::ffi::c_int;
}
return ((*(c1 as *mut candidateT)).violation - (*(c2 as *mut candidateT)).violation)
as ::core::ffi::c_int;
}
#[inline]
unsafe extern "C" fn GetArcNumLims(
mut fromrow: ::core::ffi::c_long,
mut upperarcnumptr: *mut ::core::ffi::c_long,
mut ngroundarcs: ::core::ffi::c_long,
mut boundary: *mut boundaryT,
) -> ::core::ffi::c_long {
let mut arcnum: ::core::ffi::c_long = 0;
if fromrow < 0 as ::core::ffi::c_long {
arcnum = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
if fromrow == GROUNDROW as ::core::ffi::c_long {
*upperarcnumptr = ngroundarcs - 1 as ::core::ffi::c_long;
} else {
*upperarcnumptr = (*boundary).nneighbor - 1 as ::core::ffi::c_long;
}
} else {
arcnum = -(5 as ::core::ffi::c_int) as ::core::ffi::c_long;
*upperarcnumptr = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
}
return arcnum;
}
unsafe extern "C" fn NeighborNodeGrid(
mut node1: *mut nodeT,
mut arcnum: ::core::ffi::c_long,
mut upperarcnumptr: *mut ::core::ffi::c_long,
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
mut arcrowptr: *mut ::core::ffi::c_long,
mut arccolptr: *mut ::core::ffi::c_long,
mut arcdirptr: *mut ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut boundary: *mut boundaryT,
mut nodesupp: *mut *mut nodesuppT,
) -> *mut nodeT {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut neighbor: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
row = (*node1).row as ::core::ffi::c_long;
col = (*node1).col as ::core::ffi::c_long;
if row == BOUNDARYROW as ::core::ffi::c_long {
neighbor = (*(*boundary).neighborlist.offset(arcnum as isize)).neighbor;
*arcrowptr =
(*(*boundary).neighborlist.offset(arcnum as isize)).arcrow as ::core::ffi::c_long;
*arccolptr =
(*(*boundary).neighborlist.offset(arcnum as isize)).arccol as ::core::ffi::c_long;
*arcdirptr =
(*(*boundary).neighborlist.offset(arcnum as isize)).arcdir as ::core::ffi::c_long;
} else {
match arcnum {
-4 => {
*arcrowptr = row;
*arccolptr = col + 1 as ::core::ffi::c_long;
*arcdirptr = 1 as ::core::ffi::c_long;
if col == ncol - 2 as ::core::ffi::c_long {
neighbor = ground;
} else {
neighbor = (*nodes_0.offset(row as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
as *mut nodeT;
}
}
-3 => {
*arcrowptr = nrow + row;
*arccolptr = col;
*arcdirptr = 1 as ::core::ffi::c_long;
if row == nrow - 2 as ::core::ffi::c_long {
neighbor = ground;
} else {
neighbor = (*nodes_0.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize) as *mut nodeT;
}
}
-2 => {
*arcrowptr = row;
*arccolptr = col;
*arcdirptr = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
if col == 0 as ::core::ffi::c_long {
neighbor = ground;
} else {
neighbor = (*nodes_0.offset(row as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize)
as *mut nodeT;
}
}
-1 => {
*arcrowptr = nrow - 1 as ::core::ffi::c_long + row;
*arccolptr = col;
*arcdirptr = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
if row == 0 as ::core::ffi::c_long {
neighbor = ground;
} else {
neighbor = (*nodes_0.offset((row - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize) as *mut nodeT;
}
}
_ => {
if arcnum < nrow - 1 as ::core::ffi::c_long {
*arcrowptr = arcnum;
*arccolptr = 0 as ::core::ffi::c_long;
*arcdirptr = 1 as ::core::ffi::c_long;
neighbor = (*nodes_0.offset(*arcrowptr as isize))
.offset(0 as ::core::ffi::c_int as isize)
as *mut nodeT;
} else if arcnum < 2 as ::core::ffi::c_long * (nrow - 1 as ::core::ffi::c_long) {
*arcrowptr = arcnum - (nrow - 1 as ::core::ffi::c_long);
*arccolptr = ncol - 1 as ::core::ffi::c_long;
*arcdirptr = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
neighbor = (*nodes_0.offset(*arcrowptr as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize)
as *mut nodeT;
} else if arcnum
< 2 as ::core::ffi::c_long * (nrow - 1 as ::core::ffi::c_long) + ncol
- 3 as ::core::ffi::c_long
{
*arcrowptr = nrow - 1 as ::core::ffi::c_long;
*arccolptr = arcnum
- 2 as ::core::ffi::c_long * (nrow - 1 as ::core::ffi::c_long)
+ 1 as ::core::ffi::c_long;
*arcdirptr = 1 as ::core::ffi::c_long;
neighbor = (*nodes_0.offset(0 as ::core::ffi::c_int as isize))
.offset(*arccolptr as isize) as *mut nodeT;
} else {
*arcrowptr = 2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long;
*arccolptr = arcnum
- (2 as ::core::ffi::c_long * (nrow - 1 as ::core::ffi::c_long) + ncol
- 3 as ::core::ffi::c_long)
+ 1 as ::core::ffi::c_long;
*arcdirptr = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
neighbor = (*nodes_0.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(*arccolptr as isize) as *mut nodeT;
}
}
}
if (*neighbor).group == BOUNDARYPTR && !boundary.is_null() {
neighbor = &raw mut (*boundary).node as *mut nodeT;
}
}
return neighbor;
}
unsafe extern "C" fn NeighborNodeNonGrid(
mut node1: *mut nodeT,
mut arcnum: ::core::ffi::c_long,
mut upperarcnumptr: *mut ::core::ffi::c_long,
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
mut arcrowptr: *mut ::core::ffi::c_long,
mut arccolptr: *mut ::core::ffi::c_long,
mut arcdirptr: *mut ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut boundary: *mut boundaryT,
mut nodesupp: *mut *mut nodesuppT,
) -> *mut nodeT {
let mut tilenum: ::core::ffi::c_long = 0;
let mut nodenum: ::core::ffi::c_long = 0;
let mut outarc: *mut scndryarcT = ::core::ptr::null_mut::<scndryarcT>();
tilenum = (*node1).row as ::core::ffi::c_long;
nodenum = (*node1).col as ::core::ffi::c_long;
*upperarcnumptr = ((*(*nodesupp.offset(tilenum as isize)).offset(nodenum as isize)).noutarcs
- 5 as ::core::ffi::c_int) as ::core::ffi::c_long;
outarc = *(*(*nodesupp.offset(tilenum as isize)).offset(nodenum as isize))
.outarcs
.offset((arcnum + 4 as ::core::ffi::c_long) as isize);
*arcrowptr = (*outarc).arcrow as ::core::ffi::c_long;
*arccolptr = (*outarc).arccol as ::core::ffi::c_long;
if node1 == (*outarc).from {
*arcdirptr = 1 as ::core::ffi::c_long;
} else {
*arcdirptr = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
}
return *(*(*nodesupp.offset(tilenum as isize)).offset(nodenum as isize))
.neighbornodes
.offset((arcnum + 4 as ::core::ffi::c_long) as isize);
}
unsafe extern "C" fn GetArcGrid(
mut from: *mut nodeT,
mut to: *mut nodeT,
mut arcrow: *mut ::core::ffi::c_long,
mut arccol: *mut ::core::ffi::c_long,
mut arcdir: *mut ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut nodes_0: *mut *mut nodeT,
mut nodesupp: *mut *mut nodesuppT,
) {
let mut fromrow: ::core::ffi::c_long = 0;
let mut fromcol: ::core::ffi::c_long = 0;
let mut torow: ::core::ffi::c_long = 0;
let mut tocol: ::core::ffi::c_long = 0;
fromrow = (*from).row as ::core::ffi::c_long;
fromcol = (*from).col as ::core::ffi::c_long;
torow = (*to).row as ::core::ffi::c_long;
tocol = (*to).col as ::core::ffi::c_long;
if fromcol == tocol - 1 as ::core::ffi::c_long {
*arcrow = fromrow;
*arccol = fromcol + 1 as ::core::ffi::c_long;
*arcdir = 1 as ::core::ffi::c_long;
} else if fromcol == tocol + 1 as ::core::ffi::c_long {
*arcrow = fromrow;
*arccol = fromcol;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
} else if fromrow == torow - 1 as ::core::ffi::c_long {
*arcrow = fromrow + 1 as ::core::ffi::c_long + nrow - 1 as ::core::ffi::c_long;
*arccol = fromcol;
*arcdir = 1 as ::core::ffi::c_long;
} else if fromrow == torow + 1 as ::core::ffi::c_long {
*arcrow = fromrow + nrow - 1 as ::core::ffi::c_long;
*arccol = fromcol;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
} else if fromrow == BOUNDARYROW as ::core::ffi::c_long {
if tocol < ncol - 2 as ::core::ffi::c_long
&& (*(*nodes_0.offset(torow as isize))
.offset((tocol + 1 as ::core::ffi::c_long) as isize))
.group
== BOUNDARYPTR
{
*arcrow = torow;
*arccol = tocol + 1 as ::core::ffi::c_long;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
} else if tocol > 0 as ::core::ffi::c_long
&& (*(*nodes_0.offset(torow as isize))
.offset((tocol - 1 as ::core::ffi::c_long) as isize))
.group
== BOUNDARYPTR
{
*arcrow = torow;
*arccol = tocol;
*arcdir = 1 as ::core::ffi::c_long;
} else if torow < nrow - 2 as ::core::ffi::c_long
&& (*(*nodes_0.offset((torow + 1 as ::core::ffi::c_long) as isize))
.offset(tocol as isize))
.group
== BOUNDARYPTR
{
*arcrow = torow + 1 as ::core::ffi::c_long + nrow - 1 as ::core::ffi::c_long;
*arccol = tocol;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
} else {
*arcrow = torow + nrow - 1 as ::core::ffi::c_long;
*arccol = tocol;
*arcdir = 1 as ::core::ffi::c_long;
}
} else if torow == BOUNDARYROW as ::core::ffi::c_long {
if fromcol < ncol - 2 as ::core::ffi::c_long
&& (*(*nodes_0.offset(fromrow as isize))
.offset((fromcol + 1 as ::core::ffi::c_long) as isize))
.group
== BOUNDARYPTR
{
*arcrow = fromrow;
*arccol = fromcol + 1 as ::core::ffi::c_long;
*arcdir = 1 as ::core::ffi::c_long;
} else if fromcol > 0 as ::core::ffi::c_long
&& (*(*nodes_0.offset(fromrow as isize))
.offset((fromcol - 1 as ::core::ffi::c_long) as isize))
.group
== BOUNDARYPTR
{
*arcrow = fromrow;
*arccol = fromcol;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
} else if fromrow < nrow - 2 as ::core::ffi::c_long
&& (*(*nodes_0.offset((fromrow + 1 as ::core::ffi::c_long) as isize))
.offset(fromcol as isize))
.group
== BOUNDARYPTR
{
*arcrow = fromrow + 1 as ::core::ffi::c_long + nrow - 1 as ::core::ffi::c_long;
*arccol = fromcol;
*arcdir = 1 as ::core::ffi::c_long;
} else {
*arcrow = fromrow + nrow - 1 as ::core::ffi::c_long;
*arccol = fromcol;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
}
} else if fromcol == 0 as ::core::ffi::c_long {
*arcrow = fromrow;
*arccol = 0 as ::core::ffi::c_long;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
} else if fromcol == ncol - 2 as ::core::ffi::c_long {
*arcrow = fromrow;
*arccol = ncol - 1 as ::core::ffi::c_long;
*arcdir = 1 as ::core::ffi::c_long;
} else if fromrow == 0 as ::core::ffi::c_long {
*arcrow = nrow - 1 as ::core::ffi::c_long;
*arccol = fromcol;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
} else if fromrow == nrow - 2 as ::core::ffi::c_long {
*arcrow = 2 as ::core::ffi::c_long * (nrow - 1 as ::core::ffi::c_long);
*arccol = fromcol;
*arcdir = 1 as ::core::ffi::c_long;
} else if tocol == 0 as ::core::ffi::c_long {
*arcrow = torow;
*arccol = 0 as ::core::ffi::c_long;
*arcdir = 1 as ::core::ffi::c_long;
} else if tocol == ncol - 2 as ::core::ffi::c_long {
*arcrow = torow;
*arccol = ncol - 1 as ::core::ffi::c_long;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
} else if torow == 0 as ::core::ffi::c_long {
*arcrow = nrow - 1 as ::core::ffi::c_long;
*arccol = tocol;
*arcdir = 1 as ::core::ffi::c_long;
} else {
*arcrow = 2 as ::core::ffi::c_long * (nrow - 1 as ::core::ffi::c_long);
*arccol = tocol;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
};
}
unsafe extern "C" fn GetArcNonGrid(
mut from: *mut nodeT,
mut to: *mut nodeT,
mut arcrow: *mut ::core::ffi::c_long,
mut arccol: *mut ::core::ffi::c_long,
mut arcdir: *mut ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut nodes_0: *mut *mut nodeT,
mut nodesupp: *mut *mut nodesuppT,
) {
let mut tilenum: ::core::ffi::c_long = 0;
let mut nodenum: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut outarc: *mut scndryarcT = ::core::ptr::null_mut::<scndryarcT>();
tilenum = (*from).row as ::core::ffi::c_long;
nodenum = (*from).col as ::core::ffi::c_long;
arcnum = 0 as ::core::ffi::c_long;
loop {
let fresh74 = arcnum;
arcnum = arcnum + 1;
outarc = *(*(*nodesupp.offset(tilenum as isize)).offset(nodenum as isize))
.outarcs
.offset(fresh74 as isize);
if (*outarc).from == to {
*arcrow = (*outarc).arcrow as ::core::ffi::c_long;
*arccol = (*outarc).arccol as ::core::ffi::c_long;
*arcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
return;
} else if (*outarc).to == to {
*arcrow = (*outarc).arcrow as ::core::ffi::c_long;
*arccol = (*outarc).arccol as ::core::ffi::c_long;
*arcdir = 1 as ::core::ffi::c_long;
return;
}
}
}
unsafe extern "C" fn NonDegenUpdateChildren(
mut startnode: *mut nodeT,
mut lastnode: *mut nodeT,
mut nextonpath: *mut nodeT,
mut dgroup: ::core::ffi::c_long,
mut ngroundarcs: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nodes_0: *mut *mut nodeT,
mut nodesupp: *mut *mut nodesuppT,
mut ground: *mut nodeT,
mut boundary: *mut boundaryT,
mut apexes: *mut *mut *mut nodeT,
mut incrcosts: *mut *mut incrcostT,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut params: *mut paramT,
) {
let mut node1: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut node2: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut dincost: ::core::ffi::c_long = 0;
let mut doutcost: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut upperarcnum: ::core::ffi::c_long = 0;
let mut startlevel: ::core::ffi::c_long = 0;
let mut group1: ::core::ffi::c_long = 0;
let mut pathgroup: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcdir: ::core::ffi::c_long = 0;
node1 = startnode;
pathgroup = (*lastnode).group as ::core::ffi::c_long;
while node1 != lastnode {
node2 = nextonpath;
GetArc.expect("non-null function pointer")(
(*node2).pred as *mut nodeT,
node2,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
nodes_0,
nodesupp,
);
doutcost = ((*node1).outcost - (*node2).outcost
+ GetCost(incrcosts, arcrow, arccol, arcdir) as ::core::ffi::c_int)
as ::core::ffi::c_long;
(*node2).outcost =
((*node2).outcost as ::core::ffi::c_long + doutcost) as ::core::ffi::c_int;
dincost = ((*node1).incost - (*node2).incost
+ GetCost(incrcosts, arcrow, arccol, -arcdir) as ::core::ffi::c_int)
as ::core::ffi::c_long;
(*node2).incost = ((*node2).incost as ::core::ffi::c_long + dincost) as ::core::ffi::c_int;
(*node2).group = ((*node1).group as ::core::ffi::c_long + dgroup) as ::core::ffi::c_int;
node1 = node2;
arcnum = GetArcNumLims(
(*node1).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
boundary,
);
while arcnum < upperarcnum {
arcnum += 1;
node2 = NeighborNode.expect("non-null function pointer")(
node1,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
boundary,
nodesupp,
);
if (*node2).pred == node1 && (*node2).group > 0 as ::core::ffi::c_int {
if (*node2).group as ::core::ffi::c_long == pathgroup {
nextonpath = node2;
} else {
startlevel = (*node2).level as ::core::ffi::c_long;
group1 = (*node1).group as ::core::ffi::c_long;
loop {
(*node2).group = group1 as ::core::ffi::c_int;
(*node2).incost = ((*node2).incost as ::core::ffi::c_long + dincost)
as ::core::ffi::c_int;
(*node2).outcost = ((*node2).outcost as ::core::ffi::c_long + doutcost)
as ::core::ffi::c_int;
node2 = (*node2).next as *mut nodeT;
if (*node2).level as ::core::ffi::c_long <= startlevel {
break;
}
}
}
}
}
}
}
unsafe extern "C" fn PruneTree(
mut source: *mut nodeT,
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
mut boundary: *mut boundaryT,
mut nodesupp: *mut *mut nodesuppT,
mut incrcosts: *mut *mut incrcostT,
mut flows: *mut *mut ::core::ffi::c_short,
mut ngroundarcs: ::core::ffi::c_long,
mut prunecostthresh: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_long {
let mut npruned: ::core::ffi::c_long = 0;
let mut node1: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
npruned = 0 as ::core::ffi::c_long;
node1 = (*source).next as *mut nodeT;
while node1 != source {
if CheckLeaf(
node1,
nodes_0,
ground,
boundary,
nodesupp,
incrcosts,
flows,
ngroundarcs,
nrow,
ncol,
prunecostthresh,
) != 0
{
(*(*node1).prev).next = (*node1).next;
(*(*node1).next).prev = (*node1).prev;
(*node1).group = PRUNED;
npruned += 1;
if (*(*node1).prev).level < (*node1).level {
node1 = (*node1).prev as *mut nodeT;
} else {
node1 = (*node1).next as *mut nodeT;
}
} else {
node1 = (*node1).next as *mut nodeT;
}
}
fprintf(
sp3,
b"\n Pruned %ld nodes\n\0" as *const u8 as *const ::core::ffi::c_char,
npruned,
);
return npruned;
}
unsafe extern "C" fn CheckLeaf(
mut node1: *mut nodeT,
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
mut boundary: *mut boundaryT,
mut nodesupp: *mut *mut nodesuppT,
mut incrcosts: *mut *mut incrcostT,
mut flows: *mut *mut ::core::ffi::c_short,
mut ngroundarcs: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut prunecostthresh: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut arcnum: ::core::ffi::c_long = 0;
let mut upperarcnum: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcdir: ::core::ffi::c_long = 0;
let mut node2: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
if (*(*node1).next).level > (*node1).level {
return 0 as ::core::ffi::c_int;
}
arcnum = GetArcNumLims(
(*node1).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
boundary,
);
while arcnum < upperarcnum {
arcnum += 1;
node2 = NeighborNode.expect("non-null function pointer")(
node1,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
boundary,
nodesupp,
);
if (*node2).group == 0 as ::core::ffi::c_int
|| (*node2).group == INBUCKET
|| ((*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost
as ::core::ffi::c_long)
< prunecostthresh
|| ((*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).negcost
as ::core::ffi::c_long)
< prunecostthresh
|| *(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int
!= 0 as ::core::ffi::c_int
{
return 0 as ::core::ffi::c_int;
}
}
return 1 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn InitNetwork(
mut flows: *mut *mut ::core::ffi::c_short,
mut ngroundarcsptr: *mut ::core::ffi::c_long,
mut ncycleptr: *mut ::core::ffi::c_long,
mut nflowdoneptr: *mut ::core::ffi::c_long,
mut mostflowptr: *mut ::core::ffi::c_long,
mut nflowptr: *mut ::core::ffi::c_long,
mut candidatebagsizeptr: *mut ::core::ffi::c_long,
mut candidatebagptr: *mut *mut candidateT,
mut candidatelistsizeptr: *mut ::core::ffi::c_long,
mut candidatelistptr: *mut *mut candidateT,
mut iscandidateptr: *mut *mut *mut ::core::ffi::c_schar,
mut apexesptr: *mut *mut *mut *mut nodeT,
mut bktsptr: *mut *mut bucketT,
mut iincrcostfileptr: *mut ::core::ffi::c_long,
mut incrcostsptr: *mut *mut *mut incrcostT,
mut nodesptr: *mut *mut *mut nodeT,
mut ground: *mut nodeT,
mut nnoderowptr: *mut ::core::ffi::c_long,
mut nnodesperrowptr: *mut *mut ::core::ffi::c_int,
mut narcrowptr: *mut ::core::ffi::c_long,
mut narcsperrowptr: *mut *mut ::core::ffi::c_int,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut notfirstloopptr: *mut ::core::ffi::c_schar,
mut totalcostptr: *mut totalcostT,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut i: ::core::ffi::c_long = 0;
if !ground.is_null() && (*nodesptr).is_null() {
*nodesptr = Get2DMem(
(nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_int,
(ncol - 1 as ::core::ffi::c_long) as ::core::ffi::c_int,
::core::mem::size_of::<*mut nodeT>() as ::core::ffi::c_int,
::core::mem::size_of::<nodeT>() as size_t,
) as *mut *mut nodeT;
InitNodeNums(
nrow - 1 as ::core::ffi::c_long,
ncol - 1 as ::core::ffi::c_long,
*nodesptr,
ground,
);
}
if !ground.is_null() {
let ref mut fresh75 = *(*flows.offset(0 as ::core::ffi::c_int as isize))
.offset(0 as ::core::ffi::c_int as isize);
*fresh75 = (*fresh75 as ::core::ffi::c_int
+ *(*flows.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) as ::core::ffi::c_int)
as ::core::ffi::c_short;
*(*flows.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) = 0 as ::core::ffi::c_short;
let ref mut fresh76 = *(*flows.offset(0 as ::core::ffi::c_int as isize))
.offset((ncol - 1 as ::core::ffi::c_long) as isize);
*fresh76 = (*fresh76 as ::core::ffi::c_int
- *(*flows.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int) as ::core::ffi::c_short;
*(*flows.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) = 0 as ::core::ffi::c_short;
let ref mut fresh77 = *(*flows.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize);
*fresh77 = (*fresh77 as ::core::ffi::c_int
- *(*flows
.offset((2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) as ::core::ffi::c_int)
as ::core::ffi::c_short;
*(*flows.offset((2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) = 0 as ::core::ffi::c_short;
let ref mut fresh78 = *(*flows.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset((ncol - 1 as ::core::ffi::c_long) as isize);
*fresh78 = (*fresh78 as ::core::ffi::c_int
+ *(*flows
.offset((2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) as ::core::ffi::c_int)
as ::core::ffi::c_short;
*(*flows.offset((2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) = 0 as ::core::ffi::c_short;
}
*ncycleptr = 0 as ::core::ffi::c_long;
*nflowptr = 1 as ::core::ffi::c_long;
*candidatebagsizeptr = INITARRSIZE as ::core::ffi::c_long;
*candidatebagptr = MAlloc(
(*candidatebagsizeptr as size_t)
.wrapping_mul(::core::mem::size_of::<candidateT>() as size_t),
) as *mut candidateT;
*candidatelistsizeptr = INITARRSIZE as ::core::ffi::c_long;
*candidatelistptr = MAlloc(
(*candidatelistsizeptr as size_t)
.wrapping_mul(::core::mem::size_of::<candidateT>() as size_t),
) as *mut candidateT;
if !ground.is_null() {
*nflowdoneptr = 0 as ::core::ffi::c_long;
*mostflowptr = Short2DRowColAbsMax(flows, nrow, ncol);
if *mostflowptr * (*params).nshortcycle > LARGESHORT as ::core::ffi::c_long {
fprintf(
sp1,
b"Maximum flow on network: %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
*mostflowptr,
);
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"((Maximum flow) * NSHORTCYCLE) too large\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if ncol > 2 as ::core::ffi::c_long {
*ngroundarcsptr = 2 as ::core::ffi::c_long * (nrow + ncol - 2 as ::core::ffi::c_long)
- 4 as ::core::ffi::c_long;
} else {
*ngroundarcsptr = 2 as ::core::ffi::c_long * (nrow + ncol - 2 as ::core::ffi::c_long)
- 2 as ::core::ffi::c_long;
}
*iscandidateptr = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut ::core::ffi::c_schar>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_schar>() as size_t,
) as *mut *mut ::core::ffi::c_schar;
*apexesptr = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut *mut nodeT>() as ::core::ffi::c_int,
::core::mem::size_of::<*mut nodeT>() as size_t,
) as *mut *mut *mut nodeT;
}
*bktsptr = MAlloc(::core::mem::size_of::<bucketT>() as size_t) as *mut bucketT;
if !ground.is_null() {
(**bktsptr).minind = -LRound(
((*params).maxcost + 1 as ::core::ffi::c_int as ::core::ffi::c_double)
* (nrow + ncol) as ::core::ffi::c_double
* NEGBUCKETFRACTION,
);
(**bktsptr).maxind = LRound(
((*params).maxcost + 1 as ::core::ffi::c_int as ::core::ffi::c_double)
* (nrow + ncol) as ::core::ffi::c_double
* POSBUCKETFRACTION,
);
} else {
(**bktsptr).minind = -LRound(
((*params).maxcost + 1 as ::core::ffi::c_int as ::core::ffi::c_double)
* nrow as ::core::ffi::c_double
* NEGBUCKETFRACTION,
);
(**bktsptr).maxind = LRound(
((*params).maxcost + 1 as ::core::ffi::c_int as ::core::ffi::c_double)
* nrow as ::core::ffi::c_double
* POSBUCKETFRACTION,
);
}
(**bktsptr).size = (**bktsptr).maxind - (**bktsptr).minind + 1 as ::core::ffi::c_long;
(**bktsptr).bucketbase = MAlloc(
((**bktsptr).size as size_t).wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
(**bktsptr).bucket =
(**bktsptr).bucketbase.offset(-(**bktsptr).minind as isize) as *mut *mut nodeT;
i = 0 as ::core::ffi::c_long;
while i < (**bktsptr).size {
let ref mut fresh79 = *(**bktsptr).bucketbase.offset(i as isize);
*fresh79 = ::core::ptr::null_mut::<nodeT>();
i += 1;
}
*iincrcostfileptr = 0 as ::core::ffi::c_long;
if !ground.is_null() {
*incrcostsptr = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut incrcostT>() as ::core::ffi::c_int,
::core::mem::size_of::<incrcostT>() as size_t,
) as *mut *mut incrcostT;
}
if !ground.is_null() {
*nnoderowptr = nrow - 1 as ::core::ffi::c_long;
*nnodesperrowptr = MAlloc(
((nrow - 1 as ::core::ffi::c_long) as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_int>() as size_t),
) as *mut ::core::ffi::c_int;
i = 0 as ::core::ffi::c_long;
while i < nrow - 1 as ::core::ffi::c_long {
*(*nnodesperrowptr).offset(i as isize) =
(ncol - 1 as ::core::ffi::c_long) as ::core::ffi::c_int;
i += 1;
}
*narcrowptr = 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long;
*narcsperrowptr = MAlloc(
((2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_int>() as size_t),
) as *mut ::core::ffi::c_int;
i = 0 as ::core::ffi::c_long;
while i < nrow - 1 as ::core::ffi::c_long {
*(*narcsperrowptr).offset(i as isize) = ncol as ::core::ffi::c_int;
i += 1;
}
i = nrow - 1 as ::core::ffi::c_long;
while i < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
*(*narcsperrowptr).offset(i as isize) =
(ncol - 1 as ::core::ffi::c_long) as ::core::ffi::c_int;
i += 1;
}
}
*notfirstloopptr = FALSE as ::core::ffi::c_schar;
*totalcostptr = INITTOTALCOST as totalcostT;
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetupTreeSolveNetwork(
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
mut apexes: *mut *mut *mut nodeT,
mut iscandidate: *mut *mut ::core::ffi::c_schar,
mut nnoderow: ::core::ffi::c_long,
mut nnodesperrow: *mut ::core::ffi::c_int,
mut narcrow: ::core::ffi::c_long,
mut narcsperrow: *mut ::core::ffi::c_int,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_long {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut nnodes: ::core::ffi::c_long = 0;
nnodes = 0 as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nnoderow {
col = 0 as ::core::ffi::c_long;
while col < *nnodesperrow.offset(row as isize) as ::core::ffi::c_long {
if (*(*nodes_0.offset(row as isize)).offset(col as isize)).group != MASKED {
(*(*nodes_0.offset(row as isize)).offset(col as isize)).group =
0 as ::core::ffi::c_int;
nnodes += 1;
}
(*(*nodes_0.offset(row as isize)).offset(col as isize)).incost = VERYFAR;
(*(*nodes_0.offset(row as isize)).offset(col as isize)).outcost = VERYFAR;
let ref mut fresh72 = (*(*nodes_0.offset(row as isize)).offset(col as isize)).pred;
*fresh72 = ::core::ptr::null_mut::<nodeST>();
col += 1;
}
row += 1;
}
if !ground.is_null() {
if (*ground).group != MASKED {
(*ground).group = 0 as ::core::ffi::c_int;
nnodes += 1;
}
(*ground).incost = VERYFAR;
(*ground).outcost = VERYFAR;
(*ground).pred = ::core::ptr::null_mut::<nodeST>();
}
row = 0 as ::core::ffi::c_long;
while row < narcrow {
col = 0 as ::core::ffi::c_long;
while col < *narcsperrow.offset(row as isize) as ::core::ffi::c_long {
let ref mut fresh73 = *(*apexes.offset(row as isize)).offset(col as isize);
*fresh73 = &raw mut NONTREEARC as *mut nodeT;
*(*iscandidate.offset(row as isize)).offset(col as isize) =
FALSE as ::core::ffi::c_schar;
col += 1;
}
row += 1;
}
if !ground.is_null() {
*(*iscandidate.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) = TRUE as ::core::ffi::c_schar;
*(*iscandidate
.offset((2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) = TRUE as ::core::ffi::c_schar;
*(*iscandidate.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) = TRUE as ::core::ffi::c_schar;
*(*iscandidate
.offset((2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize) = TRUE as ::core::ffi::c_schar;
}
return nnodes;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CheckMagMasking(
mut mag: *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_schar {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if *(*mag.offset(row as isize)).offset(col as isize)
> 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
return 0 as ::core::ffi::c_schar;
}
col += 1;
}
row += 1;
}
return 1 as ::core::ffi::c_schar;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn MaskNodes(
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
mut mag: *mut *mut ::core::ffi::c_float,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
(*(*nodes_0.offset(row as isize)).offset(col as isize)).group =
GridNodeMaskStatus(row, col, mag);
col += 1;
}
row += 1;
}
(*ground).group = GroundMaskStatus(nrow, ncol, mag);
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn GridNodeMaskStatus(
mut row: ::core::ffi::c_long,
mut col: ::core::ffi::c_long,
mut mag: *mut *mut ::core::ffi::c_float,
) -> ::core::ffi::c_int {
if *(*mag.offset(row as isize)).offset(col as isize) != 0.
|| *(*mag.offset(row as isize)).offset((col + 1 as ::core::ffi::c_long) as isize) != 0.
|| *(*mag.offset((row + 1 as ::core::ffi::c_long) as isize)).offset(col as isize) != 0.
|| *(*mag.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
!= 0.
{
return 0 as ::core::ffi::c_int;
}
return -(5 as ::core::ffi::c_int);
}
unsafe extern "C" fn GroundMaskStatus(
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut mag: *mut *mut ::core::ffi::c_float,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nrow {
if *(*mag.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize) != 0.
|| *(*mag.offset(row as isize)).offset((ncol - 1 as ::core::ffi::c_long) as isize) != 0.
{
return 0 as ::core::ffi::c_int;
}
row += 1;
}
col = 0 as ::core::ffi::c_long;
while col < ncol {
if *(*mag.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize) != 0.
|| *(*mag.offset((nrow - 1 as ::core::ffi::c_long) as isize)).offset(col as isize) != 0.
{
return 0 as ::core::ffi::c_int;
}
col += 1;
}
return -(5 as ::core::ffi::c_int);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn MaxNonMaskFlow(
mut flows: *mut *mut ::core::ffi::c_short,
mut mag: *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_long {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut mostflow: ::core::ffi::c_long = 0;
let mut flowvalue: ::core::ffi::c_long = 0;
mostflow = 0 as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol {
flowvalue =
labs(*(*flows.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long);
if flowvalue > mostflow
&& *(*mag.offset(row as isize)).offset(col as isize)
> 0 as ::core::ffi::c_int as ::core::ffi::c_float
&& *(*mag.offset((row + 1 as ::core::ffi::c_long) as isize)).offset(col as isize)
> 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
mostflow = flowvalue;
}
col += 1;
}
row += 1;
}
row = nrow - 1 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
flowvalue =
labs(*(*flows.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long);
if flowvalue > mostflow
&& *(*mag.offset((row - nrow + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)
> 0 as ::core::ffi::c_int as ::core::ffi::c_float
&& *(*mag.offset((row - nrow + 1 as ::core::ffi::c_long) as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
> 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
mostflow = flowvalue;
}
col += 1;
}
row += 1;
}
return mostflow;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn InitNodeNums(
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
(*(*nodes_0.offset(row as isize)).offset(col as isize)).row = row as ::core::ffi::c_int;
(*(*nodes_0.offset(row as isize)).offset(col as isize)).col = col as ::core::ffi::c_int;
col += 1;
}
row += 1;
}
if !ground.is_null() {
(*ground).row = GROUNDROW;
(*ground).col = GROUNDCOL;
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn InitBuckets(
mut bkts: *mut bucketT,
mut source: *mut nodeT,
mut nbuckets: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut i: ::core::ffi::c_long = 0;
(*bkts).curr = 0 as ::core::ffi::c_long;
(*bkts).wrapped = FALSE as ::core::ffi::c_schar;
i = 0 as ::core::ffi::c_long;
while i < nbuckets {
let ref mut fresh128 = *(*bkts).bucketbase.offset(i as isize);
*fresh128 = ::core::ptr::null_mut::<nodeT>();
i += 1;
}
let ref mut fresh129 = *(*bkts).bucket.offset(0 as ::core::ffi::c_int as isize);
*fresh129 = source;
(*source).next = ::core::ptr::null_mut::<nodeST>();
(*source).prev = ::core::ptr::null_mut::<nodeST>();
(*source).group = INBUCKET;
(*source).outcost = 0 as ::core::ffi::c_int;
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn InitNodes(
mut nnrow: ::core::ffi::c_long,
mut nncol: ::core::ffi::c_long,
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nnrow {
col = 0 as ::core::ffi::c_long;
while col < nncol {
(*(*nodes_0.offset(row as isize)).offset(col as isize)).group = NOTINBUCKET;
(*(*nodes_0.offset(row as isize)).offset(col as isize)).incost = VERYFAR;
(*(*nodes_0.offset(row as isize)).offset(col as isize)).outcost = VERYFAR;
let ref mut fresh16 = (*(*nodes_0.offset(row as isize)).offset(col as isize)).pred;
*fresh16 = ::core::ptr::null_mut::<nodeST>();
col += 1;
}
row += 1;
}
if !ground.is_null() {
(*ground).group = NOTINBUCKET;
(*ground).incost = VERYFAR;
(*ground).outcost = VERYFAR;
(*ground).pred = ::core::ptr::null_mut::<nodeST>();
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn BucketInsert(
mut node: *mut nodeT,
mut ind: ::core::ffi::c_long,
mut bkts: *mut bucketT,
) {
(*node).next = *(*bkts).bucket.offset(ind as isize) as *mut nodeST;
if !(*(*bkts).bucket.offset(ind as isize)).is_null() {
let ref mut fresh6 = (**(*bkts).bucket.offset(ind as isize)).prev;
*fresh6 = node as *mut nodeST;
}
let ref mut fresh7 = *(*bkts).bucket.offset(ind as isize);
*fresh7 = node;
(*node).prev = ::core::ptr::null_mut::<nodeST>();
(*node).group = INBUCKET;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn BucketRemove(
mut node: *mut nodeT,
mut ind: ::core::ffi::c_long,
mut bkts: *mut bucketT,
) {
if !(*node).next.is_null() {
(*(*node).next).prev = (*node).prev;
}
if !(*node).prev.is_null() {
(*(*node).prev).next = (*node).next;
} else if (*node).next.is_null() {
let ref mut fresh8 = *(*bkts).bucket.offset(ind as isize);
*fresh8 = ::core::ptr::null_mut::<nodeT>();
} else {
let ref mut fresh9 = *(*bkts).bucket.offset(ind as isize);
*fresh9 = (*node).next as *mut nodeT;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ClosestNode(mut bkts: *mut bucketT) -> *mut nodeT {
let mut node: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
loop {
if (*bkts).curr > (*bkts).maxind {
return ::core::ptr::null_mut::<nodeT>();
}
if !(*(*bkts).bucket.offset((*bkts).curr as isize)).is_null() {
node = *(*bkts).bucket.offset((*bkts).curr as isize);
(*node).group = ONTREE;
let ref mut fresh14 = *(*bkts).bucket.offset((*bkts).curr as isize);
*fresh14 = (*node).next as *mut nodeT;
if !(*node).next.is_null() {
(*(*node).next).prev = ::core::ptr::null_mut::<nodeST>();
}
return node;
}
(*bkts).curr += 1;
}
}
unsafe extern "C" fn MinOutCostNode(mut bkts: *mut bucketT) -> *mut nodeT {
let mut minoutcost: ::core::ffi::c_long = 0;
let mut node1: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut node2: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
while (*bkts).curr < (*bkts).maxind && (*(*bkts).bucket.offset((*bkts).curr as isize)).is_null()
{
(*bkts).curr += 1;
}
if (*bkts).curr == (*bkts).minind || (*bkts).curr == (*bkts).maxind {
node2 = *(*bkts).bucket.offset((*bkts).curr as isize);
node1 = node2;
minoutcost = (*node1).outcost as ::core::ffi::c_long;
while !node2.is_null() {
if ((*node2).outcost as ::core::ffi::c_long) < minoutcost {
minoutcost = (*node2).outcost as ::core::ffi::c_long;
node1 = node2;
}
node2 = (*node2).next as *mut nodeT;
}
BucketRemove(node1, (*bkts).curr, bkts);
} else {
node1 = *(*bkts).bucket.offset((*bkts).curr as isize);
let ref mut fresh59 = *(*bkts).bucket.offset((*bkts).curr as isize);
*fresh59 = (*node1).next as *mut nodeT;
if !(*node1).next.is_null() {
(*(*node1).next).prev = ::core::ptr::null_mut::<nodeST>();
}
}
return node1;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SelectSources(
mut nodes_0: *mut *mut nodeT,
mut mag: *mut *mut ::core::ffi::c_float,
mut ground: *mut nodeT,
mut nflow: ::core::ffi::c_long,
mut flows: *mut *mut ::core::ffi::c_short,
mut ngroundarcs: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut params: *mut paramT,
mut sourcelistptr: *mut *mut *mut nodeT,
mut nconnectedarrptr: *mut *mut ::core::ffi::c_long,
) -> ::core::ffi::c_long {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut nsource: ::core::ffi::c_long = 0;
let mut nsourcelistmem: ::core::ffi::c_long = 0;
let mut nconnected: ::core::ffi::c_long = 0;
let mut nconnectedarr: *mut ::core::ffi::c_long =
::core::ptr::null_mut::<::core::ffi::c_long>();
let mut source: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut sourcelist: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
nsource = 0 as ::core::ffi::c_long;
nsourcelistmem = 0 as ::core::ffi::c_long;
sourcelist = ::core::ptr::null_mut::<*mut nodeT>();
nconnectedarr = ::core::ptr::null_mut::<::core::ffi::c_long>();
if (*ground).group != MASKED && (*ground).group != BOUNDARYPTR {
(*ground).group = 0 as ::core::ffi::c_int;
}
(*ground).next = ::core::ptr::null_mut::<nodeST>();
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
if (*(*nodes_0.offset(row as isize)).offset(col as isize)).group != MASKED
&& (*(*nodes_0.offset(row as isize)).offset(col as isize)).group != BOUNDARYPTR
{
(*(*nodes_0.offset(row as isize)).offset(col as isize)).group =
0 as ::core::ffi::c_int;
}
let ref mut fresh120 = (*(*nodes_0.offset(row as isize)).offset(col as isize)).next;
*fresh120 = ::core::ptr::null_mut::<nodeST>();
col += 1;
}
row += 1;
}
source = SelectConnNodeSource(
nodes_0,
mag,
ground,
ngroundarcs,
nrow,
ncol,
params,
ground,
&raw mut nconnected,
);
if !source.is_null() {
nsource += 1;
if nsource > nsourcelistmem {
nsourcelistmem += NSOURCELISTMEMINCR as ::core::ffi::c_long;
sourcelist = ReAlloc(
sourcelist as *mut ::core::ffi::c_void,
(nsourcelistmem as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
nconnectedarr = ReAlloc(
nconnectedarr as *mut ::core::ffi::c_void,
(nsourcelistmem as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_long>() as size_t),
) as *mut ::core::ffi::c_long;
}
let ref mut fresh121 = *sourcelist.offset((nsource - 1 as ::core::ffi::c_long) as isize);
*fresh121 = source;
*nconnectedarr.offset((nsource - 1 as ::core::ffi::c_long) as isize) = nconnected;
}
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
source = SelectConnNodeSource(
nodes_0,
mag,
ground,
ngroundarcs,
nrow,
ncol,
params,
(*nodes_0.offset(row as isize)).offset(col as isize) as *mut nodeT,
&raw mut nconnected,
);
if !source.is_null() {
nsource += 1;
if nsource > nsourcelistmem {
nsourcelistmem += NSOURCELISTMEMINCR as ::core::ffi::c_long;
sourcelist = ReAlloc(
sourcelist as *mut ::core::ffi::c_void,
(nsourcelistmem as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
nconnectedarr = ReAlloc(
nconnectedarr as *mut ::core::ffi::c_void,
(nsourcelistmem as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_long>() as size_t),
) as *mut ::core::ffi::c_long;
}
let ref mut fresh122 =
*sourcelist.offset((nsource - 1 as ::core::ffi::c_long) as isize);
*fresh122 = source;
*nconnectedarr.offset((nsource - 1 as ::core::ffi::c_long) as isize) = nconnected;
}
col += 1;
}
row += 1;
}
fprintf(
sp1,
b"Found %ld valid set(s) of connected nodes\n\0" as *const u8 as *const ::core::ffi::c_char,
nsource,
);
if (*ground).group != MASKED && (*ground).group != BOUNDARYPTR {
(*ground).group = 0 as ::core::ffi::c_int;
}
(*ground).next = ::core::ptr::null_mut::<nodeST>();
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
if (*(*nodes_0.offset(row as isize)).offset(col as isize)).group == INBUCKET
|| (*(*nodes_0.offset(row as isize)).offset(col as isize)).group == NOTINBUCKET
|| (*(*nodes_0.offset(row as isize)).offset(col as isize)).group
== BOUNDARYCANDIDATE
|| (*(*nodes_0.offset(row as isize)).offset(col as isize)).group == PRUNED
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
__stderrp,
b"WARNING: weird nodes[%ld][%ld].group=%d in SelectSources()\n\0" as *const u8
as *const ::core::ffi::c_char,
row,
col,
(*(*nodes_0.offset(row as isize)).offset(col as isize)).group,
);
}
if (*(*nodes_0.offset(row as isize)).offset(col as isize)).group != MASKED
&& (*(*nodes_0.offset(row as isize)).offset(col as isize)).group != BOUNDARYPTR
{
(*(*nodes_0.offset(row as isize)).offset(col as isize)).group =
0 as ::core::ffi::c_int;
}
let ref mut fresh123 = (*(*nodes_0.offset(row as isize)).offset(col as isize)).next;
*fresh123 = ::core::ptr::null_mut::<nodeST>();
col += 1;
}
row += 1;
}
if !sourcelistptr.is_null() {
*sourcelistptr = sourcelist;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR: NULL sourcelistptr in SelectSources()\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if !nconnectedarrptr.is_null() {
*nconnectedarrptr = nconnectedarr;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR: NULL nconnectedarrptr SelectSources()\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return nsource;
}
unsafe extern "C" fn SelectConnNodeSource(
mut nodes_0: *mut *mut nodeT,
mut mag: *mut *mut ::core::ffi::c_float,
mut ground: *mut nodeT,
mut ngroundarcs: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut params: *mut paramT,
mut start: *mut nodeT,
mut nconnectedptr: *mut ::core::ffi::c_long,
) -> *mut nodeT {
let mut nconnected: ::core::ffi::c_long = 0;
let mut source: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
if (*start).group == MASKED || (*start).group == ONTREE {
return ::core::ptr::null_mut::<nodeT>();
}
nconnected = ScanRegion(start, nodes_0, mag, ground, ngroundarcs, nrow, ncol, ONTREE);
if nconnected > (*params).nconnnodemin {
source = start;
} else {
source = ::core::ptr::null_mut::<nodeT>();
}
if !nconnectedptr.is_null() {
*nconnectedptr = nconnected;
}
return source;
}
unsafe extern "C" fn ScanRegion(
mut start: *mut nodeT,
mut nodes_0: *mut *mut nodeT,
mut mag: *mut *mut ::core::ffi::c_float,
mut ground: *mut nodeT,
mut ngroundarcs: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut groupsetting: ::core::ffi::c_int,
) -> ::core::ffi::c_long {
let mut node1: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut node2: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut end: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcdir: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut upperarcnum: ::core::ffi::c_long = 0;
let mut nconnected: ::core::ffi::c_long = 0;
let mut nodesupp: *mut *mut nodesuppT = ::core::ptr::null_mut::<*mut nodesuppT>();
let mut boundary: *mut boundaryT = ::core::ptr::null_mut::<boundaryT>();
nconnected = 0 as ::core::ffi::c_long;
end = start;
nodesupp = ::core::ptr::null_mut::<*mut nodesuppT>();
boundary = ::core::ptr::null_mut::<boundaryT>();
node1 = start;
(*node1).group = INBUCKET;
while !node1.is_null() {
arcnum = GetArcNumLims(
(*node1).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
boundary,
);
while arcnum < upperarcnum {
arcnum += 1;
node2 = NeighborNode.expect("non-null function pointer")(
node1,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
boundary,
nodesupp,
);
if (*node2).group == BOUNDARYPTR {
(*node2).group = 0 as ::core::ffi::c_int;
}
if IsRegionArc(mag, arcrow, arccol, nrow, ncol) != 0 {
if (*node2).group != ONTREE && (*node2).group != INBUCKET {
(*node2).group = INBUCKET;
(*end).next = node2 as *mut nodeST;
(*node2).next = ::core::ptr::null_mut::<nodeST>();
end = node2;
}
}
}
(*node1).group = ONTREE;
if groupsetting == ONTREE {
(*node1).level = 0 as ::core::ffi::c_uint;
}
nconnected += 1;
node1 = (*node1).next as *mut nodeT;
}
if groupsetting != ONTREE {
node1 = start;
while !node1.is_null() {
arcnum = GetArcNumLims(
(*node1).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
boundary,
);
while arcnum < upperarcnum {
arcnum += 1;
node2 = NeighborNode.expect("non-null function pointer")(
node1,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
boundary,
nodesupp,
);
if (*node2).group != ONTREE {
if groupsetting == MASKED {
(*node2).group = MASKED;
} else if groupsetting == 0 as ::core::ffi::c_int {
if (*node2).row == GROUNDROW {
(*node2).group = GroundMaskStatus(nrow, ncol, mag);
} else {
(*node2).group = GridNodeMaskStatus(
(*node2).row as ::core::ffi::c_long,
(*node2).col as ::core::ffi::c_long,
mag,
);
}
}
}
}
node1 = (*node1).next as *mut nodeT;
}
node1 = start;
while !node1.is_null() {
(*node1).group = 0 as ::core::ffi::c_int;
node1 = (*node1).next as *mut nodeT;
}
}
return nconnected;
}
unsafe extern "C" fn GetCost(
mut incrcosts: *mut *mut incrcostT,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut arcdir: ::core::ffi::c_long,
) -> ::core::ffi::c_short {
if arcdir > 0 as ::core::ffi::c_long {
return (*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost;
} else {
return (*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).negcost;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReCalcCost(
mut costs: *mut *mut ::core::ffi::c_void,
mut incrcosts: *mut *mut incrcostT,
mut flow: ::core::ffi::c_long,
mut arcrow: ::core::ffi::c_long,
mut arccol: ::core::ffi::c_long,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_long {
let mut poscost: ::core::ffi::c_long = 0;
let mut negcost: ::core::ffi::c_long = 0;
let mut iclipped: ::core::ffi::c_long = 0;
CalcCost.expect("non-null function pointer")(
costs,
flow,
arcrow,
arccol,
nflow,
nrow,
params,
&raw mut poscost,
&raw mut negcost,
);
iclipped = 0 as ::core::ffi::c_long;
if poscost > LARGESHORT as ::core::ffi::c_long {
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost =
LARGESHORT as ::core::ffi::c_short;
iclipped += 1;
} else if poscost < -LARGESHORT as ::core::ffi::c_long {
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost =
-LARGESHORT as ::core::ffi::c_short;
iclipped += 1;
} else {
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost =
poscost as ::core::ffi::c_short;
}
if negcost > LARGESHORT as ::core::ffi::c_long {
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).negcost =
LARGESHORT as ::core::ffi::c_short;
iclipped += 1;
} else if negcost < -LARGESHORT as ::core::ffi::c_long {
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).negcost =
-LARGESHORT as ::core::ffi::c_short;
iclipped += 1;
} else {
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).negcost =
negcost as ::core::ffi::c_short;
}
return iclipped;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetupIncrFlowCosts(
mut costs: *mut *mut ::core::ffi::c_void,
mut incrcosts: *mut *mut incrcostT,
mut flows: *mut *mut ::core::ffi::c_short,
mut nflow: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut narcrow: ::core::ffi::c_long,
mut narcsperrow: *mut ::core::ffi::c_int,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut iclipped: ::core::ffi::c_long = 0;
let mut narcs: ::core::ffi::c_long = 0;
let mut pl: [::core::ffi::c_char; 2] = [0; 2];
narcs = 0 as ::core::ffi::c_long;
iclipped = 0 as ::core::ffi::c_long;
arcrow = 0 as ::core::ffi::c_long;
while arcrow < narcrow {
narcs += *narcsperrow.offset(arcrow as isize) as ::core::ffi::c_long;
arccol = 0 as ::core::ffi::c_long;
while arccol < *narcsperrow.offset(arcrow as isize) as ::core::ffi::c_long {
iclipped += ReCalcCost(
costs,
incrcosts,
*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_long,
arcrow,
arccol,
nflow,
nrow,
params,
);
arccol += 1;
}
arcrow += 1;
}
if iclipped != 0 {
if iclipped > 1 as ::core::ffi::c_long {
strcpy(
&raw mut pl as *mut ::core::ffi::c_char,
b"s\0" as *const u8 as *const ::core::ffi::c_char,
);
} else {
strcpy(
&raw mut pl as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
);
}
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"%ld incremental cost%s clipped to avoid overflow (%.3f%%)\n\0" as *const u8
as *const ::core::ffi::c_char,
iclipped,
&raw mut pl as *mut ::core::ffi::c_char,
iclipped as ::core::ffi::c_double
/ (2 as ::core::ffi::c_long * narcs) as ::core::ffi::c_double,
);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn EvaluateTotalCost(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut narcsperrow: *mut ::core::ffi::c_int,
mut params: *mut paramT,
) -> totalcostT {
let mut rowcost: totalcostT = 0.;
let mut totalcost: totalcostT = 0.;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut maxrow: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
totalcost = 0 as ::core::ffi::c_int as totalcostT;
if ncol != 0 {
maxrow = 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long;
} else {
maxrow = nrow;
}
row = 0 as ::core::ffi::c_long;
while row < maxrow {
rowcost = 0 as ::core::ffi::c_int as totalcostT;
if ncol != 0 {
if row < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
} else {
maxcol = *narcsperrow.offset(row as isize) as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
rowcost +=
EvalCost.expect("non-null function pointer")(costs, flows, row, col, nrow, params)
as totalcostT;
col += 1;
}
totalcost += rowcost;
row += 1;
}
return totalcost;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn MSTInitFlows(
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut flowsptr: *mut *mut *mut ::core::ffi::c_short,
mut mstcosts: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut nodesptr: *mut *mut *mut nodeT,
mut ground: *mut nodeT,
mut maxflow: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut i: ::core::ffi::c_long = 0;
let mut maxcost: ::core::ffi::c_long = 0;
let mut residue: *mut *mut ::core::ffi::c_schar =
::core::ptr::null_mut::<*mut ::core::ffi::c_schar>();
let mut arcstatus: *mut *mut ::core::ffi::c_schar =
::core::ptr::null_mut::<*mut ::core::ffi::c_schar>();
let mut flows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut source: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut bkts: [bucketT; 1] = [bucketST {
size: 0,
curr: 0,
maxind: 0,
minind: 0,
bucket: ::core::ptr::null_mut::<*mut nodeT>(),
bucketbase: ::core::ptr::null_mut::<*mut nodeT>(),
wrapped: 0,
}; 1];
memset(
&raw mut bkts as *mut bucketT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<bucketT>() as size_t,
);
*nodesptr = Get2DMem(
(nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_int,
(ncol - 1 as ::core::ffi::c_long) as ::core::ffi::c_int,
::core::mem::size_of::<*mut nodeT>() as ::core::ffi::c_int,
::core::mem::size_of::<nodeT>() as size_t,
) as *mut *mut nodeT;
InitNodeNums(
nrow - 1 as ::core::ffi::c_long,
ncol - 1 as ::core::ffi::c_long,
*nodesptr,
ground,
);
maxcost = 0 as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
i = ncol;
} else {
i = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < i {
if *(*mstcosts.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long
> maxcost
&& !((row == nrow - 1 as ::core::ffi::c_long
|| 2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long != 0)
&& (col == 0 as ::core::ffi::c_long || col == ncol - 2 as ::core::ffi::c_long))
{
maxcost =
*(*mstcosts.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long;
}
col += 1;
}
row += 1;
}
(*(&raw mut bkts as *mut bucketT)).size = LRound(
((maxcost + 1 as ::core::ffi::c_long) * (nrow + ncol + 1 as ::core::ffi::c_long))
as ::core::ffi::c_double,
);
let ref mut fresh124 = (*(&raw mut bkts as *mut bucketT)).bucketbase;
*fresh124 = MAlloc(
((*(&raw mut bkts as *mut bucketT)).size as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
(*(&raw mut bkts as *mut bucketT)).minind = 0 as ::core::ffi::c_long;
(*(&raw mut bkts as *mut bucketT)).maxind =
(*(&raw mut bkts as *mut bucketT)).size - 1 as ::core::ffi::c_long;
let ref mut fresh125 = (*(&raw mut bkts as *mut bucketT)).bucket;
*fresh125 = (*(&raw mut bkts as *mut bucketT)).bucketbase;
arcstatus = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut ::core::ffi::c_schar>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_schar>() as size_t,
) as *mut *mut ::core::ffi::c_schar;
fprintf(
sp1,
b"Initializing flows with MST algorithm\n\0" as *const u8 as *const ::core::ffi::c_char,
);
residue = Get2DMem(
(nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_int,
(ncol - 1 as ::core::ffi::c_long) as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_schar>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_schar>() as size_t,
) as *mut *mut ::core::ffi::c_schar;
CycleResidue(
wrappedphase,
residue,
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
);
*flowsptr = Get2DRowColZeroMem(
nrow,
ncol,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
flows = *flowsptr;
fprintf(
sp2,
b"Running approximate minimum spanning tree solver\n\0" as *const u8
as *const ::core::ffi::c_char,
);
loop {
source = ::core::ptr::null_mut::<nodeT>();
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long && source.is_null() {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long && source.is_null() {
if *(*residue.offset(row as isize)).offset(col as isize) != 0 {
source = (*(*nodesptr).offset(row as isize)).offset(col as isize) as *mut nodeT;
}
col += 1;
}
row += 1;
}
if source.is_null() {
fprintf(
sp1,
b"No residues found\n\0" as *const u8 as *const ::core::ffi::c_char,
);
break;
} else {
InitNodes(
nrow - 1 as ::core::ffi::c_long,
ncol - 1 as ::core::ffi::c_long,
*nodesptr,
ground,
);
InitBuckets(
&raw mut bkts as *mut bucketT,
source,
(*(&raw mut bkts as *mut bucketT)).size,
);
SolveMST(
*nodesptr,
source,
ground,
&raw mut bkts as *mut bucketT,
mstcosts,
residue,
arcstatus,
nrow,
ncol,
);
DischargeTree(
source, mstcosts, flows, residue, arcstatus, *nodesptr, ground, nrow, ncol,
);
if ClipFlow(residue, flows, mstcosts, nrow, ncol, maxflow) != 0 {
break;
}
}
}
Free2DArray(
residue as *mut *mut ::core::ffi::c_void,
(nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
arcstatus as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
mstcosts as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
free((*(&raw mut bkts as *mut bucketT)).bucketbase as *mut ::core::ffi::c_void);
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn SolveMST(
mut nodes_0: *mut *mut nodeT,
mut source: *mut nodeT,
mut ground: *mut nodeT,
mut bkts: *mut bucketT,
mut mstcosts: *mut *mut ::core::ffi::c_short,
mut residue: *mut *mut ::core::ffi::c_schar,
mut arcstatus: *mut *mut ::core::ffi::c_schar,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) {
let mut from: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut pathfrom: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut pathto: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut nodesupp: *mut *mut nodesuppT = ::core::ptr::null_mut::<*mut nodesuppT>();
let mut fromdist: ::core::ffi::c_long = 0;
let mut newdist: ::core::ffi::c_long = 0;
let mut arcdist: ::core::ffi::c_long = 0;
let mut ngroundarcs: ::core::ffi::c_long = 0;
let mut groundcharge: ::core::ffi::c_long = 0;
let mut fromrow: ::core::ffi::c_long = 0;
let mut fromcol: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut upperarcnum: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
let mut pathfromrow: ::core::ffi::c_long = 0;
let mut pathfromcol: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcdir: ::core::ffi::c_long = 0;
nodesupp = ::core::ptr::null_mut::<*mut nodesuppT>();
ngroundarcs = 2 as ::core::ffi::c_long * (nrow + ncol - 2 as ::core::ffi::c_long)
- 4 as ::core::ffi::c_long;
groundcharge = 0 as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
groundcharge -=
*(*residue.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long;
col += 1;
}
row += 1;
}
arcrow = 0 as ::core::ffi::c_long;
while arcrow < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if arcrow < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
arccol = 0 as ::core::ffi::c_long;
while arccol < maxcol {
*(*arcstatus.offset(arcrow as isize)).offset(arccol as isize) =
0 as ::core::ffi::c_schar;
arccol += 1;
}
arcrow += 1;
}
loop {
from = ClosestNode(bkts);
if from.is_null() {
break;
}
fromrow = (*from).row as ::core::ffi::c_long;
fromcol = (*from).col as ::core::ffi::c_long;
if (fromrow != GROUNDROW as ::core::ffi::c_long
&& *(*residue.offset(fromrow as isize)).offset(fromcol as isize) as ::core::ffi::c_int
!= 0
|| fromrow == GROUNDROW as ::core::ffi::c_long && groundcharge != 0)
&& from != source
{
pathto = from;
pathfrom = (*from).pred as *mut nodeT;
loop {
(*pathto).outcost = 0 as ::core::ffi::c_int;
GetArc.expect("non-null function pointer")(
pathfrom,
pathto,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
nodes_0,
nodesupp,
);
*(*arcstatus.offset(arcrow as isize)).offset(arccol as isize) =
-(1 as ::core::ffi::c_int) as ::core::ffi::c_schar;
pathfromrow = (*pathfrom).row as ::core::ffi::c_long;
pathfromcol = (*pathfrom).col as ::core::ffi::c_long;
if pathfromrow != GROUNDROW as ::core::ffi::c_long
&& *(*residue.offset(pathfromrow as isize)).offset(pathfromcol as isize)
as ::core::ffi::c_int
!= 0
|| pathfromrow == GROUNDROW as ::core::ffi::c_long && groundcharge != 0
{
break;
}
pathto = pathfrom;
pathfrom = (*pathfrom).pred as *mut nodeT;
}
}
fromdist = (*from).outcost as ::core::ffi::c_long;
arcnum = GetArcNumLims(
fromrow,
&raw mut upperarcnum,
ngroundarcs,
::core::ptr::null_mut::<boundaryT>(),
);
while arcnum < upperarcnum {
arcnum += 1;
to = NeighborNode.expect("non-null function pointer")(
from,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
::core::ptr::null_mut::<boundaryT>(),
nodesupp,
);
row = (*to).row as ::core::ffi::c_long;
col = (*to).col as ::core::ffi::c_long;
if (*(*arcstatus.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int)
< 0 as ::core::ffi::c_int
{
arcdist = 0 as ::core::ffi::c_long;
} else {
arcdist = *(*mstcosts.offset(arcrow as isize)).offset(arccol as isize)
as ::core::ffi::c_long;
if arcdist == LARGESHORT as ::core::ffi::c_long {
arcdist = VERYFAR as ::core::ffi::c_long;
}
}
newdist = fromdist + arcdist;
if newdist < (*to).outcost as ::core::ffi::c_long {
if (*to).group == INBUCKET {
if ((*to).outcost as ::core::ffi::c_long) < (*bkts).maxind {
BucketRemove(to, (*to).outcost as ::core::ffi::c_long, bkts);
} else {
BucketRemove(to, (*bkts).maxind, bkts);
}
}
(*to).outcost = newdist as ::core::ffi::c_int;
(*to).pred = from as *mut nodeST;
if newdist < (*bkts).maxind {
BucketInsert(to, newdist, bkts);
if newdist < (*bkts).curr {
(*bkts).curr = newdist;
}
} else {
BucketInsert(to, (*bkts).maxind, bkts);
}
}
}
}
}
unsafe extern "C" fn DischargeTree(
mut source: *mut nodeT,
mut mstcosts: *mut *mut ::core::ffi::c_short,
mut flows: *mut *mut ::core::ffi::c_short,
mut residue: *mut *mut ::core::ffi::c_schar,
mut arcstatus: *mut *mut ::core::ffi::c_schar,
mut nodes_0: *mut *mut nodeT,
mut ground: *mut nodeT,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_long {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut todir: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcdir: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut upperarcnum: ::core::ffi::c_long = 0;
let mut ngroundarcs: ::core::ffi::c_long = 0;
let mut from: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut nextnode: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut nodesupp: *mut *mut nodesuppT = ::core::ptr::null_mut::<*mut nodesuppT>();
nextnode = source;
(*ground).outcost = 0 as ::core::ffi::c_int;
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
(*(*nodes_0.offset(row as isize)).offset(col as isize)).outcost =
*(*residue.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int;
(*ground).outcost -=
*(*residue.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int;
col += 1;
}
row += 1;
}
ngroundarcs = 2 as ::core::ffi::c_long * (nrow + ncol - 2 as ::core::ffi::c_long)
- 4 as ::core::ffi::c_long;
nodesupp = ::core::ptr::null_mut::<*mut nodesuppT>();
todir = 0 as ::core::ffi::c_long;
loop {
from = nextnode;
nextnode = ::core::ptr::null_mut::<nodeT>();
arcnum = GetArcNumLims(
(*from).row as ::core::ffi::c_long,
&raw mut upperarcnum,
ngroundarcs,
::core::ptr::null_mut::<boundaryT>(),
);
while arcnum < upperarcnum {
arcnum += 1;
to = NeighborNode.expect("non-null function pointer")(
from,
arcnum,
&raw mut upperarcnum,
nodes_0,
ground,
&raw mut arcrow,
&raw mut arccol,
&raw mut arcdir,
nrow,
ncol,
::core::ptr::null_mut::<boundaryT>(),
nodesupp,
);
if *(*arcstatus.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_int
== -(1 as ::core::ffi::c_int)
{
nextnode = to;
row = arcrow;
col = arccol;
break;
} else if *(*arcstatus.offset(arcrow as isize)).offset(arccol as isize)
as ::core::ffi::c_int
== -(2 as ::core::ffi::c_int)
{
nextnode = to;
row = arcrow;
col = arccol;
todir = arcdir;
}
}
if nextnode.is_null() {
break;
}
let ref mut fresh126 = *(*arcstatus.offset(row as isize)).offset(col as isize);
*fresh126 -= 1;
if *fresh126 as ::core::ffi::c_int == -(3 as ::core::ffi::c_int) {
let ref mut fresh127 = *(*flows.offset(row as isize)).offset(col as isize);
*fresh127 = (*fresh127 as ::core::ffi::c_long
+ todir * (*from).outcost as ::core::ffi::c_long)
as ::core::ffi::c_short;
(*nextnode).outcost += (*from).outcost;
(*from).outcost = 0 as ::core::ffi::c_int;
}
}
return (*from).outcost as ::core::ffi::c_long;
}
unsafe extern "C" fn ClipFlow(
mut residue: *mut *mut ::core::ffi::c_schar,
mut flows: *mut *mut ::core::ffi::c_short,
mut mstcosts: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut maxflow: ::core::ffi::c_long,
) -> ::core::ffi::c_schar {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut cliplimit: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
let mut excess: ::core::ffi::c_long = 0;
let mut tempcharge: ::core::ffi::c_long = 0;
let mut sign: ::core::ffi::c_long = 0;
let mut mostflow: ::core::ffi::c_long = 0;
let mut maxcost: ::core::ffi::c_long = 0;
mostflow = Short2DRowColAbsMax(flows, nrow, ncol);
if mostflow <= maxflow {
return 1 as ::core::ffi::c_schar;
}
fprintf(
sp2,
b"Maximum flow on network: %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
mostflow,
);
cliplimit = ceil(mostflow as ::core::ffi::c_double * CLIPFACTOR) as ::core::ffi::c_long
+ 1 as ::core::ffi::c_long;
if maxflow > cliplimit {
cliplimit = maxflow;
}
maxcost = 0 as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
if *(*mstcosts.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long
> maxcost
&& (*(*mstcosts.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int)
< LARGESHORT
{
maxcost =
*(*mstcosts.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long;
}
col += 1;
}
row += 1;
}
maxcost += INITMAXCOSTINCR as ::core::ffi::c_long;
if maxcost >= LARGESHORT as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: escaping ClipFlow loop to prevent cost overflow\n\0" as *const u8
as *const ::core::ffi::c_char,
);
return 1 as ::core::ffi::c_schar;
}
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
if labs(*(*flows.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long)
> cliplimit
{
if *(*flows.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int
> 0 as ::core::ffi::c_int
{
sign = 1 as ::core::ffi::c_long;
excess = *(*flows.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_long
- cliplimit;
} else {
sign = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
excess = *(*flows.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_long
+ cliplimit;
}
if row < nrow - 1 as ::core::ffi::c_long {
if col != 0 as ::core::ffi::c_long {
tempcharge = *(*residue.offset(row as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_long
+ excess;
if tempcharge > MAXRES as ::core::ffi::c_long
|| tempcharge < MINRES as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Overflow of residue data type\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
*(*residue.offset(row as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize) =
tempcharge as ::core::ffi::c_schar;
}
if col != ncol - 1 as ::core::ffi::c_long {
tempcharge = *(*residue.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_long
- excess;
if tempcharge < MINRES as ::core::ffi::c_long
|| tempcharge > MAXRES as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Overflow of residue data type\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
*(*residue.offset(row as isize)).offset(col as isize) =
tempcharge as ::core::ffi::c_schar;
}
} else {
if row != nrow - 1 as ::core::ffi::c_long {
tempcharge = *(*residue.offset((row - nrow) as isize)).offset(col as isize)
as ::core::ffi::c_long
+ excess;
if tempcharge > MAXRES as ::core::ffi::c_long
|| tempcharge < MINRES as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Overflow of residue data type\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
*(*residue.offset((row - nrow) as isize)).offset(col as isize) =
tempcharge as ::core::ffi::c_schar;
}
if row != 2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long {
tempcharge = *(*residue
.offset((row - nrow + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)
as ::core::ffi::c_long
- excess;
if tempcharge < MINRES as ::core::ffi::c_long
|| tempcharge > MAXRES as ::core::ffi::c_long
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Overflow of residue data type\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
*(*residue.offset((row - nrow + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize) = tempcharge as ::core::ffi::c_schar;
}
}
*(*flows.offset(row as isize)).offset(col as isize) =
(sign * cliplimit) as ::core::ffi::c_short;
*(*mstcosts.offset(row as isize)).offset(col as isize) =
maxcost as ::core::ffi::c_short;
}
col += 1;
}
row += 1;
}
fprintf(
sp2,
b"Flows clipped to %ld. Rerunning MST solver.\n\0" as *const u8
as *const ::core::ffi::c_char,
cliplimit,
);
return 0 as ::core::ffi::c_schar;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn MCFInitFlows(
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut flowsptr: *mut *mut *mut ::core::ffi::c_short,
mut mstcosts: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut cs2scalefactor: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut residue: *mut *mut ::core::ffi::c_schar =
::core::ptr::null_mut::<*mut ::core::ffi::c_schar>();
fprintf(
sp1,
b"Initializing flows with MCF algorithm\n\0" as *const u8 as *const ::core::ffi::c_char,
);
residue = Get2DMem(
(nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_int,
(ncol - 1 as ::core::ffi::c_long) as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_schar>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_schar>() as size_t,
) as *mut *mut ::core::ffi::c_schar;
CycleResidue(
wrappedphase,
residue,
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
);
SolveCS2(residue, mstcosts, nrow, ncol, cs2scalefactor, flowsptr);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetupTile(
mut nlines: ::core::ffi::c_long,
mut linelen: ::core::ffi::c_long,
mut params: *mut paramT,
mut tileparams: *mut tileparamT,
mut outfiles: *mut outfileT,
mut tileoutfiles: *mut outfileT,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut ni: ::core::ffi::c_long = 0;
let mut nj: ::core::ffi::c_long = 0;
let mut tempstring: [::core::ffi::c_char; 1024] = [0; 1024];
let mut path: [::core::ffi::c_char; 512] = [0; 512];
let mut basename: [::core::ffi::c_char; 512] = [0; 512];
let mut tiledir: *mut ::core::ffi::c_char = ::core::ptr::null_mut::<::core::ffi::c_char>();
ni = ceil(
(nlines + ((*params).ntilerow - 1 as ::core::ffi::c_long) * (*params).rowovrlp)
as ::core::ffi::c_double
/ (*params).ntilerow as ::core::ffi::c_double,
) as ::core::ffi::c_long;
nj = ceil(
(linelen + ((*params).ntilecol - 1 as ::core::ffi::c_long) * (*params).colovrlp)
as ::core::ffi::c_double
/ (*params).ntilecol as ::core::ffi::c_double,
) as ::core::ffi::c_long;
(*tileparams).firstrow = tilerow * (ni - (*params).rowovrlp);
(*tileparams).firstcol = tilecol * (nj - (*params).colovrlp);
if tilerow == (*params).ntilerow - 1 as ::core::ffi::c_long {
(*tileparams).nrow =
nlines - ((*params).ntilerow - 1 as ::core::ffi::c_long) * (ni - (*params).rowovrlp);
} else {
(*tileparams).nrow = ni;
}
if tilecol == (*params).ntilecol - 1 as ::core::ffi::c_long {
(*tileparams).ncol =
linelen - ((*params).ntilecol - 1 as ::core::ffi::c_long) * (nj - (*params).colovrlp);
} else {
(*tileparams).ncol = nj;
}
if (*params).minregionsize > (*tileparams).nrow * (*tileparams).ncol {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Minimum region size cannot exceed tile size\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
tiledir = &raw mut (*params).tiledir as *mut ::core::ffi::c_char;
ParseFilename(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).outfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
if strlen(&raw mut (*outfiles).initfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).initfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).initfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).initfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).flowfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).flowfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).flowfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).flowfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).eifile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).eifile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).eifile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).eifile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).rowcostfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).rowcostfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).rowcostfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).rowcostfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).colcostfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).colcostfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).colcostfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).colcostfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).mstrowcostfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).mstrowcostfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).mstrowcostfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).mstrowcostfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).mstcolcostfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).mstcolcostfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).mstcolcostfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).mstcolcostfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).mstcostsfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).mstcostsfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).mstcostsfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).mstcostsfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).corrdumpfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).corrdumpfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).corrdumpfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).corrdumpfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).rawcorrdumpfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).rawcorrdumpfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).rawcorrdumpfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).rawcorrdumpfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).conncompfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).conncompfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).costoutfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
TMPTILECOSTSUFFIX.as_ptr(),
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).costoutfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
if strlen(&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char) != 0 {
ParseFilename(
&raw mut (*outfiles).logfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld\0" as *const u8 as *const ::core::ffi::c_char,
tiledir,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
(*tileparams).ncol,
);
StrNCopy(
&raw mut (*tileoutfiles).logfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
} else {
StrNCopy(
&raw mut (*tileoutfiles).logfile as *mut ::core::ffi::c_char,
b"\0" as *const u8 as *const ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
}
(*tileoutfiles).outfileformat = TMPTILEOUTFORMAT as ::core::ffi::c_schar;
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetUpDoTileMask(
mut infiles: *mut infileT,
mut ntilerow: ::core::ffi::c_long,
mut ntilecol: ::core::ffi::c_long,
) -> *mut *mut ::core::ffi::c_schar {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut dotilemask: *mut *mut ::core::ffi::c_schar =
::core::ptr::null_mut::<*mut ::core::ffi::c_schar>();
let mut readparams: [tileparamT; 1] = [tileparamST {
firstcol: 0,
ncol: 0,
firstrow: 0,
nrow: 0,
}; 1];
memset(
&raw mut readparams as *mut tileparamT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<tileparamT>() as size_t,
);
dotilemask = Get2DMem(
ntilerow as ::core::ffi::c_int,
ntilecol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_schar>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_schar>() as size_t,
) as *mut *mut ::core::ffi::c_schar;
if strlen(&raw mut (*infiles).dotilemaskfile as *mut ::core::ffi::c_char) != 0 {
(*(&raw mut readparams as *mut tileparamT)).nrow = ntilerow;
(*(&raw mut readparams as *mut tileparamT)).ncol = ntilecol;
(*(&raw mut readparams as *mut tileparamT)).firstrow = 0 as ::core::ffi::c_long;
(*(&raw mut readparams as *mut tileparamT)).firstcol = 0 as ::core::ffi::c_long;
Read2DArray(
&raw mut dotilemask as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*infiles).dotilemaskfile as *mut ::core::ffi::c_char,
ntilecol,
ntilerow,
&raw mut readparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_schar>() as size_t,
::core::mem::size_of::<::core::ffi::c_schar>() as size_t,
);
} else {
row = 0 as ::core::ffi::c_long;
while row < ntilerow {
col = 0 as ::core::ffi::c_long;
while col < ntilecol {
*(*dotilemask.offset(row as isize)).offset(col as isize) =
1 as ::core::ffi::c_schar;
col += 1;
}
row += 1;
}
}
return dotilemask;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn GrowRegions(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut incrcosts: *mut *mut incrcostT,
mut outfiles: *mut outfileT,
mut tileparams: *mut tileparamT,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut i: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut fromdist: ::core::ffi::c_long = 0;
let mut arcdist: ::core::ffi::c_long = 0;
let mut regioncounter: ::core::ffi::c_long = 0;
let mut regionsizes: *mut ::core::ffi::c_long = ::core::ptr::null_mut::<::core::ffi::c_long>();
let mut regionsizeslen: ::core::ffi::c_long = 0;
let mut thisregionsize: *mut ::core::ffi::c_long =
::core::ptr::null_mut::<::core::ffi::c_long>();
let mut closestregiondist: ::core::ffi::c_long = 0;
let mut closestregion: ::core::ffi::c_long = 0;
let mut lastfromdist: ::core::ffi::c_long = 0;
let mut costthresh: ::core::ffi::c_long = 0;
let mut minsize: ::core::ffi::c_long = 0;
let mut maxcost: ::core::ffi::c_long = 0;
let mut costtypesize: ::core::ffi::c_long = 0;
let mut regions: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut nodes_0: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
let mut source: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut from: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut ground: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut regionfile: [::core::ffi::c_char; 512] = [0; 512];
let mut bkts: [bucketT; 1] = [bucketST {
size: 0,
curr: 0,
maxind: 0,
minind: 0,
bucket: ::core::ptr::null_mut::<*mut nodeT>(),
bucketbase: ::core::ptr::null_mut::<*mut nodeT>(),
wrapped: 0,
}; 1];
let mut growregionscosts: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut temptileparams: [tileparamT; 1] = [tileparamST {
firstcol: 0,
ncol: 0,
firstrow: 0,
nrow: 0,
}; 1];
let mut tempcalccostfnptr: Option<unsafe extern "C" fn() -> ()> = None;
let mut tempevalcostfnptr: Option<unsafe extern "C" fn() -> ::core::ffi::c_long> = None;
memset(
&raw mut regionfile as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut bkts as *mut bucketT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<bucketT>() as size_t,
);
memset(
&raw mut temptileparams as *mut tileparamT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<tileparamT>() as size_t,
);
fprintf(
sp1,
b"Growing reliable regions\n\0" as *const u8 as *const ::core::ffi::c_char,
);
minsize = (*params).minregionsize;
costthresh = (*params).tilecostthresh;
closestregion = 0 as ::core::ffi::c_long;
tempcalccostfnptr = ::core::mem::transmute::<
Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>,
Option<unsafe extern "C" fn() -> ()>,
>(CalcCost);
tempevalcostfnptr = ::core::mem::transmute::<
Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>,
Option<unsafe extern "C" fn() -> ::core::ffi::c_long>,
>(EvalCost);
if (*params).p >= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
if (*params).costmode as ::core::ffi::c_int == TOPO {
costtypesize = ::core::mem::size_of::<costT>() as ::core::ffi::c_long;
CalcCost = Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else if (*params).costmode as ::core::ffi::c_int == DEFO {
costtypesize = ::core::mem::size_of::<costT>() as ::core::ffi::c_long;
CalcCost = Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else if (*params).costmode as ::core::ffi::c_int == SMOOTH {
costtypesize = ::core::mem::size_of::<smoothcostT>() as ::core::ffi::c_long;
CalcCost = Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal cost mode in GrowRegions(). This is a bug.\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
(*(&raw mut temptileparams as *mut tileparamT)).firstrow = 0 as ::core::ffi::c_long;
(*(&raw mut temptileparams as *mut tileparamT)).firstcol = 0 as ::core::ffi::c_long;
(*(&raw mut temptileparams as *mut tileparamT)).nrow = nrow;
(*(&raw mut temptileparams as *mut tileparamT)).ncol = ncol;
growregionscosts = ::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
Read2DRowColFile(
&raw mut growregionscosts,
&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char,
ncol,
nrow,
&raw mut temptileparams as *mut tileparamT,
costtypesize as size_t,
);
} else {
growregionscosts = costs;
}
arcrow = 0 as ::core::ffi::c_long;
while arcrow < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if arcrow < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
arccol = 0 as ::core::ffi::c_long;
while arccol < maxcol {
ReCalcCost(
growregionscosts,
incrcosts,
*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_long,
arcrow,
arccol,
1 as ::core::ffi::c_long,
nrow,
params,
);
if ((*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).negcost
as ::core::ffi::c_int)
< (*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost
as ::core::ffi::c_int
{
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost =
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).negcost;
}
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost =
-((*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost
as ::core::ffi::c_long
- costthresh) as ::core::ffi::c_short;
if ((*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost
as ::core::ffi::c_int)
< 0 as ::core::ffi::c_int
{
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost =
0 as ::core::ffi::c_short;
}
arccol += 1;
}
arcrow += 1;
}
maxcost = ThickenCosts(incrcosts, nrow, ncol);
ground = ::core::ptr::null_mut::<nodeT>();
nodes_0 = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut nodeT>() as ::core::ffi::c_int,
::core::mem::size_of::<nodeT>() as size_t,
) as *mut *mut nodeT;
InitNodeNums(nrow, ncol, nodes_0, ground);
InitNodes(nrow, ncol, nodes_0, ground);
(*(&raw mut bkts as *mut bucketT)).size = maxcost + 2 as ::core::ffi::c_long;
(*(&raw mut bkts as *mut bucketT)).minind = 0 as ::core::ffi::c_long;
(*(&raw mut bkts as *mut bucketT)).maxind =
(*(&raw mut bkts as *mut bucketT)).size - 1 as ::core::ffi::c_long;
(*(&raw mut bkts as *mut bucketT)).curr = 0 as ::core::ffi::c_long;
(*(&raw mut bkts as *mut bucketT)).wrapped = FALSE as ::core::ffi::c_schar;
let ref mut fresh1 = (*(&raw mut bkts as *mut bucketT)).bucketbase;
*fresh1 = MAlloc(
((*(&raw mut bkts as *mut bucketT)).size as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
let ref mut fresh2 = (*(&raw mut bkts as *mut bucketT)).bucket;
*fresh2 = (*(&raw mut bkts as *mut bucketT)).bucketbase;
i = 0 as ::core::ffi::c_long;
while i < (*(&raw mut bkts as *mut bucketT)).size {
let ref mut fresh3 = *(*(&raw mut bkts as *mut bucketT)).bucket.offset(i as isize);
*fresh3 = ::core::ptr::null_mut::<nodeT>();
i += 1;
}
regioncounter = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
regionsizeslen = INITARRSIZE as ::core::ffi::c_long;
regionsizes = MAlloc(
(regionsizeslen as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_long>() as size_t),
) as *mut ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
(*(*nodes_0.offset(row as isize)).offset(col as isize)).incost =
-(1 as ::core::ffi::c_int);
col += 1;
}
row += 1;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if (*(*nodes_0.offset(row as isize)).offset(col as isize)).incost
< 0 as ::core::ffi::c_int
{
ClearBuckets(&raw mut bkts as *mut bucketT);
source = (*nodes_0.offset(row as isize)).offset(col as isize) as *mut nodeT;
(*source).next = ::core::ptr::null_mut::<nodeST>();
(*source).prev = ::core::ptr::null_mut::<nodeST>();
(*source).group = INBUCKET;
(*source).outcost = 0 as ::core::ffi::c_int;
let ref mut fresh4 = *(*(&raw mut bkts as *mut bucketT))
.bucket
.offset(0 as ::core::ffi::c_int as isize);
*fresh4 = source;
(*(&raw mut bkts as *mut bucketT)).curr = 0 as ::core::ffi::c_long;
lastfromdist = 0 as ::core::ffi::c_long;
regioncounter += 1;
if regioncounter >= regionsizeslen {
regionsizeslen += INITARRSIZE as ::core::ffi::c_long;
regionsizes = ReAlloc(
regionsizes as *mut ::core::ffi::c_void,
(regionsizeslen as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_long>() as size_t),
) as *mut ::core::ffi::c_long;
}
thisregionsize =
regionsizes.offset(regioncounter as isize) as *mut ::core::ffi::c_long;
*thisregionsize = 0 as ::core::ffi::c_long;
closestregiondist = VERYFAR as ::core::ffi::c_long;
loop {
from = ClosestNode(&raw mut bkts as *mut bucketT);
if from.is_null() {
if *thisregionsize >= minsize {
break;
}
MergeRegions(nodes_0, source, regionsizes, closestregion, nrow, ncol);
regioncounter -= 1;
break;
} else {
fromdist = (*from).outcost as ::core::ffi::c_long;
if fromdist > lastfromdist {
if *regionsizes.offset(regioncounter as isize) >= minsize {
break;
}
if fromdist > closestregiondist {
MergeRegions(
nodes_0,
source,
regionsizes,
closestregion,
nrow,
ncol,
);
regioncounter -= 1;
break;
}
}
(*from).incost = regioncounter as ::core::ffi::c_int;
*thisregionsize += 1;
lastfromdist = fromdist;
arcnum = 0 as ::core::ffi::c_long;
loop {
to = RegionsNeighborNode(
from,
&raw mut arcnum,
nodes_0,
&raw mut arcrow,
&raw mut arccol,
nrow,
ncol,
);
if to.is_null() {
break;
}
arcdist = (*(*incrcosts.offset(arcrow as isize))
.offset(arccol as isize))
.negcost as ::core::ffi::c_long;
if (*to).incost >= 0 as ::core::ffi::c_int {
if (*to).incost as ::core::ffi::c_long != regioncounter
&& arcdist < closestregiondist
{
closestregiondist = arcdist;
closestregion = (*to).incost as ::core::ffi::c_long;
}
} else if arcdist < (*to).outcost as ::core::ffi::c_long {
if (*to).group == INBUCKET {
BucketRemove(
to,
(*to).outcost as ::core::ffi::c_long,
&raw mut bkts as *mut bucketT,
);
}
(*to).outcost = arcdist as ::core::ffi::c_int;
(*to).pred = from as *mut nodeST;
BucketInsert(to, arcdist, &raw mut bkts as *mut bucketT);
if arcdist < (*(&raw mut bkts as *mut bucketT)).curr {
(*(&raw mut bkts as *mut bucketT)).curr = arcdist;
}
}
}
}
}
}
col += 1;
}
row += 1;
}
fprintf(
sp2,
b"Tile partitioned into %ld regions\n\0" as *const u8 as *const ::core::ffi::c_char,
regioncounter + 1 as ::core::ffi::c_long,
);
if (*params).ntilerow > 1 as ::core::ffi::c_long
|| (*params).ntilecol > 1 as ::core::ffi::c_long
{
regions = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if (*(*nodes_0.offset(row as isize)).offset(col as isize)).incost > LARGESHORT {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Number of regions in tile exceeds max allowed\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
*(*regions.offset(row as isize)).offset(col as isize) =
(*(*nodes_0.offset(row as isize)).offset(col as isize)).incost
as ::core::ffi::c_short;
col += 1;
}
row += 1;
}
sprintf(
&raw mut regionfile as *mut ::core::ffi::c_char,
b"%s%s\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
REGIONSUFFIX.as_ptr(),
);
fprintf(
sp2,
b"Writing region data to file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut regionfile as *mut ::core::ffi::c_char,
);
Write2DArray(
regions as *mut *mut ::core::ffi::c_void,
&raw mut regionfile as *mut ::core::ffi::c_char,
nrow,
ncol,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
} else {
regions = ::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
}
CalcCost = ::core::mem::transmute::<
Option<unsafe extern "C" fn() -> ()>,
Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>,
>(tempcalccostfnptr);
EvalCost = ::core::mem::transmute::<
Option<unsafe extern "C" fn() -> ::core::ffi::c_long>,
Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>,
>(tempevalcostfnptr);
if (*params).p >= 0 as ::core::ffi::c_int as ::core::ffi::c_double {
Free2DArray(
growregionscosts,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
}
Free2DArray(
nodes_0 as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
if !regions.is_null() {
Free2DArray(
regions as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
}
free((*(&raw mut bkts as *mut bucketT)).bucketbase as *mut ::core::ffi::c_void);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn GrowConnCompsMask(
mut costs: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut incrcosts: *mut *mut incrcostT,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut i: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut regioncounter: ::core::ffi::c_long = 0;
let mut regionsizes: *mut ::core::ffi::c_long = ::core::ptr::null_mut::<::core::ffi::c_long>();
let mut regionsizeslen: ::core::ffi::c_long = 0;
let mut thisregionsize: *mut ::core::ffi::c_long =
::core::ptr::null_mut::<::core::ffi::c_long>();
let mut sortedregionsizes: *mut ::core::ffi::c_long =
::core::ptr::null_mut::<::core::ffi::c_long>();
let mut costthresh: ::core::ffi::c_long = 0;
let mut minsize: ::core::ffi::c_long = 0;
let mut maxncomps: ::core::ffi::c_long = 0;
let mut ntied: ::core::ffi::c_long = 0;
let mut newnum: ::core::ffi::c_long = 0;
let mut outtypemax: ::core::ffi::c_ulong = 0;
let mut outtypesize: ::core::ffi::c_ulong = 0;
let mut nodes_0: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
let mut source: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut from: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut ground: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut ucharbuf: *mut ::core::ffi::c_uchar = ::core::ptr::null_mut::<::core::ffi::c_uchar>();
let mut uintbuf: *mut ::core::ffi::c_uint = ::core::ptr::null_mut::<::core::ffi::c_uint>();
let mut outbufptr: *mut ::core::ffi::c_void = ::core::ptr::null_mut::<::core::ffi::c_void>();
let mut bkts: [bucketT; 1] = [bucketST {
size: 0,
curr: 0,
maxind: 0,
minind: 0,
bucket: ::core::ptr::null_mut::<*mut nodeT>(),
bucketbase: ::core::ptr::null_mut::<*mut nodeT>(),
wrapped: 0,
}; 1];
let mut realoutfile: [::core::ffi::c_char; 512] = [0; 512];
let mut conncompfp: *mut FILE = ::core::ptr::null_mut::<FILE>();
memset(
&raw mut bkts as *mut bucketT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<bucketT>() as size_t,
);
fprintf(
sp1,
b"Growing connected component mask\n\0" as *const u8 as *const ::core::ffi::c_char,
);
minsize = ((*params).minconncompfrac
* nrow as ::core::ffi::c_double
* ncol as ::core::ffi::c_double) as ::core::ffi::c_long;
maxncomps = (*params).maxncomps;
costthresh = (*params).conncompthresh;
if minsize > nrow * ncol {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Minimum region size cannot exceed tile size\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
arcrow = 0 as ::core::ffi::c_long;
while arcrow < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if arcrow < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
arccol = 0 as ::core::ffi::c_long;
while arccol < maxcol {
ReCalcCost(
costs,
incrcosts,
*(*flows.offset(arcrow as isize)).offset(arccol as isize) as ::core::ffi::c_long,
arcrow,
arccol,
1 as ::core::ffi::c_long,
nrow,
params,
);
if ((*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).negcost
as ::core::ffi::c_int)
< (*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost
as ::core::ffi::c_int
{
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost =
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).negcost;
}
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost =
-((*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost
as ::core::ffi::c_long
- costthresh) as ::core::ffi::c_short;
if ((*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost
as ::core::ffi::c_int)
< 0 as ::core::ffi::c_int
{
(*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize)).poscost =
0 as ::core::ffi::c_short;
}
arccol += 1;
}
arcrow += 1;
}
ThickenCosts(incrcosts, nrow, ncol);
ground = ::core::ptr::null_mut::<nodeT>();
nodes_0 = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut nodeT>() as ::core::ffi::c_int,
::core::mem::size_of::<nodeT>() as size_t,
) as *mut *mut nodeT;
InitNodeNums(nrow, ncol, nodes_0, ground);
InitNodes(nrow, ncol, nodes_0, ground);
(*(&raw mut bkts as *mut bucketT)).size = 1 as ::core::ffi::c_long;
(*(&raw mut bkts as *mut bucketT)).minind = 0 as ::core::ffi::c_long;
(*(&raw mut bkts as *mut bucketT)).maxind = 0 as ::core::ffi::c_long;
(*(&raw mut bkts as *mut bucketT)).wrapped = FALSE as ::core::ffi::c_schar;
let ref mut fresh19 = (*(&raw mut bkts as *mut bucketT)).bucketbase;
*fresh19 = MAlloc(::core::mem::size_of::<*mut nodeT>() as size_t) as *mut *mut nodeT;
let ref mut fresh20 = (*(&raw mut bkts as *mut bucketT)).bucket;
*fresh20 = (*(&raw mut bkts as *mut bucketT)).bucketbase;
let ref mut fresh21 = *(*(&raw mut bkts as *mut bucketT))
.bucket
.offset(0 as ::core::ffi::c_int as isize);
*fresh21 = ::core::ptr::null_mut::<nodeT>();
regioncounter = 0 as ::core::ffi::c_long;
regionsizeslen = INITARRSIZE as ::core::ffi::c_long;
regionsizes = MAlloc(
(regionsizeslen as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_long>() as size_t),
) as *mut ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
(*(*nodes_0.offset(row as isize)).offset(col as isize)).incost =
-(1 as ::core::ffi::c_int);
col += 1;
}
row += 1;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if (*(*nodes_0.offset(row as isize)).offset(col as isize)).incost
< 0 as ::core::ffi::c_int
{
ClearBuckets(&raw mut bkts as *mut bucketT);
source = (*nodes_0.offset(row as isize)).offset(col as isize) as *mut nodeT;
(*source).next = ::core::ptr::null_mut::<nodeST>();
(*source).prev = ::core::ptr::null_mut::<nodeST>();
(*source).group = INBUCKET;
(*source).outcost = 0 as ::core::ffi::c_int;
let ref mut fresh22 = *(*(&raw mut bkts as *mut bucketT))
.bucket
.offset(0 as ::core::ffi::c_int as isize);
*fresh22 = source;
(*(&raw mut bkts as *mut bucketT)).curr = 0 as ::core::ffi::c_long;
regioncounter += 1;
if regioncounter >= regionsizeslen {
regionsizeslen += INITARRSIZE as ::core::ffi::c_long;
regionsizes = ReAlloc(
regionsizes as *mut ::core::ffi::c_void,
(regionsizeslen as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_long>() as size_t),
) as *mut ::core::ffi::c_long;
}
thisregionsize =
regionsizes.offset(regioncounter as isize) as *mut ::core::ffi::c_long;
*thisregionsize = 0 as ::core::ffi::c_long;
loop {
from = ClosestNode(&raw mut bkts as *mut bucketT);
if from.is_null() {
if *regionsizes.offset(regioncounter as isize) >= minsize {
break;
}
RenumberRegion(nodes_0, source, 0 as ::core::ffi::c_long, nrow, ncol);
regioncounter -= 1;
break;
} else {
(*from).incost = regioncounter as ::core::ffi::c_int;
*thisregionsize += 1;
arcnum = 0 as ::core::ffi::c_long;
loop {
to = RegionsNeighborNode(
from,
&raw mut arcnum,
nodes_0,
&raw mut arcrow,
&raw mut arccol,
nrow,
ncol,
);
if to.is_null() {
break;
}
if (*to).incost < 0 as ::core::ffi::c_int
&& (*(*incrcosts.offset(arcrow as isize)).offset(arccol as isize))
.negcost
as ::core::ffi::c_int
== 0 as ::core::ffi::c_int
&& (*to).group != INBUCKET
{
(*to).pred = from as *mut nodeST;
BucketInsert(
to,
0 as ::core::ffi::c_long,
&raw mut bkts as *mut bucketT,
);
}
}
}
}
}
col += 1;
}
row += 1;
}
fprintf(
sp2,
b"%ld connected components formed\n\0" as *const u8 as *const ::core::ffi::c_char,
regioncounter,
);
if regioncounter > maxncomps {
fprintf(
sp2,
b"Keeping only %ld connected components\n\0" as *const u8 as *const ::core::ffi::c_char,
maxncomps,
);
sortedregionsizes = MAlloc(
(regioncounter as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_long>() as size_t),
) as *mut ::core::ffi::c_long;
i = 0 as ::core::ffi::c_long;
while i < regioncounter {
*sortedregionsizes.offset(i as isize) =
*regionsizes.offset((i + 1 as ::core::ffi::c_long) as isize);
i += 1;
}
qsort(
sortedregionsizes as *mut ::core::ffi::c_void,
regioncounter as size_t,
::core::mem::size_of::<::core::ffi::c_long>() as size_t,
Some(
LongCompare
as unsafe extern "C" fn(
*const ::core::ffi::c_void,
*const ::core::ffi::c_void,
) -> ::core::ffi::c_int,
),
);
minsize = *sortedregionsizes.offset((regioncounter - maxncomps) as isize);
ntied = 0 as ::core::ffi::c_long;
i = regioncounter - maxncomps - 1 as ::core::ffi::c_long;
while i >= 0 as ::core::ffi::c_long && *sortedregionsizes.offset(i as isize) == minsize {
ntied += 1;
i -= 1;
}
newnum = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
i = (*(*nodes_0.offset(row as isize)).offset(col as isize)).incost
as ::core::ffi::c_long;
if i > 0 as ::core::ffi::c_long {
if *regionsizes.offset(i as isize) < minsize
|| *regionsizes.offset(i as isize) == minsize && {
let fresh23 = ntied;
ntied = ntied - 1;
fresh23 > 0 as ::core::ffi::c_long
}
{
RenumberRegion(
nodes_0,
(*nodes_0.offset(row as isize)).offset(col as isize) as *mut nodeT,
0 as ::core::ffi::c_long,
nrow,
ncol,
);
} else {
let fresh24 = newnum;
newnum = newnum - 1;
RenumberRegion(
nodes_0,
(*nodes_0.offset(row as isize)).offset(col as isize) as *mut nodeT,
fresh24,
nrow,
ncol,
);
}
}
col += 1;
}
row += 1;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
(*(*nodes_0.offset(row as isize)).offset(col as isize)).incost =
-(*(*nodes_0.offset(row as isize)).offset(col as isize)).incost;
col += 1;
}
row += 1;
}
}
ucharbuf = MAlloc(
(ncol as size_t).wrapping_mul(::core::mem::size_of::<::core::ffi::c_uchar>() as size_t),
) as *mut ::core::ffi::c_uchar;
uintbuf = MAlloc(
(ncol as size_t).wrapping_mul(::core::mem::size_of::<::core::ffi::c_uint>() as size_t),
) as *mut ::core::ffi::c_uint;
if (*params).conncompouttype == CONNCOMPOUTTYPEUCHAR {
outtypemax = UCHAR_MAX as ::core::ffi::c_ulong;
outtypesize = ::core::mem::size_of::<::core::ffi::c_uchar>() as ::core::ffi::c_int
as ::core::ffi::c_ulong;
outbufptr = ucharbuf as *mut ::core::ffi::c_void;
} else if (*params).conncompouttype == CONNCOMPOUTTYPEUINT {
outtypemax = UINT_MAX as ::core::ffi::c_ulong;
outtypesize = ::core::mem::size_of::<::core::ffi::c_uint>() as ::core::ffi::c_int
as ::core::ffi::c_ulong;
outbufptr = uintbuf as *mut ::core::ffi::c_void;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Bad conncompouttype in GrowConnCompMask()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
fprintf(
sp1,
b"Writing connected components to file %s as %d-byte unsigned ints\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
outtypesize as ::core::ffi::c_int,
);
conncompfp = OpenOutputFile(
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if (*(*nodes_0.offset(row as isize)).offset(col as isize)).incost
as ::core::ffi::c_ulong
> outtypemax
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Number of connected components too large for output type\nAbort\n\0"
as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
*uintbuf.offset(col as isize) = (*(*nodes_0.offset(row as isize)).offset(col as isize))
.incost as ::core::ffi::c_uint;
col += 1;
}
if (*params).conncompouttype == CONNCOMPOUTTYPEUCHAR {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*ucharbuf.offset(col as isize) =
*uintbuf.offset(col as isize) as ::core::ffi::c_uchar;
col += 1;
}
}
if fwrite(outbufptr, outtypesize as size_t, ncol as size_t, conncompfp)
!= ncol as ::core::ffi::c_ulong
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while writing to file %s (device full?)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
row += 1;
}
if fclose(conncompfp) != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: problem closing file %s (disk full?)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
);
}
Free2DArray(
nodes_0 as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
free((*(&raw mut bkts as *mut bucketT)).bucketbase as *mut ::core::ffi::c_void);
free(uintbuf as *mut ::core::ffi::c_void);
free(ucharbuf as *mut ::core::ffi::c_void);
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn ThickenCosts(
mut incrcosts: *mut *mut incrcostT,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_long {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut templong: ::core::ffi::c_long = 0;
let mut maxcost: ::core::ffi::c_long = 0;
let mut n_0: ::core::ffi::c_double = 0.;
maxcost = -LARGEINT as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol {
templong = (2 as ::core::ffi::c_int
* (*(*incrcosts.offset(row as isize)).offset(col as isize)).poscost
as ::core::ffi::c_int) as ::core::ffi::c_long;
n_0 = 2.0f64;
if col != 0 as ::core::ffi::c_long {
templong += (*(*incrcosts.offset(row as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize))
.poscost as ::core::ffi::c_long;
n_0 += 1.0f64;
}
if col != ncol - 1 as ::core::ffi::c_long {
templong += (*(*incrcosts.offset(row as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize))
.poscost as ::core::ffi::c_long;
n_0 += 1.0f64;
}
templong = LRound(templong as ::core::ffi::c_double / n_0);
if templong > LARGESHORT as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: COSTS CLIPPED IN ThickenCosts()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
(*(*incrcosts.offset(row as isize)).offset(col as isize)).negcost =
LARGESHORT as ::core::ffi::c_short;
} else {
(*(*incrcosts.offset(row as isize)).offset(col as isize)).negcost =
templong as ::core::ffi::c_short;
}
if (*(*incrcosts.offset(row as isize)).offset(col as isize)).negcost
as ::core::ffi::c_long
> maxcost
{
maxcost = (*(*incrcosts.offset(row as isize)).offset(col as isize)).negcost
as ::core::ffi::c_long;
}
col += 1;
}
row += 1;
}
row = nrow - 1 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
templong = (2 as ::core::ffi::c_int
* (*(*incrcosts.offset(row as isize)).offset(col as isize)).poscost
as ::core::ffi::c_int) as ::core::ffi::c_long;
n_0 = 2.0f64;
if row != nrow - 1 as ::core::ffi::c_long {
templong += (*(*incrcosts.offset((row - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.poscost as ::core::ffi::c_long;
n_0 += 1.0f64;
}
if row != 2 as ::core::ffi::c_long * nrow - 2 as ::core::ffi::c_long {
templong += (*(*incrcosts.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.poscost as ::core::ffi::c_long;
n_0 += 1.0f64;
}
templong = LRound(templong as ::core::ffi::c_double / n_0);
if templong > LARGESHORT as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: COSTS CLIPPED IN ThickenCosts()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
(*(*incrcosts.offset(row as isize)).offset(col as isize)).negcost =
LARGESHORT as ::core::ffi::c_short;
} else {
(*(*incrcosts.offset(row as isize)).offset(col as isize)).negcost =
templong as ::core::ffi::c_short;
}
if (*(*incrcosts.offset(row as isize)).offset(col as isize)).negcost
as ::core::ffi::c_long
> maxcost
{
maxcost = (*(*incrcosts.offset(row as isize)).offset(col as isize)).negcost
as ::core::ffi::c_long;
}
col += 1;
}
row += 1;
}
return maxcost;
}
unsafe extern "C" fn RegionsNeighborNode(
mut node1: *mut nodeT,
mut arcnumptr: *mut ::core::ffi::c_long,
mut nodes_0: *mut *mut nodeT,
mut arcrowptr: *mut ::core::ffi::c_long,
mut arccolptr: *mut ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> *mut nodeT {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = (*node1).row as ::core::ffi::c_long;
col = (*node1).col as ::core::ffi::c_long;
loop {
let fresh10 = *arcnumptr;
*arcnumptr = *arcnumptr + 1;
match fresh10 {
0 => {
if col != ncol - 1 as ::core::ffi::c_long {
*arcrowptr = nrow - 1 as ::core::ffi::c_long + row;
*arccolptr = col;
return (*nodes_0.offset(row as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
as *mut nodeT;
}
}
1 => {
if row != nrow - 1 as ::core::ffi::c_long {
*arcrowptr = row;
*arccolptr = col;
return (*nodes_0.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize) as *mut nodeT;
}
}
2 => {
if col != 0 as ::core::ffi::c_long {
*arcrowptr = nrow - 1 as ::core::ffi::c_long + row;
*arccolptr = col - 1 as ::core::ffi::c_long;
return (*nodes_0.offset(row as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize)
as *mut nodeT;
}
}
3 => {
if row != 0 as ::core::ffi::c_long {
*arcrowptr = row - 1 as ::core::ffi::c_long;
*arccolptr = col;
return (*nodes_0.offset((row - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize) as *mut nodeT;
}
}
_ => return ::core::ptr::null_mut::<nodeT>(),
}
}
}
unsafe extern "C" fn ClearBuckets(mut bkts: *mut bucketT) -> ::core::ffi::c_int {
let mut currentnode: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut nextnode: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut i: ::core::ffi::c_long = 0;
i = 0 as ::core::ffi::c_long;
while i < (*bkts).size {
nextnode = *(*bkts).bucketbase.offset(i as isize);
while !nextnode.is_null() {
currentnode = nextnode;
nextnode = (*currentnode).next as *mut nodeT;
(*currentnode).group = NOTINBUCKET;
(*currentnode).outcost = VERYFAR;
(*currentnode).pred = ::core::ptr::null_mut::<nodeST>();
}
let ref mut fresh15 = *(*bkts).bucketbase.offset(i as isize);
*fresh15 = ::core::ptr::null_mut::<nodeT>();
i += 1;
}
(*bkts).minind = 0 as ::core::ffi::c_long;
(*bkts).maxind = (*bkts).size - 1 as ::core::ffi::c_long;
(*bkts).wrapped = FALSE as ::core::ffi::c_schar;
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn MergeRegions(
mut nodes_0: *mut *mut nodeT,
mut source: *mut nodeT,
mut regionsizes: *mut ::core::ffi::c_long,
mut closestregion: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut nextnodelistlen: ::core::ffi::c_long = 0;
let mut nextnodelistnext: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut regionnum: ::core::ffi::c_long = 0;
let mut from: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut nextnodelist: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
nextnodelistlen = INITARRSIZE as ::core::ffi::c_long;
nextnodelist = MAlloc(
(nextnodelistlen as size_t)
.wrapping_mul(::core::mem::size_of::<*mut *mut nodeT>() as size_t),
) as *mut *mut nodeT;
let ref mut fresh11 = *nextnodelist.offset(0 as ::core::ffi::c_int as isize);
*fresh11 = source;
nextnodelistnext = 1 as ::core::ffi::c_long;
regionnum = (*source).incost as ::core::ffi::c_long;
while nextnodelistnext != 0 {
nextnodelistnext -= 1;
from = *nextnodelist.offset(nextnodelistnext as isize);
(*from).incost = closestregion as ::core::ffi::c_int;
arcnum = 0 as ::core::ffi::c_long;
loop {
to = RegionsNeighborNode(
from,
&raw mut arcnum,
nodes_0,
&raw mut arcrow,
&raw mut arccol,
nrow,
ncol,
);
if to.is_null() {
break;
}
if (*to).incost as ::core::ffi::c_long == regionnum {
if nextnodelistnext >= nextnodelistlen {
nextnodelistlen += INITARRSIZE as ::core::ffi::c_long;
nextnodelist = ReAlloc(
nextnodelist as *mut ::core::ffi::c_void,
(nextnodelistlen as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
}
let fresh12 = nextnodelistnext;
nextnodelistnext = nextnodelistnext + 1;
let ref mut fresh13 = *nextnodelist.offset(fresh12 as isize);
*fresh13 = to;
}
}
}
*regionsizes.offset(closestregion as isize) += *regionsizes.offset(regionnum as isize);
free(nextnodelist as *mut ::core::ffi::c_void);
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn RenumberRegion(
mut nodes_0: *mut *mut nodeT,
mut source: *mut nodeT,
mut newnum: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut nextnodelistlen: ::core::ffi::c_long = 0;
let mut nextnodelistnext: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut arcrow: ::core::ffi::c_long = 0;
let mut arccol: ::core::ffi::c_long = 0;
let mut regionnum: ::core::ffi::c_long = 0;
let mut from: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut nextnodelist: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
nextnodelistlen = INITARRSIZE as ::core::ffi::c_long;
nextnodelist = MAlloc(
(nextnodelistlen as size_t)
.wrapping_mul(::core::mem::size_of::<*mut *mut nodeT>() as size_t),
) as *mut *mut nodeT;
let ref mut fresh25 = *nextnodelist.offset(0 as ::core::ffi::c_int as isize);
*fresh25 = source;
nextnodelistnext = 1 as ::core::ffi::c_long;
regionnum = (*source).incost as ::core::ffi::c_long;
while nextnodelistnext != 0 {
nextnodelistnext -= 1;
from = *nextnodelist.offset(nextnodelistnext as isize);
(*from).incost = newnum as ::core::ffi::c_int;
arcnum = 0 as ::core::ffi::c_long;
loop {
to = RegionsNeighborNode(
from,
&raw mut arcnum,
nodes_0,
&raw mut arcrow,
&raw mut arccol,
nrow,
ncol,
);
if to.is_null() {
break;
}
if (*to).incost as ::core::ffi::c_long == regionnum {
if nextnodelistnext >= nextnodelistlen {
nextnodelistlen += INITARRSIZE as ::core::ffi::c_long;
nextnodelist = ReAlloc(
nextnodelist as *mut ::core::ffi::c_void,
(nextnodelistlen as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
}
let fresh26 = nextnodelistnext;
nextnodelistnext = nextnodelistnext + 1;
let ref mut fresh27 = *nextnodelist.offset(fresh26 as isize);
*fresh27 = to;
}
}
}
free(nextnodelist as *mut ::core::ffi::c_void);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn AssembleTiles(
mut outfiles: *mut outfileT,
mut params: *mut paramT,
mut nlines: ::core::ffi::c_long,
mut linelen: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut tilerow: ::core::ffi::c_long = 0;
let mut tilecol: ::core::ffi::c_long = 0;
let mut ntilerow: ::core::ffi::c_long = 0;
let mut ntilecol: ::core::ffi::c_long = 0;
let mut ntiles: ::core::ffi::c_long = 0;
let mut rowovrlp: ::core::ffi::c_long = 0;
let mut colovrlp: ::core::ffi::c_long = 0;
let mut i: ::core::ffi::c_long = 0;
let mut j: ::core::ffi::c_long = 0;
let mut k: ::core::ffi::c_long = 0;
let mut ni: ::core::ffi::c_long = 0;
let mut nj: ::core::ffi::c_long = 0;
let mut dummylong: ::core::ffi::c_long = 0;
let mut costtypesize: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut prevnrow: ::core::ffi::c_long = 0;
let mut prevncol: ::core::ffi::c_long = 0;
let mut nextnrow: ::core::ffi::c_long = 0;
let mut nextncol: ::core::ffi::c_long = 0;
let mut n_0: ::core::ffi::c_long = 0;
let mut ncycle: ::core::ffi::c_long = 0;
let mut nflowdone: ::core::ffi::c_long = 0;
let mut nflow: ::core::ffi::c_long = 0;
let mut candidatelistsize: ::core::ffi::c_long = 0;
let mut candidatebagsize: ::core::ffi::c_long = 0;
let mut nnodes: ::core::ffi::c_long = 0;
let mut maxnflowcycles: ::core::ffi::c_long = 0;
let mut arclen: ::core::ffi::c_long = 0;
let mut narcs: ::core::ffi::c_long = 0;
let mut sourcetilenum: ::core::ffi::c_long = 0;
let mut flowmax: ::core::ffi::c_long = 0;
let mut nnondecreasedcostiter: ::core::ffi::c_long = 0;
let mut totarclens: *mut ::core::ffi::c_long = ::core::ptr::null_mut::<::core::ffi::c_long>();
let mut scndrycosts: *mut *mut *mut ::core::ffi::c_long =
::core::ptr::null_mut::<*mut *mut ::core::ffi::c_long>();
let mut avgarclen: ::core::ffi::c_double = 0.;
let mut unwphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut nextunwphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut lastunwphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut tempunwphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut unwphaseabove: *mut ::core::ffi::c_float =
::core::ptr::null_mut::<::core::ffi::c_float>();
let mut unwphasebelow: *mut ::core::ffi::c_float =
::core::ptr::null_mut::<::core::ffi::c_float>();
let mut costs: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut nextcosts: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut lastcosts: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut tempcosts: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut costsabove: *mut ::core::ffi::c_void = ::core::ptr::null_mut::<::core::ffi::c_void>();
let mut costsbelow: *mut ::core::ffi::c_void = ::core::ptr::null_mut::<::core::ffi::c_void>();
let mut scndryflows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut bulkoffsets: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut regions: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut nextregions: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut lastregions: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut tempregions: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut regionsbelow: *mut ::core::ffi::c_short =
::core::ptr::null_mut::<::core::ffi::c_short>();
let mut regionsabove: *mut ::core::ffi::c_short =
::core::ptr::null_mut::<::core::ffi::c_short>();
let mut nscndrynodes: *mut ::core::ffi::c_int = ::core::ptr::null_mut::<::core::ffi::c_int>();
let mut nscndryarcs: *mut ::core::ffi::c_int = ::core::ptr::null_mut::<::core::ffi::c_int>();
let mut incrcosts: *mut *mut incrcostT = ::core::ptr::null_mut::<*mut incrcostT>();
let mut totalcost: totalcostT = 0.;
let mut oldtotalcost: totalcostT = 0.;
let mut mintotalcost: totalcostT = 0.;
let mut source: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut scndrynodes: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
let mut scndryapexes: *mut *mut *mut nodeT = ::core::ptr::null_mut::<*mut *mut nodeT>();
let mut iscandidate: *mut *mut ::core::ffi::c_schar =
::core::ptr::null_mut::<*mut ::core::ffi::c_schar>();
let mut notfirstloop: ::core::ffi::c_schar = 0;
let mut candidatebag: *mut candidateT = ::core::ptr::null_mut::<candidateT>();
let mut candidatelist: *mut candidateT = ::core::ptr::null_mut::<candidateT>();
let mut nodesupp: *mut *mut nodesuppT = ::core::ptr::null_mut::<*mut nodesuppT>();
let mut scndryarcs: *mut *mut scndryarcT = ::core::ptr::null_mut::<*mut scndryarcT>();
let mut bkts: *mut bucketT = ::core::ptr::null_mut::<bucketT>();
let mut filename: [::core::ffi::c_char; 512] = [0; 512];
fprintf(
sp1,
b"Assembling tiles\n\0" as *const u8 as *const ::core::ffi::c_char,
);
ntilerow = (*params).ntilerow;
ntilecol = (*params).ntilecol;
ntiles = ntilerow * ntilecol;
rowovrlp = (*params).rowovrlp;
colovrlp = (*params).colovrlp;
ni = ceil(
(nlines + (ntilerow - 1 as ::core::ffi::c_long) * rowovrlp) as ::core::ffi::c_double
/ ntilerow as ::core::ffi::c_double,
) as ::core::ffi::c_long;
nj = ceil(
(linelen + (ntilecol - 1 as ::core::ffi::c_long) * colovrlp) as ::core::ffi::c_double
/ ntilecol as ::core::ffi::c_double,
) as ::core::ffi::c_long;
nrow = 0 as ::core::ffi::c_long;
ncol = 0 as ::core::ffi::c_long;
flowmax = (*params).scndryarcflowmax;
prevnrow = 0 as ::core::ffi::c_long;
if (*params).costmode as ::core::ffi::c_int == TOPO {
costtypesize = ::core::mem::size_of::<costT>() as ::core::ffi::c_long;
CalcCost = Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else if (*params).costmode as ::core::ffi::c_int == DEFO {
costtypesize = ::core::mem::size_of::<costT>() as ::core::ffi::c_long;
CalcCost = Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else if (*params).costmode as ::core::ffi::c_int == SMOOTH {
costtypesize = ::core::mem::size_of::<smoothcostT>() as ::core::ffi::c_long;
CalcCost = Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal cost mode in AssembleTiles(). Abort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
regions = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
nextregions = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
lastregions = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
regionsbelow = MAlloc(
(nj as size_t).wrapping_mul(::core::mem::size_of::<::core::ffi::c_short>() as size_t),
) as *mut ::core::ffi::c_short;
regionsabove = MAlloc(
(nj as size_t).wrapping_mul(::core::mem::size_of::<::core::ffi::c_short>() as size_t),
) as *mut ::core::ffi::c_short;
unwphase = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
nextunwphase = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
lastunwphase = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
unwphaseabove = MAlloc(
(nj as size_t).wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as size_t),
) as *mut ::core::ffi::c_float;
unwphasebelow = MAlloc(
(nj as size_t).wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as size_t),
) as *mut ::core::ffi::c_float;
scndrynodes =
MAlloc((ntiles as size_t).wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t))
as *mut *mut nodeT;
nodesupp =
MAlloc((ntiles as size_t).wrapping_mul(::core::mem::size_of::<*mut nodesuppT>() as size_t))
as *mut *mut nodesuppT;
scndryarcs = MAlloc(
(ntiles as size_t).wrapping_mul(::core::mem::size_of::<*mut scndryarcT>() as size_t),
) as *mut *mut scndryarcT;
scndrycosts = MAlloc(
(ntiles as size_t)
.wrapping_mul(::core::mem::size_of::<*mut *mut ::core::ffi::c_long>() as size_t),
) as *mut *mut *mut ::core::ffi::c_long;
nscndrynodes = MAlloc(
(ntiles as size_t).wrapping_mul(::core::mem::size_of::<::core::ffi::c_int>() as size_t),
) as *mut ::core::ffi::c_int;
nscndryarcs = MAlloc(
(ntiles as size_t).wrapping_mul(::core::mem::size_of::<::core::ffi::c_int>() as size_t),
) as *mut ::core::ffi::c_int;
totarclens = MAlloc(
(ntiles as size_t).wrapping_mul(::core::mem::size_of::<::core::ffi::c_long>() as size_t),
) as *mut ::core::ffi::c_long;
bulkoffsets = Get2DMem(
ntilerow as ::core::ffi::c_int,
ntilecol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
costs = Get2DRowColMem(
ni + 2 as ::core::ffi::c_long,
nj + 2 as ::core::ffi::c_long,
::core::mem::size_of::<*mut ::core::ffi::c_void>() as ::core::ffi::c_int,
costtypesize as size_t,
);
nextcosts = Get2DRowColMem(
ni + 2 as ::core::ffi::c_long,
nj + 2 as ::core::ffi::c_long,
::core::mem::size_of::<*mut ::core::ffi::c_void>() as ::core::ffi::c_int,
costtypesize as size_t,
);
lastcosts = Get2DRowColMem(
ni + 2 as ::core::ffi::c_long,
nj + 2 as ::core::ffi::c_long,
::core::mem::size_of::<*mut ::core::ffi::c_void>() as ::core::ffi::c_int,
costtypesize as size_t,
);
costsabove = MAlloc((nj * costtypesize) as size_t);
costsbelow = MAlloc((nj * costtypesize) as size_t);
*(*bulkoffsets.offset(0 as ::core::ffi::c_int as isize))
.offset(0 as ::core::ffi::c_int as isize) = 0 as ::core::ffi::c_short;
tilerow = 0 as ::core::ffi::c_long;
while tilerow < ntilerow {
tilecol = 0 as ::core::ffi::c_long;
while tilecol < ntilecol {
if tilecol == 0 as ::core::ffi::c_long {
ReadNextRegion(
tilerow,
0 as ::core::ffi::c_long,
nlines,
linelen,
outfiles,
params,
&raw mut nextregions,
&raw mut nextunwphase,
&raw mut nextcosts,
&raw mut nextnrow,
&raw mut nextncol,
);
prevnrow = nrow;
nrow = nextnrow;
}
prevncol = ncol;
ncol = nextncol;
tempregions = lastregions;
lastregions = regions;
regions = nextregions;
nextregions = tempregions;
tempunwphase = lastunwphase;
lastunwphase = unwphase;
unwphase = nextunwphase;
nextunwphase = tempunwphase;
tempcosts = lastcosts;
lastcosts = costs;
costs = nextcosts;
nextcosts = tempcosts;
if tilecol != ntilecol - 1 as ::core::ffi::c_long {
ReadNextRegion(
tilerow,
tilecol + 1 as ::core::ffi::c_long,
nlines,
linelen,
outfiles,
params,
&raw mut nextregions,
&raw mut nextunwphase,
&raw mut nextcosts,
&raw mut nextnrow,
&raw mut nextncol,
);
}
ReadEdgesAboveAndBelow(
tilerow,
tilecol,
nlines,
linelen,
params,
outfiles,
regionsabove,
regionsbelow,
unwphaseabove,
unwphasebelow,
costsabove,
costsbelow,
);
TraceRegions(
regions,
nextregions,
lastregions,
regionsabove,
regionsbelow,
unwphase,
nextunwphase,
lastunwphase,
unwphaseabove,
unwphasebelow,
costs,
nextcosts,
lastcosts,
costsabove,
costsbelow,
prevnrow,
prevncol,
tilerow,
tilecol,
nrow,
ncol,
scndrynodes,
nodesupp,
scndryarcs,
scndrycosts,
nscndrynodes,
nscndryarcs,
totarclens,
bulkoffsets,
params,
);
tilecol += 1;
}
tilerow += 1;
}
arclen = 0 as ::core::ffi::c_long;
narcs = 0 as ::core::ffi::c_long;
i = 0 as ::core::ffi::c_long;
while i < ntiles {
arclen += *totarclens.offset(i as isize);
narcs += *nscndryarcs.offset(i as isize) as ::core::ffi::c_long;
i += 1;
}
avgarclen = (arclen / narcs) as ::core::ffi::c_double;
i = 0 as ::core::ffi::c_long;
while i < ntiles {
j = 0 as ::core::ffi::c_long;
while j < *nscndryarcs.offset(i as isize) as ::core::ffi::c_long {
if *(*(*scndrycosts.offset(i as isize)).offset(j as isize))
.offset((2 as ::core::ffi::c_long * flowmax + 1 as ::core::ffi::c_long) as isize)
!= -LARGEINT as ::core::ffi::c_long
{
k = 1 as ::core::ffi::c_long;
while k <= 2 as ::core::ffi::c_long * flowmax {
*(*(*scndrycosts.offset(i as isize)).offset(j as isize)).offset(k as isize) =
ceil(
*(*(*scndrycosts.offset(i as isize)).offset(j as isize))
.offset(k as isize)
as ::core::ffi::c_double
/ avgarclen,
) as ::core::ffi::c_long;
k += 1;
}
*(*(*scndrycosts.offset(i as isize)).offset(j as isize)).offset(
(2 as ::core::ffi::c_long * flowmax + 1 as ::core::ffi::c_long) as isize,
) = LRound(
*(*(*scndrycosts.offset(i as isize)).offset(j as isize)).offset(
(2 as ::core::ffi::c_long * flowmax + 1 as ::core::ffi::c_long) as isize,
) as ::core::ffi::c_double
/ avgarclen,
);
if *(*(*scndrycosts.offset(i as isize)).offset(j as isize)).offset(
(2 as ::core::ffi::c_long * flowmax + 1 as ::core::ffi::c_long) as isize,
) < 0 as ::core::ffi::c_long
{
*(*(*scndrycosts.offset(i as isize)).offset(j as isize)).offset(
(2 as ::core::ffi::c_long * flowmax + 1 as ::core::ffi::c_long) as isize,
) = 0 as ::core::ffi::c_long;
}
}
j += 1;
}
i += 1;
}
Free2DArray(
regions as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
nextregions as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
lastregions as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
unwphase as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
nextunwphase as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
lastunwphase as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(costs, ni as ::core::ffi::c_uint);
Free2DArray(nextcosts, ni as ::core::ffi::c_uint);
Free2DArray(lastcosts, ni as ::core::ffi::c_uint);
free(costsabove);
free(costsbelow);
free(unwphaseabove as *mut ::core::ffi::c_void);
free(unwphasebelow as *mut ::core::ffi::c_void);
free(regionsabove as *mut ::core::ffi::c_void);
free(regionsbelow as *mut ::core::ffi::c_void);
scndryflows = MAlloc(
(ntiles as size_t)
.wrapping_mul(::core::mem::size_of::<*mut ::core::ffi::c_short>() as size_t),
) as *mut *mut ::core::ffi::c_short;
iscandidate = MAlloc(
(ntiles as size_t)
.wrapping_mul(::core::mem::size_of::<*mut ::core::ffi::c_schar>() as size_t),
) as *mut *mut ::core::ffi::c_schar;
scndryapexes = MAlloc(
(ntiles as size_t).wrapping_mul(::core::mem::size_of::<*mut *mut nodeT>() as size_t),
) as *mut *mut *mut nodeT;
incrcosts =
MAlloc((ntiles as size_t).wrapping_mul(::core::mem::size_of::<*mut incrcostT>() as size_t))
as *mut *mut incrcostT;
nnodes = 0 as ::core::ffi::c_long;
i = 0 as ::core::ffi::c_long;
while i < ntiles {
let ref mut fresh28 = *scndryflows.offset(i as isize);
*fresh28 = CAlloc(
*nscndryarcs.offset(i as isize) as size_t,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut ::core::ffi::c_short;
let ref mut fresh29 = *iscandidate.offset(i as isize);
*fresh29 = MAlloc(
(*nscndryarcs.offset(i as isize) as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_schar>() as size_t),
) as *mut ::core::ffi::c_schar;
let ref mut fresh30 = *scndryapexes.offset(i as isize);
*fresh30 = MAlloc(
(*nscndryarcs.offset(i as isize) as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
let ref mut fresh31 = *incrcosts.offset(i as isize);
*fresh31 = MAlloc(
(*nscndryarcs.offset(i as isize) as size_t)
.wrapping_mul(::core::mem::size_of::<incrcostT>() as size_t),
) as *mut incrcostT;
nnodes += *nscndrynodes.offset(i as isize) as ::core::ffi::c_long;
i += 1;
}
InitNetwork(
scndryflows,
&raw mut dummylong,
&raw mut ncycle,
&raw mut nflowdone,
&raw mut dummylong,
&raw mut nflow,
&raw mut candidatebagsize,
&raw mut candidatebag,
&raw mut candidatelistsize,
&raw mut candidatelist,
::core::ptr::null_mut::<*mut *mut ::core::ffi::c_schar>(),
::core::ptr::null_mut::<*mut *mut *mut nodeT>(),
&raw mut bkts,
&raw mut dummylong,
::core::ptr::null_mut::<*mut *mut incrcostT>(),
::core::ptr::null_mut::<*mut *mut nodeT>(),
::core::ptr::null_mut::<nodeT>(),
::core::ptr::null_mut::<::core::ffi::c_long>(),
::core::ptr::null_mut::<*mut ::core::ffi::c_int>(),
::core::ptr::null_mut::<::core::ffi::c_long>(),
::core::ptr::null_mut::<*mut ::core::ffi::c_int>(),
ntiles,
0 as ::core::ffi::c_long,
&raw mut notfirstloop,
&raw mut totalcost,
params,
);
oldtotalcost = totalcost;
mintotalcost = totalcost;
nnondecreasedcostiter = 0 as ::core::ffi::c_long;
CalcCost = Some(
CalcCostNonGrid
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
>;
EvalCost = Some(
EvalCostNonGrid
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
)
as Option<
unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
*mut *mut ::core::ffi::c_short,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
) -> ::core::ffi::c_long,
>;
SetNonGridNetworkFunctionPointers();
fprintf(
sp1,
b"Running optimizer for secondary network\n\0" as *const u8 as *const ::core::ffi::c_char,
);
fprintf(
sp1,
b"Number of nodes in secondary network: %ld\n\0" as *const u8 as *const ::core::ffi::c_char,
nnodes,
);
maxnflowcycles = LRound(nnodes as ::core::ffi::c_double * (*params).maxcyclefraction);
loop {
fprintf(
sp1,
b"Flow increment: %ld (Total improvements: %ld)\n\0" as *const u8
as *const ::core::ffi::c_char,
nflow,
ncycle,
);
SetupIncrFlowCosts(
scndrycosts as *mut *mut ::core::ffi::c_void,
incrcosts,
scndryflows,
nflow,
ntiles,
ntiles,
nscndryarcs,
params,
);
sourcetilenum = (ntilecol as ::core::ffi::c_double
* floor(ntilerow as ::core::ffi::c_double / 2.0f64)
+ floor(ntilecol as ::core::ffi::c_double / 2.0f64))
as ::core::ffi::c_long;
source = (*scndrynodes.offset(sourcetilenum as isize))
.offset(0 as ::core::ffi::c_int as isize) as *mut nodeT;
SetupTreeSolveNetwork(
scndrynodes,
::core::ptr::null_mut::<nodeT>(),
scndryapexes,
iscandidate,
ntiles,
nscndrynodes,
ntiles,
nscndryarcs,
ntiles,
0 as ::core::ffi::c_long,
);
n_0 = TreeSolve(
scndrynodes,
nodesupp,
::core::ptr::null_mut::<nodeT>(),
source,
&raw mut candidatelist,
&raw mut candidatebag,
&raw mut candidatelistsize,
&raw mut candidatebagsize,
bkts,
scndryflows,
scndrycosts as *mut *mut ::core::ffi::c_void,
incrcosts,
scndryapexes,
iscandidate,
0 as ::core::ffi::c_long,
nflow,
::core::ptr::null_mut::<*mut ::core::ffi::c_float>(),
::core::ptr::null_mut::<*mut ::core::ffi::c_float>(),
::core::ptr::null_mut::<::core::ffi::c_char>(),
ntiles,
nscndrynodes,
ntiles,
nscndryarcs,
ntiles,
0 as ::core::ffi::c_long,
::core::ptr::null_mut::<outfileT>(),
nnodes,
params,
);
if notfirstloop != 0 {
oldtotalcost = totalcost;
totalcost = EvaluateTotalCost(
scndrycosts as *mut *mut ::core::ffi::c_void,
scndryflows,
ntiles,
0 as ::core::ffi::c_long,
nscndryarcs,
params,
);
if totalcost < mintotalcost {
mintotalcost = totalcost;
}
if totalcost > oldtotalcost
|| n_0 > 0 as ::core::ffi::c_long && totalcost == oldtotalcost
{
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp1,
b"Caution: Unexpected increase in total cost\n\0" as *const u8
as *const ::core::ffi::c_char,
);
}
if totalcost >= mintotalcost {
nnondecreasedcostiter += 1;
} else {
nnondecreasedcostiter = 0 as ::core::ffi::c_long;
}
}
ncycle += n_0;
if n_0 <= maxnflowcycles {
nflowdone += 1;
} else {
nflowdone = 1 as ::core::ffi::c_long;
}
if nnondecreasedcostiter >= 2 as ::core::ffi::c_long * (*params).maxflow {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: No overall cost reduction for too many iterations. Breaking loop\n\0"
as *const u8 as *const ::core::ffi::c_char,
);
break;
} else {
if nflowdone >= (*params).maxflow {
break;
}
nflow += 1;
if nflow > (*params).maxflow {
nflow = 1 as ::core::ffi::c_long;
notfirstloop = TRUE as ::core::ffi::c_schar;
}
}
}
i = 0 as ::core::ffi::c_long;
while i < ntiles {
j = 0 as ::core::ffi::c_long;
while j < *nscndryarcs.offset(i as isize) as ::core::ffi::c_long {
free(*(*scndrycosts.offset(i as isize)).offset(j as isize) as *mut ::core::ffi::c_void);
j += 1;
}
i += 1;
}
Free2DArray(
scndrycosts as *mut *mut ::core::ffi::c_void,
ntiles as ::core::ffi::c_uint,
);
Free2DArray(
scndryapexes as *mut *mut ::core::ffi::c_void,
ntiles as ::core::ffi::c_uint,
);
Free2DArray(
iscandidate as *mut *mut ::core::ffi::c_void,
ntiles as ::core::ffi::c_uint,
);
Free2DArray(
incrcosts as *mut *mut ::core::ffi::c_void,
ntiles as ::core::ffi::c_uint,
);
free(candidatebag as *mut ::core::ffi::c_void);
free(candidatelist as *mut ::core::ffi::c_void);
free((*bkts).bucketbase as *mut ::core::ffi::c_void);
if strlen(&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char) != 0 {
AssembleTileConnComps(linelen, nlines, outfiles, params);
}
IntegrateSecondaryFlows(
linelen,
nlines,
scndrynodes,
nodesupp,
scndryarcs,
nscndryarcs,
scndryflows,
bulkoffsets,
outfiles,
params,
);
i = 0 as ::core::ffi::c_long;
while i < ntiles {
j = 0 as ::core::ffi::c_long;
while j < *nscndrynodes.offset(i as isize) as ::core::ffi::c_long {
free(
(*(*nodesupp.offset(i as isize)).offset(j as isize)).neighbornodes
as *mut ::core::ffi::c_void,
);
free(
(*(*nodesupp.offset(i as isize)).offset(j as isize)).outarcs
as *mut ::core::ffi::c_void,
);
j += 1;
}
i += 1;
}
Free2DArray(
nodesupp as *mut *mut ::core::ffi::c_void,
ntiles as ::core::ffi::c_uint,
);
Free2DArray(
scndrynodes as *mut *mut ::core::ffi::c_void,
ntiles as ::core::ffi::c_uint,
);
Free2DArray(
scndryarcs as *mut *mut ::core::ffi::c_void,
ntiles as ::core::ffi::c_uint,
);
Free2DArray(
scndryflows as *mut *mut ::core::ffi::c_void,
ntiles as ::core::ffi::c_uint,
);
free(nscndrynodes as *mut ::core::ffi::c_void);
free(nscndryarcs as *mut ::core::ffi::c_void);
Free2DArray(
bulkoffsets as *mut *mut ::core::ffi::c_void,
ntilerow as ::core::ffi::c_uint,
);
if (*params).rmtmptile != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp1,
b"Removing temporary directory %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
);
tilerow = 0 as ::core::ffi::c_long;
while tilerow < ntilerow {
tilecol = 0 as ::core::ffi::c_long;
while tilecol < ntilecol {
sprintf(
&raw mut filename as *mut ::core::ffi::c_char,
b"%s/%s%ld_%ld\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
LOGFILEROOT.as_ptr(),
tilerow,
tilecol,
);
unlink(&raw mut filename as *mut ::core::ffi::c_char);
tilecol += 1;
}
tilerow += 1;
}
rmdir(&raw mut (*params).tiledir as *mut ::core::ffi::c_char);
}
if (*params).rowovrlp < ni || (*params).colovrlp < nj {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp1,
b"SUGGESTION: Try increasing tile overlap and/or size if solution has edge artifacts\n\0"
as *const u8 as *const ::core::ffi::c_char,
);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn ReadNextRegion(
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut linelen: ::core::ffi::c_long,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
mut nextregionsptr: *mut *mut *mut ::core::ffi::c_short,
mut nextunwphaseptr: *mut *mut *mut ::core::ffi::c_float,
mut nextcostsptr: *mut *mut *mut ::core::ffi::c_void,
mut nextnrowptr: *mut ::core::ffi::c_long,
mut nextncolptr: *mut ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut nexttilelinelen: ::core::ffi::c_long = 0;
let mut nexttilenlines: ::core::ffi::c_long = 0;
let mut costtypesize: ::core::ffi::c_long = 0;
let mut nexttileparams: [tileparamT; 1] = [tileparamST {
firstcol: 0,
ncol: 0,
firstrow: 0,
nrow: 0,
}; 1];
let mut nexttileoutfiles: [outfileT; 1] = [outfileST {
outfile: [0; 512],
initfile: [0; 512],
flowfile: [0; 512],
eifile: [0; 512],
rowcostfile: [0; 512],
colcostfile: [0; 512],
mstrowcostfile: [0; 512],
mstcolcostfile: [0; 512],
mstcostsfile: [0; 512],
corrdumpfile: [0; 512],
rawcorrdumpfile: [0; 512],
conncompfile: [0; 512],
costoutfile: [0; 512],
logfile: [0; 512],
outfileformat: 0,
}; 1];
let mut nextfile: [::core::ffi::c_char; 512] = [0; 512];
let mut tempstring: [::core::ffi::c_char; 1024] = [0; 1024];
let mut path: [::core::ffi::c_char; 512] = [0; 512];
let mut basename: [::core::ffi::c_char; 512] = [0; 512];
memset(
&raw mut nexttileparams as *mut tileparamT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<tileparamT>() as size_t,
);
memset(
&raw mut nexttileoutfiles as *mut outfileT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<outfileT>() as size_t,
);
memset(
&raw mut nextfile as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut tempstring as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut path as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut basename as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<costT>() as ::core::ffi::c_long;
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<smoothcostT>() as ::core::ffi::c_long;
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<::core::ffi::c_short>() as ::core::ffi::c_long;
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<bidircostT>() as ::core::ffi::c_long;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR: Bad CalcCost func ptr in ReadNextRegion()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
SetupTile(
nlines,
linelen,
params,
&raw mut nexttileparams as *mut tileparamT,
outfiles,
&raw mut nexttileoutfiles as *mut outfileT,
tilerow,
tilecol,
);
nexttilenlines = (*(&raw mut nexttileparams as *mut tileparamT)).nrow;
nexttilelinelen = (*(&raw mut nexttileparams as *mut tileparamT)).ncol;
SetTileReadParams(
&raw mut nexttileparams as *mut tileparamT,
nexttilenlines,
nexttilelinelen,
tilerow,
tilecol,
nlines,
linelen,
params,
);
ParseFilename(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld%s\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
nexttilelinelen,
REGIONSUFFIX.as_ptr(),
);
StrNCopy(
&raw mut nextfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
Read2DArray(
nextregionsptr as *mut *mut *mut ::core::ffi::c_void,
&raw mut nextfile as *mut ::core::ffi::c_char,
nexttilelinelen,
nexttilenlines,
&raw mut nexttileparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as size_t,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
if TMPTILEOUTFORMAT == ALT_LINE_DATA {
ReadAltLineFilePhase(
nextunwphaseptr,
&raw mut (*(&raw mut nexttileoutfiles as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
nexttilelinelen,
nexttilenlines,
&raw mut nexttileparams as *mut tileparamT,
);
} else if TMPTILEOUTFORMAT == FLOAT_DATA {
Read2DArray(
nextunwphaseptr as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*(&raw mut nexttileoutfiles as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
nexttilelinelen,
nexttilenlines,
&raw mut nexttileparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Cannot read format of unwrapped phase tile data\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
Read2DRowColFile(
nextcostsptr,
&raw mut (*(&raw mut nexttileoutfiles as *mut outfileT)).costoutfile
as *mut ::core::ffi::c_char,
nexttilelinelen,
nexttilenlines,
&raw mut nexttileparams as *mut tileparamT,
costtypesize as size_t,
);
FlipPhaseArraySign(
*nextunwphaseptr,
params,
(*(&raw mut nexttileparams as *mut tileparamT)).nrow,
(*(&raw mut nexttileparams as *mut tileparamT)).ncol,
);
*nextnrowptr = (*(&raw mut nexttileparams as *mut tileparamT)).nrow;
*nextncolptr = (*(&raw mut nexttileparams as *mut tileparamT)).ncol;
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn SetTileReadParams(
mut tileparams: *mut tileparamT,
mut nexttilenlines: ::core::ffi::c_long,
mut nexttilelinelen: ::core::ffi::c_long,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut linelen: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut rowovrlp: ::core::ffi::c_long = 0;
let mut colovrlp: ::core::ffi::c_long = 0;
rowovrlp = (*params).rowovrlp;
colovrlp = (*params).colovrlp;
if tilerow == 0 as ::core::ffi::c_long {
(*tileparams).firstrow = 0 as ::core::ffi::c_long;
} else {
(*tileparams).firstrow =
ceil(rowovrlp as ::core::ffi::c_double / 2.0f64) as ::core::ffi::c_long;
}
if tilerow != (*params).ntilerow - 1 as ::core::ffi::c_long {
(*tileparams).nrow = (nexttilenlines as ::core::ffi::c_double
- floor(rowovrlp as ::core::ffi::c_double / 2.0f64)
- (*tileparams).firstrow as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
(*tileparams).nrow = nexttilenlines - (*tileparams).firstrow;
}
if tilecol == 0 as ::core::ffi::c_long {
(*tileparams).firstcol = 0 as ::core::ffi::c_long;
} else {
(*tileparams).firstcol =
ceil(colovrlp as ::core::ffi::c_double / 2.0f64) as ::core::ffi::c_long;
}
if tilecol != (*params).ntilecol - 1 as ::core::ffi::c_long {
(*tileparams).ncol = (nexttilelinelen as ::core::ffi::c_double
- floor(colovrlp as ::core::ffi::c_double / 2.0f64)
- (*tileparams).firstcol as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
(*tileparams).ncol = nexttilelinelen - (*tileparams).firstcol;
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn ReadEdgesAboveAndBelow(
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut linelen: ::core::ffi::c_long,
mut params: *mut paramT,
mut outfiles: *mut outfileT,
mut regionsabove: *mut ::core::ffi::c_short,
mut regionsbelow: *mut ::core::ffi::c_short,
mut unwphaseabove: *mut ::core::ffi::c_float,
mut unwphasebelow: *mut ::core::ffi::c_float,
mut costsabove: *mut ::core::ffi::c_void,
mut costsbelow: *mut ::core::ffi::c_void,
) -> ::core::ffi::c_int {
let mut ni: ::core::ffi::c_long = 0;
let mut nj: ::core::ffi::c_long = 0;
let mut readtilelinelen: ::core::ffi::c_long = 0;
let mut readtilenlines: ::core::ffi::c_long = 0;
let mut costtypesize: ::core::ffi::c_long = 0;
let mut ntilerow: ::core::ffi::c_long = 0;
let mut ntilecol: ::core::ffi::c_long = 0;
let mut rowovrlp: ::core::ffi::c_long = 0;
let mut colovrlp: ::core::ffi::c_long = 0;
let mut tileparams: [tileparamT; 1] = [tileparamST {
firstcol: 0,
ncol: 0,
firstrow: 0,
nrow: 0,
}; 1];
let mut outfilesabove: [outfileT; 1] = [outfileST {
outfile: [0; 512],
initfile: [0; 512],
flowfile: [0; 512],
eifile: [0; 512],
rowcostfile: [0; 512],
colcostfile: [0; 512],
mstrowcostfile: [0; 512],
mstcolcostfile: [0; 512],
mstcostsfile: [0; 512],
corrdumpfile: [0; 512],
rawcorrdumpfile: [0; 512],
conncompfile: [0; 512],
costoutfile: [0; 512],
logfile: [0; 512],
outfileformat: 0,
}; 1];
let mut outfilesbelow: [outfileT; 1] = [outfileST {
outfile: [0; 512],
initfile: [0; 512],
flowfile: [0; 512],
eifile: [0; 512],
rowcostfile: [0; 512],
colcostfile: [0; 512],
mstrowcostfile: [0; 512],
mstcolcostfile: [0; 512],
mstcostsfile: [0; 512],
corrdumpfile: [0; 512],
rawcorrdumpfile: [0; 512],
conncompfile: [0; 512],
costoutfile: [0; 512],
logfile: [0; 512],
outfileformat: 0,
}; 1];
let mut unwphaseaboveptr: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut unwphasebelowptr: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut costsaboveptr: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut costsbelowptr: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut regionsaboveptr: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut regionsbelowptr: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut tempstring: [::core::ffi::c_char; 1024] = [0; 1024];
let mut readregionfile: [::core::ffi::c_char; 512] = [0; 512];
let mut path: [::core::ffi::c_char; 512] = [0; 512];
let mut basename: [::core::ffi::c_char; 512] = [0; 512];
memset(
&raw mut tileparams as *mut tileparamT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<tileparamT>() as size_t,
);
memset(
&raw mut outfilesabove as *mut outfileT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<outfileT>() as size_t,
);
memset(
&raw mut outfilesbelow as *mut outfileT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<outfileT>() as size_t,
);
memset(
&raw mut tempstring as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut readregionfile as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut path as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut basename as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
ntilerow = (*params).ntilerow;
ntilecol = (*params).ntilecol;
rowovrlp = (*params).rowovrlp;
colovrlp = (*params).colovrlp;
ni = ceil(
(nlines + (ntilerow - 1 as ::core::ffi::c_long) * rowovrlp) as ::core::ffi::c_double
/ ntilerow as ::core::ffi::c_double,
) as ::core::ffi::c_long;
nj = ceil(
(linelen + (ntilecol - 1 as ::core::ffi::c_long) * colovrlp) as ::core::ffi::c_double
/ ntilecol as ::core::ffi::c_double,
) as ::core::ffi::c_long;
if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<costT>() as ::core::ffi::c_long;
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<smoothcostT>() as ::core::ffi::c_long;
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<::core::ffi::c_short>() as ::core::ffi::c_long;
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<bidircostT>() as ::core::ffi::c_long;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR: Bad CalcCost func ptr in ReadEdgesAboveAndBelow()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
if tilerow != 0 as ::core::ffi::c_long {
SetupTile(
nlines,
linelen,
params,
&raw mut tileparams as *mut tileparamT,
outfiles,
&raw mut outfilesabove as *mut outfileT,
tilerow - 1 as ::core::ffi::c_long,
tilecol,
);
}
if tilerow != ntilerow - 1 as ::core::ffi::c_long {
SetupTile(
nlines,
linelen,
params,
&raw mut tileparams as *mut tileparamT,
outfiles,
&raw mut outfilesbelow as *mut outfileT,
tilerow + 1 as ::core::ffi::c_long,
tilecol,
);
}
unwphaseaboveptr = &raw mut unwphaseabove;
unwphasebelowptr = &raw mut unwphasebelow;
costsaboveptr = &raw mut costsabove;
costsbelowptr = &raw mut costsbelow;
regionsaboveptr = &raw mut regionsabove;
regionsbelowptr = &raw mut regionsbelow;
if tilecol == 0 as ::core::ffi::c_long {
(*(&raw mut tileparams as *mut tileparamT)).firstcol = 0 as ::core::ffi::c_long;
} else {
(*(&raw mut tileparams as *mut tileparamT)).firstcol =
ceil(colovrlp as ::core::ffi::c_double / 2.0f64) as ::core::ffi::c_long;
}
if tilecol != (*params).ntilecol - 1 as ::core::ffi::c_long {
readtilelinelen = nj;
(*(&raw mut tileparams as *mut tileparamT)).ncol = (readtilelinelen
as ::core::ffi::c_double
- floor(colovrlp as ::core::ffi::c_double / 2.0f64)
- (*(&raw mut tileparams as *mut tileparamT)).firstcol as ::core::ffi::c_double)
as ::core::ffi::c_long;
} else {
readtilelinelen = linelen - (ntilecol - 1 as ::core::ffi::c_long) * (nj - colovrlp);
(*(&raw mut tileparams as *mut tileparamT)).ncol =
readtilelinelen - (*(&raw mut tileparams as *mut tileparamT)).firstcol;
}
(*(&raw mut tileparams as *mut tileparamT)).nrow = 1 as ::core::ffi::c_long;
readtilenlines = ni;
if tilerow != 0 as ::core::ffi::c_long {
(*(&raw mut tileparams as *mut tileparamT)).firstrow = (readtilenlines
as ::core::ffi::c_double
- floor(rowovrlp as ::core::ffi::c_double / 2.0f64)
- 1 as ::core::ffi::c_int as ::core::ffi::c_double)
as ::core::ffi::c_long;
ParseFilename(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld%s\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow - 1 as ::core::ffi::c_long,
tilecol,
readtilelinelen,
REGIONSUFFIX.as_ptr(),
);
StrNCopy(
&raw mut readregionfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
Read2DArray(
&raw mut regionsaboveptr as *mut *mut *mut ::core::ffi::c_void,
&raw mut readregionfile as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut tileparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as size_t,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
if TMPTILEOUTFORMAT == ALT_LINE_DATA {
ReadAltLineFilePhase(
&raw mut unwphaseaboveptr,
&raw mut (*(&raw mut outfilesabove as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut tileparams as *mut tileparamT,
);
} else if TMPTILEOUTFORMAT == FLOAT_DATA {
Read2DArray(
&raw mut unwphaseaboveptr as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*(&raw mut outfilesabove as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut tileparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
}
FlipPhaseArraySign(
unwphaseaboveptr,
params,
(*(&raw mut tileparams as *mut tileparamT)).nrow,
(*(&raw mut tileparams as *mut tileparamT)).ncol,
);
let ref mut fresh119 = (*(&raw mut tileparams as *mut tileparamT)).firstrow;
*fresh119 -= 1;
Read2DRowColFileRows(
&raw mut costsaboveptr,
&raw mut (*(&raw mut outfilesabove as *mut outfileT)).costoutfile
as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut tileparams as *mut tileparamT,
costtypesize as size_t,
);
if (*params).rmtmptile as ::core::ffi::c_int != 0
&& strlen(&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char) == 0
{
unlink(
&raw mut (*(&raw mut outfilesabove as *mut outfileT)).costoutfile
as *mut ::core::ffi::c_char,
);
}
}
if tilerow != ntilerow - 1 as ::core::ffi::c_long {
if tilerow == (*params).ntilerow - 2 as ::core::ffi::c_long {
readtilenlines = nlines - (ntilerow - 1 as ::core::ffi::c_long) * (ni - rowovrlp);
}
(*(&raw mut tileparams as *mut tileparamT)).firstrow =
ceil(rowovrlp as ::core::ffi::c_double / 2.0f64) as ::core::ffi::c_long;
ParseFilename(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld%s\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow + 1 as ::core::ffi::c_long,
tilecol,
readtilelinelen,
REGIONSUFFIX.as_ptr(),
);
StrNCopy(
&raw mut readregionfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
Read2DArray(
&raw mut regionsbelowptr as *mut *mut *mut ::core::ffi::c_void,
&raw mut readregionfile as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut tileparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as size_t,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
if TMPTILEOUTFORMAT == ALT_LINE_DATA {
ReadAltLineFilePhase(
&raw mut unwphasebelowptr,
&raw mut (*(&raw mut outfilesbelow as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut tileparams as *mut tileparamT,
);
} else if TMPTILEOUTFORMAT == FLOAT_DATA {
Read2DArray(
&raw mut unwphasebelowptr as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*(&raw mut outfilesbelow as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut tileparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
}
FlipPhaseArraySign(
unwphasebelowptr,
params,
(*(&raw mut tileparams as *mut tileparamT)).nrow,
(*(&raw mut tileparams as *mut tileparamT)).ncol,
);
Read2DRowColFileRows(
&raw mut costsbelowptr,
&raw mut (*(&raw mut outfilesbelow as *mut outfileT)).costoutfile
as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut tileparams as *mut tileparamT,
costtypesize as size_t,
);
} else if (*params).rmtmptile as ::core::ffi::c_int != 0
&& strlen(&raw mut (*outfiles).costoutfile as *mut ::core::ffi::c_char) == 0
{
SetupTile(
nlines,
linelen,
params,
&raw mut tileparams as *mut tileparamT,
outfiles,
&raw mut outfilesbelow as *mut outfileT,
tilerow,
tilecol,
);
unlink(
&raw mut (*(&raw mut outfilesbelow as *mut outfileT)).costoutfile
as *mut ::core::ffi::c_char,
);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn TraceRegions(
mut regions: *mut *mut ::core::ffi::c_short,
mut nextregions: *mut *mut ::core::ffi::c_short,
mut lastregions: *mut *mut ::core::ffi::c_short,
mut regionsabove: *mut ::core::ffi::c_short,
mut regionsbelow: *mut ::core::ffi::c_short,
mut unwphase: *mut *mut ::core::ffi::c_float,
mut nextunwphase: *mut *mut ::core::ffi::c_float,
mut lastunwphase: *mut *mut ::core::ffi::c_float,
mut unwphaseabove: *mut ::core::ffi::c_float,
mut unwphasebelow: *mut ::core::ffi::c_float,
mut costs: *mut *mut ::core::ffi::c_void,
mut nextcosts: *mut *mut ::core::ffi::c_void,
mut lastcosts: *mut *mut ::core::ffi::c_void,
mut costsabove: *mut ::core::ffi::c_void,
mut costsbelow: *mut ::core::ffi::c_void,
mut prevnrow: ::core::ffi::c_long,
mut prevncol: ::core::ffi::c_long,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut scndrynodes: *mut *mut nodeT,
mut nodesupp: *mut *mut nodesuppT,
mut scndryarcs: *mut *mut scndryarcT,
mut scndrycosts: *mut *mut *mut ::core::ffi::c_long,
mut nscndrynodes: *mut ::core::ffi::c_int,
mut nscndryarcs: *mut ::core::ffi::c_int,
mut totarclens: *mut ::core::ffi::c_long,
mut bulkoffsets: *mut *mut ::core::ffi::c_short,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut i: ::core::ffi::c_long = 0;
let mut j: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut nnrow: ::core::ffi::c_long = 0;
let mut nncol: ::core::ffi::c_long = 0;
let mut tilenum: ::core::ffi::c_long = 0;
let mut costtypesize: ::core::ffi::c_long = 0;
let mut nnewnodes: ::core::ffi::c_long = 0;
let mut nnewarcs: ::core::ffi::c_long = 0;
let mut npathsout: ::core::ffi::c_long = 0;
let mut flowmax: ::core::ffi::c_long = 0;
let mut totarclen: ::core::ffi::c_long = 0;
let mut nupdatednontilenodes: ::core::ffi::c_long = 0;
let mut updatednontilenodesize: ::core::ffi::c_long = 0;
let mut ntilecol: ::core::ffi::c_long = 0;
let mut flows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut rightedgeflows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut loweredgeflows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut leftedgeflows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut upperedgeflows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut inontilenodeoutarc: *mut ::core::ffi::c_short =
::core::ptr::null_mut::<::core::ffi::c_short>();
let mut rightedgecosts: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut loweredgecosts: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut leftedgecosts: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut upperedgecosts: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut primarynodes: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
let mut updatednontilenodes: *mut *mut nodeT = ::core::ptr::null_mut::<*mut nodeT>();
let mut from: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut nextnode: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut tempnode: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut fromsupp: *mut nodesuppT = ::core::ptr::null_mut::<nodesuppT>();
let mut tosupp: *mut nodesuppT = ::core::ptr::null_mut::<nodesuppT>();
ntilecol = (*params).ntilecol;
nnrow = nrow + 1 as ::core::ffi::c_long;
nncol = ncol + 1 as ::core::ffi::c_long;
primarynodes = Get2DMem(
nnrow as ::core::ffi::c_int,
nncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut nodeT>() as ::core::ffi::c_int,
::core::mem::size_of::<nodeT>() as size_t,
) as *mut *mut nodeT;
row = 0 as ::core::ffi::c_long;
while row < nnrow {
col = 0 as ::core::ffi::c_long;
while col < nncol {
(*(*primarynodes.offset(row as isize)).offset(col as isize)).row =
row as ::core::ffi::c_int;
(*(*primarynodes.offset(row as isize)).offset(col as isize)).col =
col as ::core::ffi::c_int;
(*(*primarynodes.offset(row as isize)).offset(col as isize)).group = NOTINBUCKET;
let ref mut fresh80 = (*(*primarynodes.offset(row as isize)).offset(col as isize)).pred;
*fresh80 = ::core::ptr::null_mut::<nodeST>();
let ref mut fresh81 = (*(*primarynodes.offset(row as isize)).offset(col as isize)).next;
*fresh81 = ::core::ptr::null_mut::<nodeST>();
col += 1;
}
row += 1;
}
nextnode = (*primarynodes.offset(0 as ::core::ffi::c_int as isize))
.offset(0 as ::core::ffi::c_int as isize) as *mut nodeT;
tilenum = tilerow * ntilecol + tilecol;
let ref mut fresh82 = *scndrynodes.offset(tilenum as isize);
*fresh82 = ::core::ptr::null_mut::<nodeT>();
let ref mut fresh83 = *nodesupp.offset(tilenum as isize);
*fresh83 = ::core::ptr::null_mut::<nodesuppT>();
let ref mut fresh84 = *scndryarcs.offset(tilenum as isize);
*fresh84 = ::core::ptr::null_mut::<scndryarcT>();
let ref mut fresh85 = *scndrycosts.offset(tilenum as isize);
*fresh85 = ::core::ptr::null_mut::<*mut ::core::ffi::c_long>();
nnewnodes = 0 as ::core::ffi::c_long;
nnewarcs = 0 as ::core::ffi::c_long;
totarclen = 0 as ::core::ffi::c_long;
flowmax = (*params).scndryarcflowmax;
updatednontilenodesize = INITARRSIZE as ::core::ffi::c_long;
nupdatednontilenodes = 0 as ::core::ffi::c_long;
if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<costT>() as ::core::ffi::c_long;
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<smoothcostT>() as ::core::ffi::c_long;
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<::core::ffi::c_short>() as ::core::ffi::c_long;
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
costtypesize = ::core::mem::size_of::<bidircostT>() as ::core::ffi::c_long;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"ERROR: Bad CalcCost func ptr in TraceRegions()\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
updatednontilenodes = MAlloc(
(updatednontilenodesize as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
inontilenodeoutarc = MAlloc(
(updatednontilenodesize as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_short>() as size_t),
) as *mut ::core::ffi::c_short;
flows = Get2DRowColMem(
nrow + 1 as ::core::ffi::c_long,
ncol + 1 as ::core::ffi::c_long,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
rightedgeflows = Get2DMem(
nrow as ::core::ffi::c_int,
1 as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
leftedgeflows = Get2DMem(
nrow as ::core::ffi::c_int,
1 as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
upperedgeflows = Get2DMem(
1 as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
loweredgeflows = Get2DMem(
1 as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
rightedgecosts = Get2DMem(
nrow as ::core::ffi::c_int,
1 as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_void>() as ::core::ffi::c_int,
costtypesize as size_t,
);
leftedgecosts = Get2DMem(
nrow as ::core::ffi::c_int,
1 as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_void>() as ::core::ffi::c_int,
costtypesize as size_t,
);
upperedgecosts = Get2DMem(
1 as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_void>() as ::core::ffi::c_int,
costtypesize as size_t,
);
loweredgecosts = Get2DMem(
1 as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_void>() as ::core::ffi::c_int,
costtypesize as size_t,
);
CalcFlow(unwphase, &raw mut flows, nrow, ncol);
SetUpperEdge(
ncol,
tilerow,
tilecol,
costs,
costsabove,
unwphase,
unwphaseabove,
upperedgecosts,
upperedgeflows,
params,
bulkoffsets,
);
SetLowerEdge(
nrow,
ncol,
tilerow,
tilecol,
costs,
costsbelow,
unwphase,
unwphasebelow,
loweredgecosts,
loweredgeflows,
params,
bulkoffsets,
);
SetLeftEdge(
nrow,
prevncol,
tilerow,
tilecol,
costs,
lastcosts,
unwphase,
lastunwphase,
leftedgecosts,
leftedgeflows,
params,
bulkoffsets,
);
SetRightEdge(
nrow,
ncol,
tilerow,
tilecol,
costs,
nextcosts,
unwphase,
nextunwphase,
rightedgecosts,
rightedgeflows,
params,
bulkoffsets,
);
while !nextnode.is_null() {
from = nextnode;
nextnode = (*nextnode).next as *mut nodeT;
(*from).group = NOTINBUCKET;
npathsout = FindNumPathsOut(
from,
params,
tilerow,
tilecol,
nnrow,
nncol,
regions,
nextregions,
lastregions,
regionsabove,
regionsbelow,
prevncol,
);
if npathsout > 2 as ::core::ffi::c_long {
(*from).group = ONTREE;
if ((*from).row != 0 as ::core::ffi::c_int || tilerow == 0 as ::core::ffi::c_long)
&& ((*from).col != 0 as ::core::ffi::c_int || tilecol == 0 as ::core::ffi::c_long)
{
nnewnodes += 1;
if nnewnodes > SHRT_MAX as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Exceeded maximum number of secondary nodes\nDecrease TILECOSTTHRESH and/or increase MINREGIONSIZE\n\0"
as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
let ref mut fresh86 = *scndrynodes.offset(tilenum as isize);
*fresh86 = ReAlloc(
*scndrynodes.offset(tilenum as isize) as *mut ::core::ffi::c_void,
(nnewnodes as size_t).wrapping_mul(::core::mem::size_of::<nodeT>() as size_t),
) as *mut nodeT;
let ref mut fresh87 = *nodesupp.offset(tilenum as isize);
*fresh87 = ReAlloc(
*nodesupp.offset(tilenum as isize) as *mut ::core::ffi::c_void,
(nnewnodes as size_t)
.wrapping_mul(::core::mem::size_of::<nodesuppT>() as size_t),
) as *mut nodesuppT;
(*(*scndrynodes.offset(tilenum as isize))
.offset((nnewnodes - 1 as ::core::ffi::c_long) as isize))
.row = tilenum as ::core::ffi::c_int;
(*(*scndrynodes.offset(tilenum as isize))
.offset((nnewnodes - 1 as ::core::ffi::c_long) as isize))
.col = (nnewnodes - 1 as ::core::ffi::c_long) as ::core::ffi::c_int;
(*(*nodesupp.offset(tilenum as isize))
.offset((nnewnodes - 1 as ::core::ffi::c_long) as isize))
.row = (*from).row;
(*(*nodesupp.offset(tilenum as isize))
.offset((nnewnodes - 1 as ::core::ffi::c_long) as isize))
.col = (*from).col;
(*(*nodesupp.offset(tilenum as isize))
.offset((nnewnodes - 1 as ::core::ffi::c_long) as isize))
.noutarcs = 0 as ::core::ffi::c_int;
let ref mut fresh88 = (*(*nodesupp.offset(tilenum as isize))
.offset((nnewnodes - 1 as ::core::ffi::c_long) as isize))
.neighbornodes;
*fresh88 = ::core::ptr::null_mut::<*mut nodeT>();
let ref mut fresh89 = (*(*nodesupp.offset(tilenum as isize))
.offset((nnewnodes - 1 as ::core::ffi::c_long) as isize))
.outarcs;
*fresh89 = ::core::ptr::null_mut::<*mut scndryarcT>();
}
if !(*from).pred.is_null()
&& ((*from).row == (*(*from).pred).row
&& ((*from).row != 0 as ::core::ffi::c_int
|| tilerow == 0 as ::core::ffi::c_long)
|| (*from).col == (*(*from).pred).col
&& ((*from).col != 0 as ::core::ffi::c_int
|| tilecol == 0 as ::core::ffi::c_long))
{
TraceSecondaryArc(
from,
scndrynodes,
nodesupp,
scndryarcs,
scndrycosts,
&raw mut nnewnodes,
&raw mut nnewarcs,
tilerow,
tilecol,
flowmax,
nrow,
ncol,
prevnrow,
prevncol,
params,
costs,
rightedgecosts,
loweredgecosts,
leftedgecosts,
upperedgecosts,
flows,
rightedgeflows,
loweredgeflows,
leftedgeflows,
upperedgeflows,
&raw mut updatednontilenodes,
&raw mut nupdatednontilenodes,
&raw mut updatednontilenodesize,
&raw mut inontilenodeoutarc,
&raw mut totarclen,
);
}
}
RegionTraceCheckNeighbors(
from,
&raw mut nextnode,
primarynodes,
regions,
nextregions,
lastregions,
regionsabove,
regionsbelow,
tilerow,
tilecol,
nnrow,
nncol,
scndrynodes,
nodesupp,
scndryarcs,
&raw mut nnewnodes,
&raw mut nnewarcs,
flowmax,
nrow,
ncol,
prevnrow,
prevncol,
params,
costs,
rightedgecosts,
loweredgecosts,
leftedgecosts,
upperedgecosts,
flows,
rightedgeflows,
loweredgeflows,
leftedgeflows,
upperedgeflows,
scndrycosts,
&raw mut updatednontilenodes,
&raw mut nupdatednontilenodes,
&raw mut updatednontilenodesize,
&raw mut inontilenodeoutarc,
&raw mut totarclen,
);
}
i = 0 as ::core::ffi::c_long;
while i < nnewnodes {
j = 0 as ::core::ffi::c_long;
while j
< (*(*nodesupp.offset(tilenum as isize)).offset(i as isize)).noutarcs
as ::core::ffi::c_long
{
tempnode = *(*(*nodesupp.offset(tilenum as isize)).offset(i as isize))
.neighbornodes
.offset(j as isize);
let ref mut fresh90 = *(*(*nodesupp.offset(tilenum as isize)).offset(i as isize))
.neighbornodes
.offset(j as isize);
*fresh90 = (*scndrynodes.offset((*tempnode).level as isize))
.offset((*tempnode).incost as isize) as *mut nodeT;
j += 1;
}
i += 1;
}
i = 0 as ::core::ffi::c_long;
while i < nupdatednontilenodes {
row = (**updatednontilenodes.offset(i as isize)).row as ::core::ffi::c_long;
col = (**updatednontilenodes.offset(i as isize)).col as ::core::ffi::c_long;
j = *inontilenodeoutarc.offset(i as isize) as ::core::ffi::c_long;
tempnode = *(*(*nodesupp.offset(row as isize)).offset(col as isize))
.neighbornodes
.offset(j as isize);
let ref mut fresh91 = *(*(*nodesupp.offset(row as isize)).offset(col as isize))
.neighbornodes
.offset(j as isize);
*fresh91 = (*scndrynodes.offset((*tempnode).level as isize))
.offset((*tempnode).incost as isize) as *mut nodeT;
i += 1;
}
i = 0 as ::core::ffi::c_long;
while i < nnewarcs {
tempnode = (*(*scndryarcs.offset(tilenum as isize)).offset(i as isize)).from;
let ref mut fresh92 = (*(*scndryarcs.offset(tilenum as isize)).offset(i as isize)).from;
*fresh92 = (*scndrynodes.offset((*tempnode).level as isize))
.offset((*tempnode).incost as isize) as *mut nodeT;
from = (*(*scndryarcs.offset(tilenum as isize)).offset(i as isize)).from;
tempnode = (*(*scndryarcs.offset(tilenum as isize)).offset(i as isize)).to;
let ref mut fresh93 = (*(*scndryarcs.offset(tilenum as isize)).offset(i as isize)).to;
*fresh93 = (*scndrynodes.offset((*tempnode).level as isize))
.offset((*tempnode).incost as isize) as *mut nodeT;
to = (*(*scndryarcs.offset(tilenum as isize)).offset(i as isize)).to;
fromsupp =
(*nodesupp.offset((*from).row as isize)).offset((*from).col as isize) as *mut nodesuppT;
j = 0 as ::core::ffi::c_long;
while *(*fromsupp).neighbornodes.offset(j as isize) != to {
j += 1;
}
let ref mut fresh94 = *(*fromsupp).outarcs.offset(j as isize);
*fresh94 = (*scndryarcs.offset(tilenum as isize)).offset(i as isize) as *mut scndryarcT;
tosupp =
(*nodesupp.offset((*to).row as isize)).offset((*to).col as isize) as *mut nodesuppT;
j = 0 as ::core::ffi::c_long;
while *(*tosupp).neighbornodes.offset(j as isize) != from {
j += 1;
}
let ref mut fresh95 = *(*tosupp).outarcs.offset(j as isize);
*fresh95 = (*scndryarcs.offset(tilenum as isize)).offset(i as isize) as *mut scndryarcT;
i += 1;
}
*nscndrynodes.offset(tilenum as isize) = nnewnodes as ::core::ffi::c_int;
*nscndryarcs.offset(tilenum as isize) = nnewarcs as ::core::ffi::c_int;
*totarclens.offset(tilenum as isize) = totarclen;
Free2DArray(
primarynodes as *mut *mut ::core::ffi::c_void,
nnrow as ::core::ffi::c_uint,
);
Free2DArray(
flows as *mut *mut ::core::ffi::c_void,
(2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
Free2DArray(
rightedgeflows as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
leftedgeflows as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
Free2DArray(
upperedgeflows as *mut *mut ::core::ffi::c_void,
1 as ::core::ffi::c_uint,
);
Free2DArray(
loweredgeflows as *mut *mut ::core::ffi::c_void,
1 as ::core::ffi::c_uint,
);
Free2DArray(rightedgecosts, nrow as ::core::ffi::c_uint);
Free2DArray(leftedgecosts, nrow as ::core::ffi::c_uint);
Free2DArray(upperedgecosts, 1 as ::core::ffi::c_uint);
Free2DArray(loweredgecosts, 1 as ::core::ffi::c_uint);
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn FindNumPathsOut(
mut from: *mut nodeT,
mut params: *mut paramT,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut nnrow: ::core::ffi::c_long,
mut nncol: ::core::ffi::c_long,
mut regions: *mut *mut ::core::ffi::c_short,
mut nextregions: *mut *mut ::core::ffi::c_short,
mut lastregions: *mut *mut ::core::ffi::c_short,
mut regionsabove: *mut ::core::ffi::c_short,
mut regionsbelow: *mut ::core::ffi::c_short,
mut prevncol: ::core::ffi::c_long,
) -> ::core::ffi::c_long {
let mut npathsout: ::core::ffi::c_long = 0;
let mut ntilerow: ::core::ffi::c_long = 0;
let mut ntilecol: ::core::ffi::c_long = 0;
let mut fromrow: ::core::ffi::c_long = 0;
let mut fromcol: ::core::ffi::c_long = 0;
ntilerow = (*params).ntilerow;
ntilecol = (*params).ntilecol;
fromrow = (*from).row as ::core::ffi::c_long;
fromcol = (*from).col as ::core::ffi::c_long;
npathsout = 0 as ::core::ffi::c_long;
if fromcol != nncol - 1 as ::core::ffi::c_long {
if fromrow == 0 as ::core::ffi::c_long
|| fromrow == nnrow - 1 as ::core::ffi::c_long
|| *(*regions.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset(fromcol as isize) as ::core::ffi::c_int
!= *(*regions.offset(fromrow as isize)).offset(fromcol as isize)
as ::core::ffi::c_int
{
npathsout += 1;
}
} else if fromrow == 0 as ::core::ffi::c_long
|| fromrow == nnrow - 1 as ::core::ffi::c_long
|| tilecol != ntilecol - 1 as ::core::ffi::c_long
&& *(*nextregions.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize) as ::core::ffi::c_int
!= *(*nextregions.offset(fromrow as isize)).offset(0 as ::core::ffi::c_int as isize)
as ::core::ffi::c_int
{
npathsout += 1;
}
if fromrow != nnrow - 1 as ::core::ffi::c_long {
if fromcol == 0 as ::core::ffi::c_long
|| fromcol == nncol - 1 as ::core::ffi::c_long
|| *(*regions.offset(fromrow as isize)).offset(fromcol as isize) as ::core::ffi::c_int
!= *(*regions.offset(fromrow as isize))
.offset((fromcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
{
npathsout += 1;
}
} else if fromcol == 0 as ::core::ffi::c_long
|| fromcol == nncol - 1 as ::core::ffi::c_long
|| tilerow != ntilerow - 1 as ::core::ffi::c_long
&& *regionsbelow.offset(fromcol as isize) as ::core::ffi::c_int
!= *regionsbelow.offset((fromcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
{
npathsout += 1;
}
if fromcol != 0 as ::core::ffi::c_long {
if fromrow == 0 as ::core::ffi::c_long
|| fromrow == nnrow - 1 as ::core::ffi::c_long
|| *(*regions.offset(fromrow as isize))
.offset((fromcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
!= *(*regions.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset((fromcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
{
npathsout += 1;
}
} else if fromrow == 0 as ::core::ffi::c_long
|| fromrow == nnrow - 1 as ::core::ffi::c_long
|| tilecol != 0 as ::core::ffi::c_long
&& *(*lastregions.offset(fromrow as isize))
.offset((prevncol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
!= *(*lastregions.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset((prevncol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
{
npathsout += 1;
}
if fromrow != 0 as ::core::ffi::c_long {
if fromcol == 0 as ::core::ffi::c_long
|| fromcol == nncol - 1 as ::core::ffi::c_long
|| *(*regions.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset((fromcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
!= *(*regions.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset(fromcol as isize) as ::core::ffi::c_int
{
npathsout += 1;
}
} else if fromcol == 0 as ::core::ffi::c_long
|| fromcol == nncol - 1 as ::core::ffi::c_long
|| tilerow != 0 as ::core::ffi::c_long
&& *regionsabove.offset((fromcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
!= *regionsabove.offset(fromcol as isize) as ::core::ffi::c_int
{
npathsout += 1;
}
return npathsout;
}
unsafe extern "C" fn RegionTraceCheckNeighbors(
mut from: *mut nodeT,
mut nextnodeptr: *mut *mut nodeT,
mut primarynodes: *mut *mut nodeT,
mut regions: *mut *mut ::core::ffi::c_short,
mut nextregions: *mut *mut ::core::ffi::c_short,
mut lastregions: *mut *mut ::core::ffi::c_short,
mut regionsabove: *mut ::core::ffi::c_short,
mut regionsbelow: *mut ::core::ffi::c_short,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut nnrow: ::core::ffi::c_long,
mut nncol: ::core::ffi::c_long,
mut scndrynodes: *mut *mut nodeT,
mut nodesupp: *mut *mut nodesuppT,
mut scndryarcs: *mut *mut scndryarcT,
mut nnewnodesptr: *mut ::core::ffi::c_long,
mut nnewarcsptr: *mut ::core::ffi::c_long,
mut flowmax: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut prevnrow: ::core::ffi::c_long,
mut prevncol: ::core::ffi::c_long,
mut params: *mut paramT,
mut costs: *mut *mut ::core::ffi::c_void,
mut rightedgecosts: *mut *mut ::core::ffi::c_void,
mut loweredgecosts: *mut *mut ::core::ffi::c_void,
mut leftedgecosts: *mut *mut ::core::ffi::c_void,
mut upperedgecosts: *mut *mut ::core::ffi::c_void,
mut flows: *mut *mut ::core::ffi::c_short,
mut rightedgeflows: *mut *mut ::core::ffi::c_short,
mut loweredgeflows: *mut *mut ::core::ffi::c_short,
mut leftedgeflows: *mut *mut ::core::ffi::c_short,
mut upperedgeflows: *mut *mut ::core::ffi::c_short,
mut scndrycosts: *mut *mut *mut ::core::ffi::c_long,
mut updatednontilenodesptr: *mut *mut *mut nodeT,
mut nupdatednontilenodesptr: *mut ::core::ffi::c_long,
mut updatednontilenodesizeptr: *mut ::core::ffi::c_long,
mut inontilenodeoutarcptr: *mut *mut ::core::ffi::c_short,
mut totarclenptr: *mut ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut fromrow: ::core::ffi::c_long = 0;
let mut fromcol: ::core::ffi::c_long = 0;
let mut to: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut nextnode: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
fromrow = (*from).row as ::core::ffi::c_long;
fromcol = (*from).col as ::core::ffi::c_long;
nextnode = *nextnodeptr;
if fromcol != nncol - 1 as ::core::ffi::c_long {
to = (*primarynodes.offset(fromrow as isize))
.offset((fromcol + 1 as ::core::ffi::c_long) as isize) as *mut nodeT;
if fromrow == 0 as ::core::ffi::c_long
|| fromrow == nnrow - 1 as ::core::ffi::c_long
|| *(*regions.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset(fromcol as isize) as ::core::ffi::c_int
!= *(*regions.offset(fromrow as isize)).offset(fromcol as isize)
as ::core::ffi::c_int
{
if to != (*from).pred {
(*to).pred = from as *mut nodeST;
if (*to).group == NOTINBUCKET {
(*to).group = INBUCKET;
(*to).next = nextnode as *mut nodeST;
nextnode = to;
} else if (*to).group == ONTREE
&& (fromrow != 0 as ::core::ffi::c_long || tilerow == 0 as ::core::ffi::c_long)
{
TraceSecondaryArc(
to,
scndrynodes,
nodesupp,
scndryarcs,
scndrycosts,
nnewnodesptr,
nnewarcsptr,
tilerow,
tilecol,
flowmax,
nrow,
ncol,
prevnrow,
prevncol,
params,
costs,
rightedgecosts,
loweredgecosts,
leftedgecosts,
upperedgecosts,
flows,
rightedgeflows,
loweredgeflows,
leftedgeflows,
upperedgeflows,
updatednontilenodesptr,
nupdatednontilenodesptr,
updatednontilenodesizeptr,
inontilenodeoutarcptr,
totarclenptr,
);
}
}
}
}
if fromrow != nnrow - 1 as ::core::ffi::c_long {
to = (*primarynodes.offset((fromrow + 1 as ::core::ffi::c_long) as isize))
.offset(fromcol as isize) as *mut nodeT;
if fromcol == 0 as ::core::ffi::c_long
|| fromcol == nncol - 1 as ::core::ffi::c_long
|| *(*regions.offset(fromrow as isize)).offset(fromcol as isize) as ::core::ffi::c_int
!= *(*regions.offset(fromrow as isize))
.offset((fromcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
{
if to != (*from).pred {
(*to).pred = from as *mut nodeST;
if (*to).group == NOTINBUCKET {
(*to).group = INBUCKET;
(*to).next = nextnode as *mut nodeST;
nextnode = to;
} else if (*to).group == ONTREE
&& (fromcol != 0 as ::core::ffi::c_long || tilecol == 0 as ::core::ffi::c_long)
{
TraceSecondaryArc(
to,
scndrynodes,
nodesupp,
scndryarcs,
scndrycosts,
nnewnodesptr,
nnewarcsptr,
tilerow,
tilecol,
flowmax,
nrow,
ncol,
prevnrow,
prevncol,
params,
costs,
rightedgecosts,
loweredgecosts,
leftedgecosts,
upperedgecosts,
flows,
rightedgeflows,
loweredgeflows,
leftedgeflows,
upperedgeflows,
updatednontilenodesptr,
nupdatednontilenodesptr,
updatednontilenodesizeptr,
inontilenodeoutarcptr,
totarclenptr,
);
}
}
}
}
if fromcol != 0 as ::core::ffi::c_long {
to = (*primarynodes.offset(fromrow as isize))
.offset((fromcol - 1 as ::core::ffi::c_long) as isize) as *mut nodeT;
if fromrow == 0 as ::core::ffi::c_long
|| fromrow == nnrow - 1 as ::core::ffi::c_long
|| *(*regions.offset(fromrow as isize))
.offset((fromcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
!= *(*regions.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset((fromcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
{
if to != (*from).pred {
(*to).pred = from as *mut nodeST;
if (*to).group == NOTINBUCKET {
(*to).group = INBUCKET;
(*to).next = nextnode as *mut nodeST;
nextnode = to;
} else if (*to).group == ONTREE
&& (fromrow != 0 as ::core::ffi::c_long || tilerow == 0 as ::core::ffi::c_long)
{
TraceSecondaryArc(
to,
scndrynodes,
nodesupp,
scndryarcs,
scndrycosts,
nnewnodesptr,
nnewarcsptr,
tilerow,
tilecol,
flowmax,
nrow,
ncol,
prevnrow,
prevncol,
params,
costs,
rightedgecosts,
loweredgecosts,
leftedgecosts,
upperedgecosts,
flows,
rightedgeflows,
loweredgeflows,
leftedgeflows,
upperedgeflows,
updatednontilenodesptr,
nupdatednontilenodesptr,
updatednontilenodesizeptr,
inontilenodeoutarcptr,
totarclenptr,
);
}
}
}
}
if fromrow != 0 as ::core::ffi::c_long {
to = (*primarynodes.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset(fromcol as isize) as *mut nodeT;
if fromcol == 0 as ::core::ffi::c_long
|| fromcol == nncol - 1 as ::core::ffi::c_long
|| *(*regions.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset((fromcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
!= *(*regions.offset((fromrow - 1 as ::core::ffi::c_long) as isize))
.offset(fromcol as isize) as ::core::ffi::c_int
{
if to != (*from).pred {
(*to).pred = from as *mut nodeST;
if (*to).group == NOTINBUCKET {
(*to).group = INBUCKET;
(*to).next = nextnode as *mut nodeST;
nextnode = to;
} else if (*to).group == ONTREE
&& (fromcol != 0 as ::core::ffi::c_long || tilecol == 0 as ::core::ffi::c_long)
{
TraceSecondaryArc(
to,
scndrynodes,
nodesupp,
scndryarcs,
scndrycosts,
nnewnodesptr,
nnewarcsptr,
tilerow,
tilecol,
flowmax,
nrow,
ncol,
prevnrow,
prevncol,
params,
costs,
rightedgecosts,
loweredgecosts,
leftedgecosts,
upperedgecosts,
flows,
rightedgeflows,
loweredgeflows,
leftedgeflows,
upperedgeflows,
updatednontilenodesptr,
nupdatednontilenodesptr,
updatednontilenodesizeptr,
inontilenodeoutarcptr,
totarclenptr,
);
}
}
}
}
*nextnodeptr = nextnode;
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn SetUpperEdge(
mut ncol: ::core::ffi::c_long,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut voidcosts: *mut *mut ::core::ffi::c_void,
mut voidcostsabove: *mut ::core::ffi::c_void,
mut unwphase: *mut *mut ::core::ffi::c_float,
mut unwphaseabove: *mut ::core::ffi::c_float,
mut voidupperedgecosts: *mut *mut ::core::ffi::c_void,
mut upperedgeflows: *mut *mut ::core::ffi::c_short,
mut params: *mut paramT,
mut bulkoffsets: *mut *mut ::core::ffi::c_short,
) -> ::core::ffi::c_int {
let mut col: ::core::ffi::c_long = 0;
let mut reloffset: ::core::ffi::c_long = 0;
let mut dphi: ::core::ffi::c_double = 0.;
let mut dpsi: ::core::ffi::c_double = 0.;
let mut upperedgecosts: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut costs: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut costsabove: *mut costT = ::core::ptr::null_mut::<costT>();
let mut upperedgesmoothcosts: *mut *mut smoothcostT =
::core::ptr::null_mut::<*mut smoothcostT>();
let mut smoothcosts: *mut *mut smoothcostT = ::core::ptr::null_mut::<*mut smoothcostT>();
let mut smoothcostsabove: *mut smoothcostT = ::core::ptr::null_mut::<smoothcostT>();
let mut nshortcycle: ::core::ffi::c_long = 0;
upperedgecosts = voidupperedgecosts as *mut *mut costT;
costs = voidcosts as *mut *mut costT;
costsabove = voidcostsabove as *mut costT;
upperedgesmoothcosts = voidupperedgecosts as *mut *mut smoothcostT;
smoothcosts = voidcosts as *mut *mut smoothcostT;
smoothcostsabove = voidcostsabove as *mut smoothcostT;
if tilerow != 0 as ::core::ffi::c_long {
nshortcycle = (*params).nshortcycle;
reloffset = (*(*bulkoffsets.offset((tilerow - 1 as ::core::ffi::c_long) as isize))
.offset(tilecol as isize) as ::core::ffi::c_int
- *(*bulkoffsets.offset(tilerow as isize)).offset(tilecol as isize)
as ::core::ffi::c_int) as ::core::ffi::c_long;
col = 0 as ::core::ffi::c_long;
while col < ncol {
dphi = (*unwphaseabove.offset(col as isize)
- *(*unwphase.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
as ::core::ffi::c_double
/ TWOPI;
*(*upperedgeflows.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize) =
(LRound(dphi) as ::core::ffi::c_short as ::core::ffi::c_long - reloffset)
as ::core::ffi::c_short;
dpsi = dphi - floor(dphi);
if dpsi > 0.5f64 {
dpsi -= 1.0f64;
}
if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*upperedgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.offset =
LRound(nshortcycle as ::core::ffi::c_double * dpsi) as ::core::ffi::c_short;
(*(*upperedgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.sigsq = AvgSigSq(
(*(*costs.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize)).sigsq,
(*costsabove.offset(col as isize)).sigsq,
);
if (*(*costs.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize)).dzmax
as ::core::ffi::c_int
> (*costsabove.offset(col as isize)).dzmax as ::core::ffi::c_int
{
(*(*upperedgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.dzmax = (*(*costs.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.dzmax;
} else {
(*(*upperedgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.dzmax = (*costsabove.offset(col as isize)).dzmax;
}
if ((*(*costs.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
.laycost as ::core::ffi::c_int)
< (*costsabove.offset(col as isize)).laycost as ::core::ffi::c_int
{
(*(*upperedgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.laycost = (*(*costs.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.laycost;
} else {
(*(*upperedgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.laycost = (*costsabove.offset(col as isize)).laycost;
}
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*upperedgesmoothcosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.offset =
LRound(nshortcycle as ::core::ffi::c_double * dpsi) as ::core::ffi::c_short;
(*(*upperedgesmoothcosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.sigsq = AvgSigSq(
(*(*smoothcosts.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
.sigsq,
(*smoothcostsabove.offset(col as isize)).sigsq,
);
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
*(*(voidupperedgecosts as *mut *mut ::core::ffi::c_short)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize) =
((*(*(voidcosts as *mut *mut ::core::ffi::c_short)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize) as ::core::ffi::c_int
+ *(voidcostsabove as *mut ::core::ffi::c_short).offset(col as isize)
as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*(voidupperedgecosts as *mut *mut bidircostT)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.posweight = (((*(*(voidcosts as *mut *mut bidircostT)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.posweight as ::core::ffi::c_int
+ (*(voidcostsabove as *mut bidircostT).offset(col as isize)).posweight
as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
(*(*(voidupperedgecosts as *mut *mut bidircostT)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.negweight = (((*(*(voidcosts as *mut *mut bidircostT)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.negweight as ::core::ffi::c_int
+ (*(voidcostsabove as *mut bidircostT).offset(col as isize)).negweight
as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal cost mode in SetUpperEdge(). This is a bug.\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
col += 1;
}
} else if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
col = 0 as ::core::ffi::c_long;
while col < ncol {
(*(*upperedgecosts.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
.offset = (LARGESHORT / 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
(*(*upperedgecosts.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
.sigsq = LARGESHORT as ::core::ffi::c_short;
(*(*upperedgecosts.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
.dzmax = LARGESHORT as ::core::ffi::c_short;
(*(*upperedgecosts.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
.laycost = 0 as ::core::ffi::c_short;
col += 1;
}
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
col = 0 as ::core::ffi::c_long;
while col < ncol {
(*(*upperedgesmoothcosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.offset = 0 as ::core::ffi::c_short;
(*(*upperedgesmoothcosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.sigsq = LARGESHORT as ::core::ffi::c_short;
col += 1;
}
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*(voidupperedgecosts as *mut *mut ::core::ffi::c_short)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize) = 0 as ::core::ffi::c_short;
col += 1;
}
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
col = 0 as ::core::ffi::c_long;
while col < ncol {
(*(*(voidupperedgecosts as *mut *mut bidircostT)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.posweight = 0 as ::core::ffi::c_short;
(*(*(voidupperedgecosts as *mut *mut bidircostT)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.negweight = 0 as ::core::ffi::c_short;
col += 1;
}
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal cost mode in SetUpperEdge(). This is a bug.\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn SetLowerEdge(
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut voidcosts: *mut *mut ::core::ffi::c_void,
mut voidcostsbelow: *mut ::core::ffi::c_void,
mut unwphase: *mut *mut ::core::ffi::c_float,
mut unwphasebelow: *mut ::core::ffi::c_float,
mut voidloweredgecosts: *mut *mut ::core::ffi::c_void,
mut loweredgeflows: *mut *mut ::core::ffi::c_short,
mut params: *mut paramT,
mut bulkoffsets: *mut *mut ::core::ffi::c_short,
) -> ::core::ffi::c_int {
let mut flowhistogram: *mut ::core::ffi::c_long =
::core::ptr::null_mut::<::core::ffi::c_long>();
let mut col: ::core::ffi::c_long = 0;
let mut iflow: ::core::ffi::c_long = 0;
let mut reloffset: ::core::ffi::c_long = 0;
let mut nmax: ::core::ffi::c_long = 0;
let mut flowlimhi: ::core::ffi::c_long = 0;
let mut flowlimlo: ::core::ffi::c_long = 0;
let mut maxflow: ::core::ffi::c_long = 0;
let mut minflow: ::core::ffi::c_long = 0;
let mut tempflow: ::core::ffi::c_long = 0;
let mut dphi: ::core::ffi::c_double = 0.;
let mut dpsi: ::core::ffi::c_double = 0.;
let mut loweredgecosts: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut costs: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut costsbelow: *mut costT = ::core::ptr::null_mut::<costT>();
let mut loweredgesmoothcosts: *mut *mut smoothcostT =
::core::ptr::null_mut::<*mut smoothcostT>();
let mut smoothcosts: *mut *mut smoothcostT = ::core::ptr::null_mut::<*mut smoothcostT>();
let mut smoothcostsbelow: *mut smoothcostT = ::core::ptr::null_mut::<smoothcostT>();
let mut nshortcycle: ::core::ffi::c_long = 0;
loweredgecosts = voidloweredgecosts as *mut *mut costT;
costs = voidcosts as *mut *mut costT;
costsbelow = voidcostsbelow as *mut costT;
loweredgesmoothcosts = voidloweredgecosts as *mut *mut smoothcostT;
smoothcosts = voidcosts as *mut *mut smoothcostT;
smoothcostsbelow = voidcostsbelow as *mut smoothcostT;
if tilerow != (*params).ntilerow - 1 as ::core::ffi::c_long {
nshortcycle = (*params).nshortcycle;
flowlimhi = LARGESHORT as ::core::ffi::c_long;
flowlimlo = -LARGESHORT as ::core::ffi::c_long;
flowhistogram = CAlloc(
(flowlimhi - flowlimlo + 1 as ::core::ffi::c_long) as size_t,
::core::mem::size_of::<::core::ffi::c_long>() as size_t,
) as *mut ::core::ffi::c_long;
minflow = flowlimhi;
maxflow = flowlimlo;
col = 0 as ::core::ffi::c_long;
while col < ncol {
dphi = (*(*unwphase.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)
- *unwphasebelow.offset(col as isize)) as ::core::ffi::c_double
/ TWOPI;
tempflow = LRound(dphi) as ::core::ffi::c_short as ::core::ffi::c_long;
*(*loweredgeflows.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize) =
tempflow as ::core::ffi::c_short;
if tempflow < minflow {
if tempflow < flowlimlo {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Overflow in tile offset\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
minflow = tempflow;
}
if tempflow > maxflow {
if tempflow > flowlimhi {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Overflow in tile offset\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
maxflow = tempflow;
}
let ref mut fresh117 = *flowhistogram.offset((tempflow - flowlimlo) as isize);
*fresh117 += 1;
dpsi = dphi - floor(dphi);
if dpsi > 0.5f64 {
dpsi -= 1.0f64;
}
if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*loweredgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.offset =
LRound(nshortcycle as ::core::ffi::c_double * dpsi) as ::core::ffi::c_short;
(*(*loweredgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.sigsq = AvgSigSq(
(*(*costs.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.sigsq,
(*costsbelow.offset(col as isize)).sigsq,
);
if (*(*costs.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.dzmax as ::core::ffi::c_int
> (*costsbelow.offset(col as isize)).dzmax as ::core::ffi::c_int
{
(*(*loweredgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.dzmax = (*(*costs.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.dzmax;
} else {
(*(*loweredgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.dzmax = (*costsbelow.offset(col as isize)).dzmax;
}
if ((*(*costs.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.laycost as ::core::ffi::c_int)
< (*costsbelow.offset(col as isize)).laycost as ::core::ffi::c_int
{
(*(*loweredgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.laycost = (*(*costs.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.laycost;
} else {
(*(*loweredgecosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.laycost = (*costsbelow.offset(col as isize)).laycost;
}
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*loweredgesmoothcosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.offset =
LRound(nshortcycle as ::core::ffi::c_double * dpsi) as ::core::ffi::c_short;
(*(*loweredgesmoothcosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.sigsq = AvgSigSq(
(*(*smoothcosts.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.sigsq,
(*smoothcostsbelow.offset(col as isize)).sigsq,
);
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
*(*(voidloweredgecosts as *mut *mut ::core::ffi::c_short)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize) =
((*(*(voidcosts as *mut *mut ::core::ffi::c_short)
.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(col as isize) as ::core::ffi::c_int
+ *(voidcostsbelow as *mut ::core::ffi::c_short).offset(col as isize)
as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*(voidloweredgecosts as *mut *mut bidircostT)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.posweight = (((*(*(voidcosts as *mut *mut bidircostT)
.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.posweight as ::core::ffi::c_int
+ (*(voidcostsbelow as *mut bidircostT).offset(col as isize)).posweight
as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
(*(*(voidloweredgecosts as *mut *mut bidircostT)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.negweight = (((*(*(voidcosts as *mut *mut bidircostT)
.offset((nrow - 2 as ::core::ffi::c_long) as isize))
.offset(col as isize))
.negweight as ::core::ffi::c_int
+ (*(voidcostsbelow as *mut bidircostT).offset(col as isize)).negweight
as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal cost mode in SetLowerEdge(). This is a bug.\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
col += 1;
}
nmax = 0 as ::core::ffi::c_long;
reloffset = 0 as ::core::ffi::c_long;
iflow = minflow;
while iflow <= maxflow {
if *flowhistogram.offset((iflow - flowlimlo) as isize) > nmax {
nmax = *flowhistogram.offset((iflow - flowlimlo) as isize);
reloffset = iflow;
}
iflow += 1;
}
*(*bulkoffsets.offset((tilerow + 1 as ::core::ffi::c_long) as isize))
.offset(tilecol as isize) = (*(*bulkoffsets.offset(tilerow as isize))
.offset(tilecol as isize)
as ::core::ffi::c_long
- reloffset) as ::core::ffi::c_short;
col = 0 as ::core::ffi::c_long;
while col < ncol {
let ref mut fresh118 =
*(*loweredgeflows.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize);
*fresh118 = (*fresh118 as ::core::ffi::c_long - reloffset) as ::core::ffi::c_short;
col += 1;
}
free(flowhistogram as *mut ::core::ffi::c_void);
} else if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
col = 0 as ::core::ffi::c_long;
while col < ncol {
(*(*loweredgecosts.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
.offset = (LARGESHORT / 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
(*(*loweredgecosts.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
.sigsq = LARGESHORT as ::core::ffi::c_short;
(*(*loweredgecosts.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
.dzmax = LARGESHORT as ::core::ffi::c_short;
(*(*loweredgecosts.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize))
.laycost = 0 as ::core::ffi::c_short;
col += 1;
}
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
col = 0 as ::core::ffi::c_long;
while col < ncol {
(*(*loweredgesmoothcosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.offset = 0 as ::core::ffi::c_short;
(*(*loweredgesmoothcosts.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.sigsq = LARGESHORT as ::core::ffi::c_short;
col += 1;
}
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*(voidloweredgecosts as *mut *mut ::core::ffi::c_short)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize) = 0 as ::core::ffi::c_short;
col += 1;
}
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
col = 0 as ::core::ffi::c_long;
while col < ncol {
(*(*(voidloweredgecosts as *mut *mut bidircostT)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.posweight = 0 as ::core::ffi::c_short;
(*(*(voidloweredgecosts as *mut *mut bidircostT)
.offset(0 as ::core::ffi::c_int as isize))
.offset(col as isize))
.negweight = 0 as ::core::ffi::c_short;
col += 1;
}
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal cost mode in SetLowerEdge(). This is a bug.\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn SetLeftEdge(
mut nrow: ::core::ffi::c_long,
mut prevncol: ::core::ffi::c_long,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut voidcosts: *mut *mut ::core::ffi::c_void,
mut voidlastcosts: *mut *mut ::core::ffi::c_void,
mut unwphase: *mut *mut ::core::ffi::c_float,
mut lastunwphase: *mut *mut ::core::ffi::c_float,
mut voidleftedgecosts: *mut *mut ::core::ffi::c_void,
mut leftedgeflows: *mut *mut ::core::ffi::c_short,
mut params: *mut paramT,
mut bulkoffsets: *mut *mut ::core::ffi::c_short,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut reloffset: ::core::ffi::c_long = 0;
let mut dphi: ::core::ffi::c_double = 0.;
let mut dpsi: ::core::ffi::c_double = 0.;
let mut leftedgecosts: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut costs: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut lastcosts: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut leftedgesmoothcosts: *mut *mut smoothcostT =
::core::ptr::null_mut::<*mut smoothcostT>();
let mut smoothcosts: *mut *mut smoothcostT = ::core::ptr::null_mut::<*mut smoothcostT>();
let mut lastsmoothcosts: *mut *mut smoothcostT = ::core::ptr::null_mut::<*mut smoothcostT>();
let mut nshortcycle: ::core::ffi::c_long = 0;
leftedgecosts = voidleftedgecosts as *mut *mut costT;
costs = voidcosts as *mut *mut costT;
lastcosts = voidlastcosts as *mut *mut costT;
leftedgesmoothcosts = voidleftedgecosts as *mut *mut smoothcostT;
smoothcosts = voidcosts as *mut *mut smoothcostT;
lastsmoothcosts = voidlastcosts as *mut *mut smoothcostT;
if tilecol != 0 as ::core::ffi::c_long {
nshortcycle = (*params).nshortcycle;
reloffset = (*(*bulkoffsets.offset(tilerow as isize)).offset(tilecol as isize)
as ::core::ffi::c_int
- *(*bulkoffsets.offset(tilerow as isize))
.offset((tilecol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int) as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow {
dphi = (*(*unwphase.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize)
- *(*lastunwphase.offset(row as isize))
.offset((prevncol - 1 as ::core::ffi::c_long) as isize))
as ::core::ffi::c_double
/ TWOPI;
*(*leftedgeflows.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize) =
(LRound(dphi) as ::core::ffi::c_short as ::core::ffi::c_long - reloffset)
as ::core::ffi::c_short;
dpsi = dphi - floor(dphi);
if dpsi > 0.5f64 {
dpsi -= 1.0f64;
}
if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*leftedgecosts.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize))
.offset =
LRound(TILEDPSICOLFACTOR * nshortcycle as ::core::ffi::c_double * dpsi)
as ::core::ffi::c_short;
(*(*leftedgecosts.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize))
.sigsq = AvgSigSq(
(*(*costs.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.sigsq,
(*(*lastcosts.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((prevncol - 2 as ::core::ffi::c_long) as isize))
.sigsq,
);
if (*(*costs.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.dzmax as ::core::ffi::c_int
> (*(*lastcosts.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((prevncol - 2 as ::core::ffi::c_long) as isize))
.dzmax as ::core::ffi::c_int
{
(*(*leftedgecosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.dzmax = (*(*costs.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.dzmax;
} else {
(*(*leftedgecosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.dzmax = (*(*lastcosts
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((prevncol - 2 as ::core::ffi::c_long) as isize))
.dzmax;
}
if (*(*costs.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.laycost as ::core::ffi::c_int
> (*(*lastcosts.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((prevncol - 2 as ::core::ffi::c_long) as isize))
.laycost as ::core::ffi::c_int
{
(*(*leftedgecosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.laycost = (*(*costs.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.laycost;
} else {
(*(*leftedgecosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.laycost = (*(*lastcosts
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((prevncol - 2 as ::core::ffi::c_long) as isize))
.laycost;
}
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*leftedgesmoothcosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.offset = LRound(TILEDPSICOLFACTOR * nshortcycle as ::core::ffi::c_double * dpsi)
as ::core::ffi::c_short;
(*(*leftedgesmoothcosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.sigsq = AvgSigSq(
(*(*smoothcosts.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.sigsq,
(*(*lastsmoothcosts.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((prevncol - 2 as ::core::ffi::c_long) as isize))
.sigsq,
);
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
*(*(voidleftedgecosts as *mut *mut ::core::ffi::c_short).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize) =
((*(*(voidcosts as *mut *mut ::core::ffi::c_short)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize)
as ::core::ffi::c_int
+ *(*(voidlastcosts as *mut *mut ::core::ffi::c_short)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((prevncol - 2 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*(voidleftedgecosts as *mut *mut bidircostT).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.posweight = (((*(*(voidcosts as *mut *mut bidircostT)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.posweight as ::core::ffi::c_int
+ (*(*(voidlastcosts as *mut *mut bidircostT)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((prevncol - 2 as ::core::ffi::c_long) as isize))
.posweight as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
(*(*(voidleftedgecosts as *mut *mut bidircostT).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.negweight = (((*(*(voidcosts as *mut *mut bidircostT)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.negweight as ::core::ffi::c_int
+ (*(*(voidlastcosts as *mut *mut bidircostT)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((prevncol - 2 as ::core::ffi::c_long) as isize))
.negweight as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal cost mode in SetLeftEdge(). This is a bug.\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
row += 1;
}
} else if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
row = 0 as ::core::ffi::c_long;
while row < nrow {
(*(*leftedgecosts.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize))
.offset = (LARGESHORT / 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
(*(*leftedgecosts.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize))
.sigsq = LARGESHORT as ::core::ffi::c_short;
(*(*leftedgecosts.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize))
.dzmax = LARGESHORT as ::core::ffi::c_short;
(*(*leftedgecosts.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize))
.laycost = 0 as ::core::ffi::c_short;
row += 1;
}
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
row = 0 as ::core::ffi::c_long;
while row < nrow {
(*(*leftedgesmoothcosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.offset = 0 as ::core::ffi::c_short;
(*(*leftedgesmoothcosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.sigsq = LARGESHORT as ::core::ffi::c_short;
row += 1;
}
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
row = 0 as ::core::ffi::c_long;
while row < nrow {
*(*(voidleftedgecosts as *mut *mut ::core::ffi::c_short).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize) = 0 as ::core::ffi::c_short;
row += 1;
}
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
row = 0 as ::core::ffi::c_long;
while row < nrow {
(*(*(voidleftedgecosts as *mut *mut bidircostT).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.posweight = 0 as ::core::ffi::c_short;
(*(*(voidleftedgecosts as *mut *mut bidircostT).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.negweight = 0 as ::core::ffi::c_short;
row += 1;
}
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal cost mode in SetLeftEdge(). This is a bug.\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn SetRightEdge(
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut voidcosts: *mut *mut ::core::ffi::c_void,
mut voidnextcosts: *mut *mut ::core::ffi::c_void,
mut unwphase: *mut *mut ::core::ffi::c_float,
mut nextunwphase: *mut *mut ::core::ffi::c_float,
mut voidrightedgecosts: *mut *mut ::core::ffi::c_void,
mut rightedgeflows: *mut *mut ::core::ffi::c_short,
mut params: *mut paramT,
mut bulkoffsets: *mut *mut ::core::ffi::c_short,
) -> ::core::ffi::c_int {
let mut flowhistogram: *mut ::core::ffi::c_long =
::core::ptr::null_mut::<::core::ffi::c_long>();
let mut row: ::core::ffi::c_long = 0;
let mut iflow: ::core::ffi::c_long = 0;
let mut reloffset: ::core::ffi::c_long = 0;
let mut nmax: ::core::ffi::c_long = 0;
let mut flowlimhi: ::core::ffi::c_long = 0;
let mut flowlimlo: ::core::ffi::c_long = 0;
let mut maxflow: ::core::ffi::c_long = 0;
let mut minflow: ::core::ffi::c_long = 0;
let mut tempflow: ::core::ffi::c_long = 0;
let mut dphi: ::core::ffi::c_double = 0.;
let mut dpsi: ::core::ffi::c_double = 0.;
let mut rightedgecosts: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut costs: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut nextcosts: *mut *mut costT = ::core::ptr::null_mut::<*mut costT>();
let mut rightedgesmoothcosts: *mut *mut smoothcostT =
::core::ptr::null_mut::<*mut smoothcostT>();
let mut smoothcosts: *mut *mut smoothcostT = ::core::ptr::null_mut::<*mut smoothcostT>();
let mut nextsmoothcosts: *mut *mut smoothcostT = ::core::ptr::null_mut::<*mut smoothcostT>();
let mut nshortcycle: ::core::ffi::c_long = 0;
rightedgecosts = voidrightedgecosts as *mut *mut costT;
costs = voidcosts as *mut *mut costT;
nextcosts = voidnextcosts as *mut *mut costT;
rightedgesmoothcosts = voidrightedgecosts as *mut *mut smoothcostT;
smoothcosts = voidcosts as *mut *mut smoothcostT;
nextsmoothcosts = voidnextcosts as *mut *mut smoothcostT;
if tilecol != (*params).ntilecol - 1 as ::core::ffi::c_long {
nshortcycle = (*params).nshortcycle;
flowlimhi = LARGESHORT as ::core::ffi::c_long;
flowlimlo = -LARGESHORT as ::core::ffi::c_long;
flowhistogram = CAlloc(
(flowlimhi - flowlimlo + 1 as ::core::ffi::c_long) as size_t,
::core::mem::size_of::<::core::ffi::c_long>() as size_t,
) as *mut ::core::ffi::c_long;
minflow = flowlimhi;
maxflow = flowlimlo;
row = 0 as ::core::ffi::c_long;
while row < nrow {
dphi = (*(*nextunwphase.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize)
- *(*unwphase.offset(row as isize))
.offset((ncol - 1 as ::core::ffi::c_long) as isize))
as ::core::ffi::c_double
/ TWOPI;
tempflow = LRound(dphi) as ::core::ffi::c_short as ::core::ffi::c_long;
*(*rightedgeflows.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize) =
tempflow as ::core::ffi::c_short;
if tempflow < minflow {
if tempflow < flowlimlo {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Overflow in tile offset\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
minflow = tempflow;
}
if tempflow > maxflow {
if tempflow > flowlimhi {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Overflow in tile offset\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
maxflow = tempflow;
}
let ref mut fresh115 = *flowhistogram.offset((tempflow - flowlimlo) as isize);
*fresh115 += 1;
dpsi = dphi - floor(dphi);
if dpsi > 0.5f64 {
dpsi -= 1.0f64;
}
if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*rightedgecosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.offset = LRound(TILEDPSICOLFACTOR * nshortcycle as ::core::ffi::c_double * dpsi)
as ::core::ffi::c_short;
(*(*rightedgecosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.sigsq = AvgSigSq(
(*(*costs.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.sigsq,
(*(*nextcosts.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.sigsq,
);
if (*(*costs.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.dzmax as ::core::ffi::c_int
> (*(*nextcosts.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.dzmax as ::core::ffi::c_int
{
(*(*rightedgecosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.dzmax = (*(*costs.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.dzmax;
} else {
(*(*rightedgecosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.dzmax = (*(*nextcosts
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.dzmax;
}
if (*(*costs.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.laycost as ::core::ffi::c_int
> (*(*nextcosts.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.laycost as ::core::ffi::c_int
{
(*(*rightedgecosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.laycost = (*(*costs.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.laycost;
} else {
(*(*rightedgecosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.laycost = (*(*nextcosts
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.laycost;
}
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*rightedgesmoothcosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.offset = LRound(TILEDPSICOLFACTOR * nshortcycle as ::core::ffi::c_double * dpsi)
as ::core::ffi::c_short;
(*(*rightedgesmoothcosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.sigsq = AvgSigSq(
(*(*smoothcosts.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.sigsq,
(*(*nextsmoothcosts.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
.sigsq,
);
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
*(*(voidrightedgecosts as *mut *mut ::core::ffi::c_short).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize) =
((*(*(voidcosts as *mut *mut ::core::ffi::c_short)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
+ *(*(voidnextcosts as *mut *mut ::core::ffi::c_short)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize)
as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
(*(*(voidrightedgecosts as *mut *mut bidircostT).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.posweight = (((*(*(voidcosts as *mut *mut bidircostT)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.posweight as ::core::ffi::c_int
+ (*(*(voidnextcosts as *mut *mut bidircostT)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.posweight as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
(*(*(voidrightedgecosts as *mut *mut bidircostT).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.negweight = (((*(*(voidcosts as *mut *mut bidircostT)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.negweight as ::core::ffi::c_int
+ (*(*(voidnextcosts as *mut *mut bidircostT)
.offset((row + nrow - 1 as ::core::ffi::c_long) as isize))
.offset((ncol - 2 as ::core::ffi::c_long) as isize))
.negweight as ::core::ffi::c_int)
/ 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal cost mode in SetRightEdge(). This is a bug.\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
row += 1;
}
if tilerow == 0 as ::core::ffi::c_long {
nmax = 0 as ::core::ffi::c_long;
reloffset = 0 as ::core::ffi::c_long;
iflow = minflow;
while iflow <= maxflow {
if *flowhistogram.offset((iflow - flowlimlo) as isize) > nmax {
nmax = *flowhistogram.offset((iflow - flowlimlo) as isize);
reloffset = iflow;
}
iflow += 1;
}
*(*bulkoffsets.offset(tilerow as isize))
.offset((tilecol + 1 as ::core::ffi::c_long) as isize) =
(*(*bulkoffsets.offset(tilerow as isize)).offset(tilecol as isize)
as ::core::ffi::c_long
+ reloffset) as ::core::ffi::c_short;
} else {
reloffset = (*(*bulkoffsets.offset(tilerow as isize))
.offset((tilecol + 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
- *(*bulkoffsets.offset(tilerow as isize)).offset(tilecol as isize)
as ::core::ffi::c_int) as ::core::ffi::c_long;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
let ref mut fresh116 =
*(*rightedgeflows.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize);
*fresh116 = (*fresh116 as ::core::ffi::c_long - reloffset) as ::core::ffi::c_short;
row += 1;
}
free(flowhistogram as *mut ::core::ffi::c_void);
} else if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
row = 0 as ::core::ffi::c_long;
while row < nrow {
(*(*rightedgecosts.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize))
.offset = (LARGESHORT / 2 as ::core::ffi::c_int) as ::core::ffi::c_short;
(*(*rightedgecosts.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize))
.sigsq = LARGESHORT as ::core::ffi::c_short;
(*(*rightedgecosts.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize))
.dzmax = LARGESHORT as ::core::ffi::c_short;
(*(*rightedgecosts.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize))
.laycost = 0 as ::core::ffi::c_short;
row += 1;
}
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
row = 0 as ::core::ffi::c_long;
while row < nrow {
(*(*rightedgesmoothcosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.offset = 0 as ::core::ffi::c_short;
(*(*rightedgesmoothcosts.offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.sigsq = LARGESHORT as ::core::ffi::c_short;
row += 1;
}
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
row = 0 as ::core::ffi::c_long;
while row < nrow {
*(*(voidrightedgecosts as *mut *mut ::core::ffi::c_short).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize) = 0 as ::core::ffi::c_short;
row += 1;
}
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
row = 0 as ::core::ffi::c_long;
while row < nrow {
(*(*(voidrightedgecosts as *mut *mut bidircostT).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.posweight = 0 as ::core::ffi::c_short;
(*(*(voidrightedgecosts as *mut *mut bidircostT).offset(row as isize))
.offset(0 as ::core::ffi::c_int as isize))
.negweight = 0 as ::core::ffi::c_short;
row += 1;
}
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Illegal cost mode in SetRightEdge(). This is a bug.\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn AvgSigSq(
mut sigsq1: ::core::ffi::c_short,
mut sigsq2: ::core::ffi::c_short,
) -> ::core::ffi::c_short {
let mut sigsqavg: ::core::ffi::c_int = 0;
if sigsq1 as ::core::ffi::c_int == LARGESHORT || sigsq2 as ::core::ffi::c_int == LARGESHORT {
return 32000 as ::core::ffi::c_short;
}
sigsqavg = ceil(
0.5f64
* (sigsq1 as ::core::ffi::c_int + sigsq2 as ::core::ffi::c_int)
as ::core::ffi::c_double,
) as ::core::ffi::c_int;
sigsqavg = LClip(
sigsqavg as ::core::ffi::c_long,
-LARGESHORT as ::core::ffi::c_long,
LARGESHORT as ::core::ffi::c_long,
) as ::core::ffi::c_int;
return sigsqavg as ::core::ffi::c_short;
}
unsafe extern "C" fn TraceSecondaryArc(
mut primaryhead: *mut nodeT,
mut scndrynodes: *mut *mut nodeT,
mut nodesupp: *mut *mut nodesuppT,
mut scndryarcs: *mut *mut scndryarcT,
mut scndrycosts: *mut *mut *mut ::core::ffi::c_long,
mut nnewnodesptr: *mut ::core::ffi::c_long,
mut nnewarcsptr: *mut ::core::ffi::c_long,
mut tilerow: ::core::ffi::c_long,
mut tilecol: ::core::ffi::c_long,
mut flowmax: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut prevnrow: ::core::ffi::c_long,
mut prevncol: ::core::ffi::c_long,
mut params: *mut paramT,
mut tilecosts: *mut *mut ::core::ffi::c_void,
mut rightedgecosts: *mut *mut ::core::ffi::c_void,
mut loweredgecosts: *mut *mut ::core::ffi::c_void,
mut leftedgecosts: *mut *mut ::core::ffi::c_void,
mut upperedgecosts: *mut *mut ::core::ffi::c_void,
mut tileflows: *mut *mut ::core::ffi::c_short,
mut rightedgeflows: *mut *mut ::core::ffi::c_short,
mut loweredgeflows: *mut *mut ::core::ffi::c_short,
mut leftedgeflows: *mut *mut ::core::ffi::c_short,
mut upperedgeflows: *mut *mut ::core::ffi::c_short,
mut updatednontilenodesptr: *mut *mut *mut nodeT,
mut nupdatednontilenodesptr: *mut ::core::ffi::c_long,
mut updatednontilenodesizeptr: *mut ::core::ffi::c_long,
mut inontilenodeoutarcptr: *mut *mut ::core::ffi::c_short,
mut totarclenptr: *mut ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut i: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut nnewnodes: ::core::ffi::c_long = 0;
let mut arclen: ::core::ffi::c_long = 0;
let mut ntilerow: ::core::ffi::c_long = 0;
let mut ntilecol: ::core::ffi::c_long = 0;
let mut arcnum: ::core::ffi::c_long = 0;
let mut tilenum: ::core::ffi::c_long = 0;
let mut nflow: ::core::ffi::c_long = 0;
let mut primaryarcrow: ::core::ffi::c_long = 0;
let mut primaryarccol: ::core::ffi::c_long = 0;
let mut poscost: ::core::ffi::c_long = 0;
let mut negcost: ::core::ffi::c_long = 0;
let mut nomcost: ::core::ffi::c_long = 0;
let mut nnrow: ::core::ffi::c_long = 0;
let mut nncol: ::core::ffi::c_long = 0;
let mut calccostnrow: ::core::ffi::c_long = 0;
let mut nnewarcs: ::core::ffi::c_long = 0;
let mut arroffset: ::core::ffi::c_long = 0;
let mut nshortcycle: ::core::ffi::c_long = 0;
let mut mincost: ::core::ffi::c_long = 0;
let mut mincostflow: ::core::ffi::c_long = 0;
let mut minweight: ::core::ffi::c_long = 0;
let mut maxcost: ::core::ffi::c_long = 0;
let mut scndrycostarr: *mut ::core::ffi::c_long =
::core::ptr::null_mut::<::core::ffi::c_long>();
let mut sigsq: ::core::ffi::c_double = 0.;
let mut sumsigsqinv: ::core::ffi::c_double = 0.;
let mut tempdouble: ::core::ffi::c_double = 0.;
let mut tileedgearcweight: ::core::ffi::c_double = 0.;
let mut flows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut costs: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
let mut tempnode: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut primarytail: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut scndrytail: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut scndryhead: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut primarydummy: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut scndrydummy: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut supptail: *mut nodesuppT = ::core::ptr::null_mut::<nodesuppT>();
let mut supphead: *mut nodesuppT = ::core::ptr::null_mut::<nodesuppT>();
let mut suppdummy: *mut nodesuppT = ::core::ptr::null_mut::<nodesuppT>();
let mut newarc: *mut scndryarcT = ::core::ptr::null_mut::<scndryarcT>();
let mut primaryarcdir: ::core::ffi::c_schar = 0;
let mut zerocost: ::core::ffi::c_schar = 0;
if (*primaryhead).pred.is_null()
|| tilerow != 0 as ::core::ffi::c_long
&& (*primaryhead).row == 0 as ::core::ffi::c_int
&& (*(*primaryhead).pred).row == 0 as ::core::ffi::c_int
|| tilecol != 0 as ::core::ffi::c_long
&& (*primaryhead).col == 0 as ::core::ffi::c_int
&& (*(*primaryhead).pred).col == 0 as ::core::ffi::c_int
{
return 0 as ::core::ffi::c_int;
}
ntilerow = (*params).ntilerow;
ntilecol = (*params).ntilecol;
nnrow = nrow + 1 as ::core::ffi::c_long;
nncol = ncol + 1 as ::core::ffi::c_long;
tilenum = tilerow * ntilecol + tilecol;
scndrycostarr = MAlloc(
((2 as ::core::ffi::c_long * flowmax + 2 as ::core::ffi::c_long) as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_long>() as size_t),
) as *mut ::core::ffi::c_long;
tileedgearcweight = (*params).tileedgeweight;
nshortcycle = (*params).nshortcycle;
zerocost = FALSE as ::core::ffi::c_schar;
arroffset = 0 as ::core::ffi::c_long;
sigsq = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
loop {
arclen = 0 as ::core::ffi::c_long;
sumsigsqinv = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
nflow = 1 as ::core::ffi::c_long;
while nflow <= 2 as ::core::ffi::c_long * flowmax {
*scndrycostarr.offset(nflow as isize) = 0 as ::core::ffi::c_long;
nflow += 1;
}
primarytail = (*primaryhead).pred as *mut nodeT;
tempnode = primaryhead;
loop {
arclen += 1;
if (*tempnode).col == (*primarytail).col + 1 as ::core::ffi::c_int {
primaryarcdir = 1 as ::core::ffi::c_schar;
primaryarccol = (*primarytail).col as ::core::ffi::c_long;
if (*primarytail).row == 0 as ::core::ffi::c_int {
if tilerow == 0 as ::core::ffi::c_long {
zerocost = TRUE as ::core::ffi::c_schar;
} else {
primaryarcrow = 0 as ::core::ffi::c_long;
costs = upperedgecosts;
flows = upperedgeflows;
calccostnrow = 2 as ::core::ffi::c_long;
}
} else if (*primarytail).row as ::core::ffi::c_long
== nnrow - 1 as ::core::ffi::c_long
{
if tilerow == ntilerow - 1 as ::core::ffi::c_long {
zerocost = TRUE as ::core::ffi::c_schar;
} else {
primaryarcrow = 0 as ::core::ffi::c_long;
costs = loweredgecosts;
flows = loweredgeflows;
calccostnrow = 2 as ::core::ffi::c_long;
}
} else {
primaryarcrow =
((*primarytail).row - 1 as ::core::ffi::c_int) as ::core::ffi::c_long;
costs = tilecosts;
flows = tileflows;
calccostnrow = nrow;
}
} else if (*tempnode).row == (*primarytail).row + 1 as ::core::ffi::c_int {
primaryarcdir = 1 as ::core::ffi::c_schar;
if (*primarytail).col == 0 as ::core::ffi::c_int {
if tilecol == 0 as ::core::ffi::c_long {
zerocost = TRUE as ::core::ffi::c_schar;
} else {
primaryarcrow = (*primarytail).row as ::core::ffi::c_long;
primaryarccol = 0 as ::core::ffi::c_long;
costs = leftedgecosts;
flows = leftedgeflows;
calccostnrow = 0 as ::core::ffi::c_long;
}
} else if (*primarytail).col as ::core::ffi::c_long
== nncol - 1 as ::core::ffi::c_long
{
if tilecol == ntilecol - 1 as ::core::ffi::c_long {
zerocost = TRUE as ::core::ffi::c_schar;
} else {
primaryarcrow = (*primarytail).row as ::core::ffi::c_long;
primaryarccol = 0 as ::core::ffi::c_long;
costs = rightedgecosts;
flows = rightedgeflows;
calccostnrow = 0 as ::core::ffi::c_long;
}
} else {
primaryarcrow =
(*primarytail).row as ::core::ffi::c_long + nrow - 1 as ::core::ffi::c_long;
primaryarccol =
((*primarytail).col - 1 as ::core::ffi::c_int) as ::core::ffi::c_long;
costs = tilecosts;
flows = tileflows;
calccostnrow = nrow;
}
} else if (*tempnode).col == (*primarytail).col - 1 as ::core::ffi::c_int {
primaryarcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_schar;
primaryarccol =
((*primarytail).col - 1 as ::core::ffi::c_int) as ::core::ffi::c_long;
if (*primarytail).row == 0 as ::core::ffi::c_int {
if tilerow == 0 as ::core::ffi::c_long {
zerocost = TRUE as ::core::ffi::c_schar;
} else {
primaryarcrow = 0 as ::core::ffi::c_long;
costs = upperedgecosts;
flows = upperedgeflows;
calccostnrow = 2 as ::core::ffi::c_long;
}
} else if (*primarytail).row as ::core::ffi::c_long
== nnrow - 1 as ::core::ffi::c_long
{
if tilerow == ntilerow - 1 as ::core::ffi::c_long {
zerocost = TRUE as ::core::ffi::c_schar;
} else {
primaryarcrow = 0 as ::core::ffi::c_long;
costs = loweredgecosts;
flows = loweredgeflows;
calccostnrow = 2 as ::core::ffi::c_long;
}
} else {
primaryarcrow =
((*primarytail).row - 1 as ::core::ffi::c_int) as ::core::ffi::c_long;
costs = tilecosts;
flows = tileflows;
calccostnrow = nrow;
}
} else {
primaryarcdir = -(1 as ::core::ffi::c_int) as ::core::ffi::c_schar;
if (*primarytail).col == 0 as ::core::ffi::c_int {
if tilecol == 0 as ::core::ffi::c_long {
zerocost = TRUE as ::core::ffi::c_schar;
} else {
primaryarcrow =
((*primarytail).row - 1 as ::core::ffi::c_int) as ::core::ffi::c_long;
primaryarccol = 0 as ::core::ffi::c_long;
costs = leftedgecosts;
flows = leftedgeflows;
calccostnrow = 0 as ::core::ffi::c_long;
}
} else if (*primarytail).col as ::core::ffi::c_long
== nncol - 1 as ::core::ffi::c_long
{
if tilecol == ntilecol - 1 as ::core::ffi::c_long {
zerocost = TRUE as ::core::ffi::c_schar;
} else {
primaryarcrow =
((*primarytail).row - 1 as ::core::ffi::c_int) as ::core::ffi::c_long;
primaryarccol = 0 as ::core::ffi::c_long;
costs = rightedgecosts;
flows = rightedgeflows;
calccostnrow = 0 as ::core::ffi::c_long;
}
} else {
primaryarcrow =
(*primarytail).row as ::core::ffi::c_long + nrow - 2 as ::core::ffi::c_long;
primaryarccol =
((*primarytail).col - 1 as ::core::ffi::c_int) as ::core::ffi::c_long;
costs = tilecosts;
flows = tileflows;
calccostnrow = nrow;
}
}
if zerocost == 0 {
let ref mut fresh96 =
*(*flows.offset(primaryarcrow as isize)).offset(primaryarccol as isize);
*fresh96 = (*fresh96 as ::core::ffi::c_long
- primaryarcdir as ::core::ffi::c_long * arroffset)
as ::core::ffi::c_short;
nomcost = EvalCost.expect("non-null function pointer")(
costs,
flows,
primaryarcrow,
primaryarccol,
calccostnrow,
params,
);
nflow = 1 as ::core::ffi::c_long;
while nflow <= flowmax {
let ref mut fresh97 =
*(*flows.offset(primaryarcrow as isize)).offset(primaryarccol as isize);
*fresh97 = (*fresh97 as ::core::ffi::c_long
+ primaryarcdir as ::core::ffi::c_long * nflow)
as ::core::ffi::c_short;
poscost = EvalCost.expect("non-null function pointer")(
costs,
flows,
primaryarcrow,
primaryarccol,
calccostnrow,
params,
);
let ref mut fresh98 =
*(*flows.offset(primaryarcrow as isize)).offset(primaryarccol as isize);
*fresh98 = (*fresh98 as ::core::ffi::c_long
- (2 as ::core::ffi::c_int * primaryarcdir as ::core::ffi::c_int)
as ::core::ffi::c_long
* nflow) as ::core::ffi::c_short;
negcost = EvalCost.expect("non-null function pointer")(
costs,
flows,
primaryarcrow,
primaryarccol,
calccostnrow,
params,
);
let ref mut fresh99 =
*(*flows.offset(primaryarcrow as isize)).offset(primaryarccol as isize);
*fresh99 = (*fresh99 as ::core::ffi::c_long
+ primaryarcdir as ::core::ffi::c_long * nflow)
as ::core::ffi::c_short;
tempdouble = (*scndrycostarr.offset(nflow as isize) + (poscost - nomcost))
as ::core::ffi::c_double;
if tempdouble > LARGEINT as ::core::ffi::c_double {
*scndrycostarr.offset(nflow as isize) = LARGEINT as ::core::ffi::c_long;
} else if tempdouble < -LARGEINT as ::core::ffi::c_double {
*scndrycostarr.offset(nflow as isize) = -LARGEINT as ::core::ffi::c_long;
} else {
*scndrycostarr.offset(nflow as isize) += poscost - nomcost;
}
tempdouble = (*scndrycostarr.offset((nflow + flowmax) as isize)
+ (negcost - nomcost))
as ::core::ffi::c_double;
if tempdouble > LARGEINT as ::core::ffi::c_double {
*scndrycostarr.offset((nflow + flowmax) as isize) =
LARGEINT as ::core::ffi::c_long;
} else if tempdouble < -LARGEINT as ::core::ffi::c_double {
*scndrycostarr.offset((nflow + flowmax) as isize) =
-LARGEINT as ::core::ffi::c_long;
} else {
*scndrycostarr.offset((nflow + flowmax) as isize) += negcost - nomcost;
}
nflow += 1;
}
let ref mut fresh100 =
*(*flows.offset(primaryarcrow as isize)).offset(primaryarccol as isize);
*fresh100 = (*fresh100 as ::core::ffi::c_long
+ primaryarcdir as ::core::ffi::c_long * arroffset)
as ::core::ffi::c_short;
if CalcCost
== Some(
CalcCostTopo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostDefo
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
sigsq = (*(*(costs as *mut *mut costT).offset(primaryarcrow as isize))
.offset(primaryarccol as isize))
.sigsq as ::core::ffi::c_double;
} else if CalcCost
== Some(
CalcCostSmooth
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
sigsq = (*(*(costs as *mut *mut smoothcostT).offset(primaryarcrow as isize))
.offset(primaryarccol as isize))
.sigsq as ::core::ffi::c_double;
} else if CalcCost
== Some(
CalcCostL0
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLP
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
minweight = *(*(costs as *mut *mut ::core::ffi::c_short)
.offset(primaryarcrow as isize))
.offset(primaryarccol as isize)
as ::core::ffi::c_long;
if minweight < 1 as ::core::ffi::c_long {
sigsq = LARGESHORT as ::core::ffi::c_double;
} else {
sigsq = 1.0f64 / minweight as ::core::ffi::c_double;
}
} else if CalcCost
== Some(
CalcCostL0BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL1BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostL2BiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
|| CalcCost
== Some(
CalcCostLPBiDir
as unsafe extern "C" fn(
*mut *mut ::core::ffi::c_void,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
::core::ffi::c_long,
*mut paramT,
*mut ::core::ffi::c_long,
*mut ::core::ffi::c_long,
) -> (),
)
{
minweight = LMin(
(*(*(costs as *mut *mut bidircostT).offset(primaryarcrow as isize))
.offset(primaryarccol as isize))
.posweight as ::core::ffi::c_long,
(*(*(costs as *mut *mut bidircostT).offset(primaryarcrow as isize))
.offset(primaryarccol as isize))
.negweight as ::core::ffi::c_long,
);
if minweight < 1 as ::core::ffi::c_long {
sigsq = LARGESHORT as ::core::ffi::c_double;
} else {
sigsq = 1.0f64 / minweight as ::core::ffi::c_double;
}
}
if sigsq < LARGESHORT as ::core::ffi::c_double {
sumsigsqinv += 1.0f64 / sigsq;
}
}
if (*primarytail).group == ONTREE {
break;
}
tempnode = primarytail;
primarytail = (*primarytail).pred as *mut nodeT;
}
if zerocost != 0 {
break;
}
mincost = 0 as ::core::ffi::c_long;
maxcost = 0 as ::core::ffi::c_long;
mincostflow = 0 as ::core::ffi::c_long;
nflow = 1 as ::core::ffi::c_long;
while nflow <= flowmax {
if *scndrycostarr.offset(nflow as isize) < mincost {
mincost = *scndrycostarr.offset(nflow as isize);
mincostflow = nflow;
}
if *scndrycostarr.offset((flowmax + nflow) as isize) < mincost {
mincost = *scndrycostarr.offset((flowmax + nflow) as isize);
mincostflow = -nflow;
}
if *scndrycostarr.offset(nflow as isize) > maxcost {
maxcost = *scndrycostarr.offset(nflow as isize);
}
if *scndrycostarr.offset((flowmax + nflow) as isize) > maxcost {
maxcost = *scndrycostarr.offset((flowmax + nflow) as isize);
}
nflow += 1;
}
if maxcost == mincost {
zerocost = TRUE as ::core::ffi::c_schar;
sumsigsqinv = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
}
if mincostflow == 0 as ::core::ffi::c_long {
break;
}
if mincostflow == flowmax {
arroffset -= floor(1.5f64 * flowmax as ::core::ffi::c_double) as ::core::ffi::c_long;
} else if mincostflow == -flowmax {
arroffset += floor(1.5f64 * flowmax as ::core::ffi::c_double) as ::core::ffi::c_long;
} else {
arroffset -= mincostflow;
}
}
if primaryhead == primarytail {
free(scndrycostarr as *mut ::core::ffi::c_void);
return 0 as ::core::ffi::c_int;
}
if zerocost != 0 {
*scndrycostarr.offset(0 as ::core::ffi::c_int as isize) = 0 as ::core::ffi::c_long;
nflow = 1 as ::core::ffi::c_long;
while nflow <= 2 as ::core::ffi::c_long * flowmax {
*scndrycostarr.offset(nflow as isize) = 0 as ::core::ffi::c_long;
nflow += 1;
}
*scndrycostarr
.offset((2 as ::core::ffi::c_long * flowmax + 1 as ::core::ffi::c_long) as isize) =
-LARGEINT as ::core::ffi::c_long;
} else {
if (*primaryhead).row == (*primarytail).row
&& ((*primaryhead).row == 0 as ::core::ffi::c_int
|| (*primaryhead).row as ::core::ffi::c_long == nnrow - 1 as ::core::ffi::c_long)
|| (*primaryhead).col == (*primarytail).col
&& ((*primaryhead).col == 0 as ::core::ffi::c_int
|| (*primaryhead).col as ::core::ffi::c_long
== nncol - 1 as ::core::ffi::c_long)
{
nflow = 1 as ::core::ffi::c_long;
while nflow <= 2 as ::core::ffi::c_long * flowmax {
tempdouble = *scndrycostarr.offset(nflow as isize) as ::core::ffi::c_double
* tileedgearcweight;
if tempdouble > LARGEINT as ::core::ffi::c_double {
*scndrycostarr.offset(nflow as isize) = LARGEINT as ::core::ffi::c_long;
} else if tempdouble < -LARGEINT as ::core::ffi::c_double {
*scndrycostarr.offset(nflow as isize) = -LARGEINT as ::core::ffi::c_long;
} else {
*scndrycostarr.offset(nflow as isize) = LRound(tempdouble);
}
nflow += 1;
}
sumsigsqinv *= tileedgearcweight;
}
tempdouble = sumsigsqinv
* nshortcycle as ::core::ffi::c_double
* nshortcycle as ::core::ffi::c_double;
if tempdouble < LARGEINT as ::core::ffi::c_double {
*scndrycostarr
.offset((2 as ::core::ffi::c_long * flowmax + 1 as ::core::ffi::c_long) as isize) =
LRound(tempdouble);
} else {
*scndrycostarr
.offset((2 as ::core::ffi::c_long * flowmax + 1 as ::core::ffi::c_long) as isize) =
LARGEINT as ::core::ffi::c_long;
}
*scndrycostarr.offset(0 as ::core::ffi::c_int as isize) = arroffset;
}
if (*primarytail).row == 0 as ::core::ffi::c_int && tilerow != 0 as ::core::ffi::c_long {
scndrytail = FindScndryNode(
scndrynodes,
nodesupp,
(tilerow - 1 as ::core::ffi::c_long) * ntilecol + tilecol,
prevnrow,
(*primarytail).col as ::core::ffi::c_long,
);
} else if (*primarytail).col == 0 as ::core::ffi::c_int && tilecol != 0 as ::core::ffi::c_long {
scndrytail = FindScndryNode(
scndrynodes,
nodesupp,
tilerow * ntilecol + (tilecol - 1 as ::core::ffi::c_long),
(*primarytail).row as ::core::ffi::c_long,
prevncol,
);
} else {
scndrytail = FindScndryNode(
scndrynodes,
nodesupp,
tilenum,
(*primarytail).row as ::core::ffi::c_long,
(*primarytail).col as ::core::ffi::c_long,
);
}
if (*primaryhead).row == 0 as ::core::ffi::c_int && tilerow != 0 as ::core::ffi::c_long {
scndryhead = FindScndryNode(
scndrynodes,
nodesupp,
(tilerow - 1 as ::core::ffi::c_long) * ntilecol + tilecol,
prevnrow,
(*primaryhead).col as ::core::ffi::c_long,
);
} else if (*primaryhead).col == 0 as ::core::ffi::c_int && tilecol != 0 as ::core::ffi::c_long {
scndryhead = FindScndryNode(
scndrynodes,
nodesupp,
tilerow * ntilecol + (tilecol - 1 as ::core::ffi::c_long),
(*primaryhead).row as ::core::ffi::c_long,
prevncol,
);
} else {
scndryhead = FindScndryNode(
scndrynodes,
nodesupp,
tilenum,
(*primaryhead).row as ::core::ffi::c_long,
(*primaryhead).col as ::core::ffi::c_long,
);
}
row = (*scndrytail).row as ::core::ffi::c_long;
col = (*scndrytail).col as ::core::ffi::c_long;
i = 0 as ::core::ffi::c_long;
while i
< (*(*nodesupp.offset(row as isize)).offset(col as isize)).noutarcs as ::core::ffi::c_long
{
tempnode = *(*(*nodesupp.offset(row as isize)).offset(col as isize))
.neighbornodes
.offset(i as isize);
if (*(*(*nodesupp.offset(row as isize)).offset(col as isize))
.outarcs
.offset(i as isize))
.is_null()
&& (*tempnode).row == (*primaryhead).row
&& (*tempnode).col == (*primaryhead).col
|| !(*(*(*nodesupp.offset(row as isize)).offset(col as isize))
.outarcs
.offset(i as isize))
.is_null()
&& (*tempnode).row == (*scndryhead).row
&& (*tempnode).col == (*scndryhead).col
{
primarydummy = (*primaryhead).pred as *mut nodeT;
if (*primarydummy).group != ONTREE {
free(scndrycostarr as *mut ::core::ffi::c_void);
(*primarydummy).group = ONTREE;
*nnewnodesptr += 1;
nnewnodes = *nnewnodesptr;
let ref mut fresh101 = *scndrynodes.offset(tilenum as isize);
*fresh101 = ReAlloc(
*scndrynodes.offset(tilenum as isize) as *mut ::core::ffi::c_void,
(nnewnodes as size_t).wrapping_mul(::core::mem::size_of::<nodeT>() as size_t),
) as *mut nodeT;
scndrydummy = (*scndrynodes.offset(tilenum as isize))
.offset((nnewnodes - 1 as ::core::ffi::c_long) as isize)
as *mut nodeT;
let ref mut fresh102 = *nodesupp.offset(tilenum as isize);
*fresh102 = ReAlloc(
*nodesupp.offset(tilenum as isize) as *mut ::core::ffi::c_void,
(nnewnodes as size_t)
.wrapping_mul(::core::mem::size_of::<nodesuppT>() as size_t),
) as *mut nodesuppT;
suppdummy = (*nodesupp.offset(tilenum as isize))
.offset((nnewnodes - 1 as ::core::ffi::c_long) as isize)
as *mut nodesuppT;
(*scndrydummy).row = tilenum as ::core::ffi::c_int;
(*scndrydummy).col = (nnewnodes - 1 as ::core::ffi::c_long) as ::core::ffi::c_int;
(*suppdummy).row = (*primarydummy).row;
(*suppdummy).col = (*primarydummy).col;
(*suppdummy).noutarcs = 0 as ::core::ffi::c_int;
(*suppdummy).neighbornodes = ::core::ptr::null_mut::<*mut nodeT>();
(*suppdummy).outarcs = ::core::ptr::null_mut::<*mut scndryarcT>();
TraceSecondaryArc(
primarydummy,
scndrynodes,
nodesupp,
scndryarcs,
scndrycosts,
nnewnodesptr,
nnewarcsptr,
tilerow,
tilecol,
flowmax,
nrow,
ncol,
prevnrow,
prevncol,
params,
tilecosts,
rightedgecosts,
loweredgecosts,
leftedgecosts,
upperedgecosts,
tileflows,
rightedgeflows,
loweredgeflows,
leftedgeflows,
upperedgeflows,
updatednontilenodesptr,
nupdatednontilenodesptr,
updatednontilenodesizeptr,
inontilenodeoutarcptr,
totarclenptr,
);
TraceSecondaryArc(
primaryhead,
scndrynodes,
nodesupp,
scndryarcs,
scndrycosts,
nnewnodesptr,
nnewarcsptr,
tilerow,
tilecol,
flowmax,
nrow,
ncol,
prevnrow,
prevncol,
params,
tilecosts,
rightedgecosts,
loweredgecosts,
leftedgecosts,
upperedgecosts,
tileflows,
rightedgeflows,
loweredgeflows,
leftedgeflows,
upperedgeflows,
updatednontilenodesptr,
nupdatednontilenodesptr,
updatednontilenodesizeptr,
inontilenodeoutarcptr,
totarclenptr,
);
} else {
arcnum = 0 as ::core::ffi::c_long;
while !((*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).from
== primarytail
&& (*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).to
== primaryhead)
{
if (*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).from
== primaryhead
&& (*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).to
== primarytail
{
let ref mut fresh103 =
(*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).from;
*fresh103 = primarytail;
let ref mut fresh104 =
(*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).to;
*fresh104 = primaryhead;
break;
} else {
arcnum += 1;
}
}
free(
*(*scndrycosts.offset(tilenum as isize)).offset(arcnum as isize)
as *mut ::core::ffi::c_void,
);
let ref mut fresh105 =
*(*scndrycosts.offset(tilenum as isize)).offset(arcnum as isize);
*fresh105 = scndrycostarr;
if (*primarytail).col == (*primaryhead).col + 1 as ::core::ffi::c_int {
(*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).fromdir =
RIGHT as ::core::ffi::c_schar;
} else if (*primarytail).row == (*primaryhead).row + 1 as ::core::ffi::c_int {
(*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).fromdir =
DOWN as ::core::ffi::c_schar;
} else if (*primarytail).col == (*primaryhead).col - 1 as ::core::ffi::c_int {
(*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).fromdir =
LEFT as ::core::ffi::c_schar;
} else {
(*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).fromdir =
UP as ::core::ffi::c_schar;
}
}
return 0 as ::core::ffi::c_int;
}
i += 1;
}
*nnewarcsptr += 1;
nnewarcs = *nnewarcsptr;
if nnewarcs > SHRT_MAX as ::core::ffi::c_long {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Exceeded maximum number of secondary arcs\nDecrease TILECOSTTHRESH and/or increase MINREGIONSIZE\n\0"
as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
let ref mut fresh106 = *scndryarcs.offset(tilenum as isize);
*fresh106 = ReAlloc(
*scndryarcs.offset(tilenum as isize) as *mut ::core::ffi::c_void,
(nnewarcs as size_t).wrapping_mul(::core::mem::size_of::<scndryarcT>() as size_t),
) as *mut scndryarcT;
newarc = (*scndryarcs.offset(tilenum as isize))
.offset((nnewarcs - 1 as ::core::ffi::c_long) as isize) as *mut scndryarcT;
(*newarc).arcrow = tilenum as ::core::ffi::c_int;
(*newarc).arccol = (nnewarcs - 1 as ::core::ffi::c_long) as ::core::ffi::c_int;
let ref mut fresh107 = *scndrycosts.offset(tilenum as isize);
*fresh107 = ReAlloc(
*scndrycosts.offset(tilenum as isize) as *mut ::core::ffi::c_void,
(nnewarcs as size_t)
.wrapping_mul(::core::mem::size_of::<*mut ::core::ffi::c_long>() as size_t),
) as *mut *mut ::core::ffi::c_long;
let ref mut fresh108 = *(*scndrycosts.offset(tilenum as isize))
.offset((nnewarcs - 1 as ::core::ffi::c_long) as isize);
*fresh108 = scndrycostarr;
supptail = (*nodesupp.offset((*scndrytail).row as isize)).offset((*scndrytail).col as isize)
as *mut nodesuppT;
supphead = (*nodesupp.offset((*scndryhead).row as isize)).offset((*scndryhead).col as isize)
as *mut nodesuppT;
(*supptail).noutarcs += 1;
(*supptail).neighbornodes = ReAlloc(
(*supptail).neighbornodes as *mut ::core::ffi::c_void,
((*supptail).noutarcs as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
let ref mut fresh109 = *(*supptail)
.neighbornodes
.offset(((*supptail).noutarcs - 1 as ::core::ffi::c_int) as isize);
*fresh109 = primaryhead;
(*primarytail).level = (*scndrytail).row as ::core::ffi::c_uint;
(*primarytail).incost = (*scndrytail).col;
(*supptail).outarcs = ReAlloc(
(*supptail).outarcs as *mut ::core::ffi::c_void,
((*supptail).noutarcs as size_t)
.wrapping_mul(::core::mem::size_of::<*mut scndryarcT>() as size_t),
) as *mut *mut scndryarcT;
let ref mut fresh110 = *(*supptail)
.outarcs
.offset(((*supptail).noutarcs - 1 as ::core::ffi::c_int) as isize);
*fresh110 = ::core::ptr::null_mut::<scndryarcT>();
(*supphead).noutarcs += 1;
(*supphead).neighbornodes = ReAlloc(
(*supphead).neighbornodes as *mut ::core::ffi::c_void,
((*supphead).noutarcs as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
let ref mut fresh111 = *(*supphead)
.neighbornodes
.offset(((*supphead).noutarcs - 1 as ::core::ffi::c_int) as isize);
*fresh111 = primarytail;
(*primaryhead).level = (*scndryhead).row as ::core::ffi::c_uint;
(*primaryhead).incost = (*scndryhead).col;
(*supphead).outarcs = ReAlloc(
(*supphead).outarcs as *mut ::core::ffi::c_void,
((*supphead).noutarcs as size_t)
.wrapping_mul(::core::mem::size_of::<*mut scndryarcT>() as size_t),
) as *mut *mut scndryarcT;
let ref mut fresh112 = *(*supphead)
.outarcs
.offset(((*supphead).noutarcs - 1 as ::core::ffi::c_int) as isize);
*fresh112 = ::core::ptr::null_mut::<scndryarcT>();
if (*scndrytail).row as ::core::ffi::c_long != tilenum {
*nupdatednontilenodesptr += 1;
if *nupdatednontilenodesptr == *updatednontilenodesizeptr {
*updatednontilenodesizeptr += INITARRSIZE as ::core::ffi::c_long;
*updatednontilenodesptr = ReAlloc(
*updatednontilenodesptr as *mut ::core::ffi::c_void,
(*updatednontilenodesizeptr as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
*inontilenodeoutarcptr = ReAlloc(
*inontilenodeoutarcptr as *mut ::core::ffi::c_void,
(*updatednontilenodesizeptr as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_short>() as size_t),
) as *mut ::core::ffi::c_short;
}
let ref mut fresh113 = *(*updatednontilenodesptr)
.offset((*nupdatednontilenodesptr - 1 as ::core::ffi::c_long) as isize);
*fresh113 = scndrytail;
*(*inontilenodeoutarcptr)
.offset((*nupdatednontilenodesptr - 1 as ::core::ffi::c_long) as isize) =
((*supptail).noutarcs - 1 as ::core::ffi::c_int) as ::core::ffi::c_short;
}
if (*scndryhead).row as ::core::ffi::c_long != tilenum {
*nupdatednontilenodesptr += 1;
if *nupdatednontilenodesptr == *updatednontilenodesizeptr {
*updatednontilenodesizeptr += INITARRSIZE as ::core::ffi::c_long;
*updatednontilenodesptr = ReAlloc(
*updatednontilenodesptr as *mut ::core::ffi::c_void,
(*updatednontilenodesizeptr as size_t)
.wrapping_mul(::core::mem::size_of::<*mut nodeT>() as size_t),
) as *mut *mut nodeT;
*inontilenodeoutarcptr = ReAlloc(
*inontilenodeoutarcptr as *mut ::core::ffi::c_void,
(*updatednontilenodesizeptr as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_short>() as size_t),
) as *mut ::core::ffi::c_short;
}
let ref mut fresh114 = *(*updatednontilenodesptr)
.offset((*nupdatednontilenodesptr - 1 as ::core::ffi::c_long) as isize);
*fresh114 = scndryhead;
*(*inontilenodeoutarcptr)
.offset((*nupdatednontilenodesptr - 1 as ::core::ffi::c_long) as isize) =
((*supphead).noutarcs - 1 as ::core::ffi::c_int) as ::core::ffi::c_short;
}
(*newarc).from = primarytail;
(*newarc).to = primaryhead;
tempnode = (*primaryhead).pred as *mut nodeT;
if (*tempnode).col == (*primaryhead).col + 1 as ::core::ffi::c_int {
(*newarc).fromdir = RIGHT as ::core::ffi::c_schar;
} else if (*tempnode).row == (*primaryhead).row + 1 as ::core::ffi::c_int {
(*newarc).fromdir = DOWN as ::core::ffi::c_schar;
} else if (*tempnode).col == (*primaryhead).col - 1 as ::core::ffi::c_int {
(*newarc).fromdir = LEFT as ::core::ffi::c_schar;
} else {
(*newarc).fromdir = UP as ::core::ffi::c_schar;
}
*totarclenptr += arclen;
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn FindScndryNode(
mut scndrynodes: *mut *mut nodeT,
mut nodesupp: *mut *mut nodesuppT,
mut tilenum: ::core::ffi::c_long,
mut primaryrow: ::core::ffi::c_long,
mut primarycol: ::core::ffi::c_long,
) -> *mut nodeT {
let mut nodenum: ::core::ffi::c_long = 0;
let mut nodesuppptr: *mut nodesuppT = ::core::ptr::null_mut::<nodesuppT>();
nodesuppptr = *nodesupp.offset(tilenum as isize);
nodenum = 0 as ::core::ffi::c_long;
while (*nodesuppptr.offset(nodenum as isize)).row as ::core::ffi::c_long != primaryrow
|| (*nodesuppptr.offset(nodenum as isize)).col as ::core::ffi::c_long != primarycol
{
nodenum += 1;
}
return (*scndrynodes.offset(tilenum as isize)).offset(nodenum as isize) as *mut nodeT;
}
unsafe extern "C" fn IntegrateSecondaryFlows(
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut scndrynodes: *mut *mut nodeT,
mut nodesupp: *mut *mut nodesuppT,
mut scndryarcs: *mut *mut scndryarcT,
mut nscndryarcs: *mut ::core::ffi::c_int,
mut scndryflows: *mut *mut ::core::ffi::c_short,
mut bulkoffsets: *mut *mut ::core::ffi::c_short,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut outfp: *mut FILE = ::core::ptr::null_mut::<FILE>();
let mut unwphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut tileunwphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut mag: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut tilemag: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut outline: *mut ::core::ffi::c_float = ::core::ptr::null_mut::<::core::ffi::c_float>();
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut colstart: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut nnrow: ::core::ffi::c_long = 0;
let mut nncol: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
let mut readtilelinelen: ::core::ffi::c_long = 0;
let mut readtilenlines: ::core::ffi::c_long = 0;
let mut nextcoloffset: ::core::ffi::c_long = 0;
let mut nextrowoffset: ::core::ffi::c_long = 0;
let mut tilerow: ::core::ffi::c_long = 0;
let mut tilecol: ::core::ffi::c_long = 0;
let mut ntilerow: ::core::ffi::c_long = 0;
let mut ntilecol: ::core::ffi::c_long = 0;
let mut rowovrlp: ::core::ffi::c_long = 0;
let mut colovrlp: ::core::ffi::c_long = 0;
let mut ni: ::core::ffi::c_long = 0;
let mut nj: ::core::ffi::c_long = 0;
let mut tilenum: ::core::ffi::c_long = 0;
let mut tileoffset: ::core::ffi::c_double = 0.;
let mut regions: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut tileflows: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut realoutfile: [::core::ffi::c_char; 512] = [0; 512];
let mut readfile: [::core::ffi::c_char; 512] = [0; 512];
let mut tempstring: [::core::ffi::c_char; 1024] = [0; 1024];
let mut path: [::core::ffi::c_char; 512] = [0; 512];
let mut basename: [::core::ffi::c_char; 512] = [0; 512];
let mut writeerror: ::core::ffi::c_schar = 0;
let mut readtileparams: [tileparamT; 1] = [tileparamST {
firstcol: 0,
ncol: 0,
firstrow: 0,
nrow: 0,
}; 1];
let mut readtileoutfiles: [outfileT; 1] = [outfileST {
outfile: [0; 512],
initfile: [0; 512],
flowfile: [0; 512],
eifile: [0; 512],
rowcostfile: [0; 512],
colcostfile: [0; 512],
mstrowcostfile: [0; 512],
mstcolcostfile: [0; 512],
mstcostsfile: [0; 512],
corrdumpfile: [0; 512],
rawcorrdumpfile: [0; 512],
conncompfile: [0; 512],
costoutfile: [0; 512],
logfile: [0; 512],
outfileformat: 0,
}; 1];
memset(
&raw mut readtileparams as *mut tileparamT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<tileparamT>() as size_t,
);
memset(
&raw mut readtileoutfiles as *mut outfileT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<outfileT>() as size_t,
);
memset(
&raw mut realoutfile as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut readfile as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut tempstring as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut path as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut basename as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
fprintf(
sp1,
b"Integrating secondary flows\n\0" as *const u8 as *const ::core::ffi::c_char,
);
ntilerow = (*params).ntilerow;
ntilecol = (*params).ntilecol;
rowovrlp = (*params).rowovrlp;
colovrlp = (*params).colovrlp;
ni = ceil(
(nlines + (ntilerow - 1 as ::core::ffi::c_long) * rowovrlp) as ::core::ffi::c_double
/ ntilerow as ::core::ffi::c_double,
) as ::core::ffi::c_long;
nj = ceil(
(linelen + (ntilecol - 1 as ::core::ffi::c_long) * colovrlp) as ::core::ffi::c_double
/ ntilecol as ::core::ffi::c_double,
) as ::core::ffi::c_long;
nextcoloffset = 0 as ::core::ffi::c_long;
writeerror = FALSE as ::core::ffi::c_schar;
nrow = 0 as ::core::ffi::c_long;
regions = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
tileflows = Get2DRowColMem(
ni + 2 as ::core::ffi::c_long,
nj + 2 as ::core::ffi::c_long,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
tileunwphase = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
tilemag = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
unwphase = Get2DMem(
ni as ::core::ffi::c_int,
linelen as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
mag = Get2DMem(
ni as ::core::ffi::c_int,
linelen as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
outline = MAlloc(
((2 as ::core::ffi::c_long * linelen) as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_float>() as size_t),
) as *mut ::core::ffi::c_float;
if (*params).flipphasesign != 0 {
row = 0 as ::core::ffi::c_long;
while row < ntilerow {
col = 0 as ::core::ffi::c_long;
while col < ntilecol {
let ref mut fresh32 = *(*bulkoffsets.offset(row as isize)).offset(col as isize);
*fresh32 = (*fresh32 as ::core::ffi::c_int * -(1 as ::core::ffi::c_int))
as ::core::ffi::c_short;
col += 1;
}
row += 1;
}
}
outfp = OpenOutputFile(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
tilerow = 0 as ::core::ffi::c_long;
while tilerow < ntilerow {
nextrowoffset = 0 as ::core::ffi::c_long;
tilecol = 0 as ::core::ffi::c_long;
while tilecol < ntilecol {
SetupTile(
nlines,
linelen,
params,
&raw mut readtileparams as *mut tileparamT,
outfiles,
&raw mut readtileoutfiles as *mut outfileT,
tilerow,
tilecol,
);
colstart = (*(&raw mut readtileparams as *mut tileparamT)).firstcol;
readtilenlines = (*(&raw mut readtileparams as *mut tileparamT)).nrow;
readtilelinelen = (*(&raw mut readtileparams as *mut tileparamT)).ncol;
SetTileReadParams(
&raw mut readtileparams as *mut tileparamT,
readtilenlines,
readtilelinelen,
tilerow,
tilecol,
nlines,
linelen,
params,
);
colstart += (*(&raw mut readtileparams as *mut tileparamT)).firstcol;
nrow = (*(&raw mut readtileparams as *mut tileparamT)).nrow;
ncol = (*(&raw mut readtileparams as *mut tileparamT)).ncol;
nnrow = nrow + 1 as ::core::ffi::c_long;
nncol = ncol + 1 as ::core::ffi::c_long;
if TMPTILEOUTFORMAT == ALT_LINE_DATA {
ReadAltLineFile(
&raw mut tilemag,
&raw mut tileunwphase,
&raw mut (*(&raw mut readtileoutfiles as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut readtileparams as *mut tileparamT,
);
} else if TMPTILEOUTFORMAT == FLOAT_DATA {
Read2DArray(
&raw mut tileunwphase as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*(&raw mut readtileoutfiles as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut readtileparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as size_t,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
);
}
ParseFilename(
&raw mut (*outfiles).outfile as *mut ::core::ffi::c_char,
&raw mut path as *mut ::core::ffi::c_char,
&raw mut basename as *mut ::core::ffi::c_char,
);
sprintf(
&raw mut tempstring as *mut ::core::ffi::c_char,
b"%s/%s%s_%ld_%ld.%ld%s\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut (*params).tiledir as *mut ::core::ffi::c_char,
TMPTILEROOT.as_ptr(),
&raw mut basename as *mut ::core::ffi::c_char,
tilerow,
tilecol,
readtilelinelen,
REGIONSUFFIX.as_ptr(),
);
StrNCopy(
&raw mut readfile as *mut ::core::ffi::c_char,
&raw mut tempstring as *mut ::core::ffi::c_char,
MAXSTRLEN as size_t,
);
Read2DArray(
&raw mut regions as *mut *mut *mut ::core::ffi::c_void,
&raw mut readfile as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut readtileparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as size_t,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
);
if (*params).rmtmptile != 0 {
unlink(
&raw mut (*(&raw mut readtileoutfiles as *mut outfileT)).outfile
as *mut ::core::ffi::c_char,
);
unlink(&raw mut readfile as *mut ::core::ffi::c_char);
}
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow + 1 as ::core::ffi::c_long {
if row < nrow {
maxcol = ncol;
} else {
maxcol = ncol + 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
*(*tileflows.offset(row as isize)).offset(col as isize) =
0 as ::core::ffi::c_short;
col += 1;
}
row += 1;
}
tilenum = tilerow * ntilecol + tilecol;
ParseSecondaryFlows(
tilenum,
nscndryarcs,
tileflows,
regions,
scndryflows,
nodesupp,
scndryarcs,
nrow,
ncol,
ntilerow,
ntilecol,
params,
);
*(*mag.offset(0 as ::core::ffi::c_int as isize)).offset(colstart as isize) =
*(*tilemag.offset(0 as ::core::ffi::c_int as isize))
.offset(0 as ::core::ffi::c_int as isize);
if tilecol == 0 as ::core::ffi::c_long {
tileoffset = TWOPI * nextcoloffset as ::core::ffi::c_double;
} else {
tileoffset = TWOPI * nextrowoffset as ::core::ffi::c_double;
}
*(*unwphase.offset(0 as ::core::ffi::c_int as isize)).offset(colstart as isize) =
(*(*tileunwphase.offset(0 as ::core::ffi::c_int as isize))
.offset(0 as ::core::ffi::c_int as isize)
as ::core::ffi::c_double
+ tileoffset) as ::core::ffi::c_float;
col = 1 as ::core::ffi::c_long;
while col < ncol {
*(*mag.offset(0 as ::core::ffi::c_int as isize))
.offset((colstart + col) as isize) =
*(*tilemag.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize);
*(*unwphase.offset(0 as ::core::ffi::c_int as isize))
.offset((colstart + col) as isize) = (*(*unwphase
.offset(0 as ::core::ffi::c_int as isize))
.offset((colstart + col - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double
+ *(*tileunwphase.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize)
as ::core::ffi::c_double
- *(*tileunwphase.offset(0 as ::core::ffi::c_int as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double
+ *(*tileflows.offset(nnrow as isize)).offset(col as isize)
as ::core::ffi::c_int as ::core::ffi::c_double
* TWOPI)
as ::core::ffi::c_float;
col += 1;
}
if tilecol != ntilecol - 1 as ::core::ffi::c_long {
nextrowoffset = LRound(
(*(*unwphase.offset(0 as ::core::ffi::c_int as isize))
.offset((colstart + ncol - 1 as ::core::ffi::c_long) as isize)
- *(*tileunwphase.offset(0 as ::core::ffi::c_int as isize))
.offset((ncol - 1 as ::core::ffi::c_long) as isize))
as ::core::ffi::c_double
/ TWOPI,
) + *(*tileflows.offset(nnrow as isize))
.offset((nncol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_long
+ *(*bulkoffsets.offset(tilerow as isize)).offset(tilecol as isize)
as ::core::ffi::c_long
- *(*bulkoffsets.offset(tilerow as isize))
.offset((tilecol + 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_long;
}
row = 1 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*mag.offset(row as isize)).offset((colstart + col) as isize) =
*(*tilemag.offset(row as isize)).offset(col as isize);
*(*unwphase.offset(row as isize)).offset((colstart + col) as isize) =
(*(*unwphase.offset((row - 1 as ::core::ffi::c_long) as isize))
.offset((colstart + col) as isize)
as ::core::ffi::c_double
+ *(*tileunwphase.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- *(*tileunwphase.offset((row - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)
as ::core::ffi::c_double
- *(*tileflows.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_int
as ::core::ffi::c_double
* TWOPI) as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
if tilecol == 0 as ::core::ffi::c_long && tilerow != ntilerow - 1 as ::core::ffi::c_long
{
nextcoloffset = LRound(
(*(*unwphase.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(colstart as isize)
- *(*tileunwphase.offset((nrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize))
as ::core::ffi::c_double
/ TWOPI,
) - *(*tileflows
.offset((nnrow - 1 as ::core::ffi::c_long) as isize))
.offset(0 as ::core::ffi::c_int as isize)
as ::core::ffi::c_long
+ *(*bulkoffsets.offset(tilerow as isize)).offset(tilecol as isize)
as ::core::ffi::c_long
- *(*bulkoffsets.offset((tilerow + 1 as ::core::ffi::c_long) as isize))
.offset(tilecol as isize) as ::core::ffi::c_long;
}
tilecol += 1;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
if (*outfiles).outfileformat as ::core::ffi::c_int == ALT_LINE_DATA {
if fwrite(
*mag.offset(row as isize) as *const ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
linelen as size_t,
outfp,
) != linelen as ::core::ffi::c_ulong
|| fwrite(
*unwphase.offset(row as isize) as *const ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
linelen as size_t,
outfp,
) != linelen as ::core::ffi::c_ulong
{
writeerror = TRUE as ::core::ffi::c_schar;
break;
}
} else if (*outfiles).outfileformat as ::core::ffi::c_int == ALT_SAMPLE_DATA {
col = 0 as ::core::ffi::c_long;
while col < linelen {
*outline.offset((2 as ::core::ffi::c_long * col) as isize) =
*(*mag.offset(row as isize)).offset(col as isize);
*outline.offset(
(2 as ::core::ffi::c_long * col + 1 as ::core::ffi::c_long) as isize,
) = *(*unwphase.offset(row as isize)).offset(col as isize);
col += 1;
}
if fwrite(
outline as *const ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
(2 as ::core::ffi::c_long * linelen) as size_t,
outfp,
) != (2 as ::core::ffi::c_long * linelen) as ::core::ffi::c_ulong
{
writeerror = TRUE as ::core::ffi::c_schar;
break;
}
} else if fwrite(
*unwphase.offset(row as isize) as *const ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
linelen as size_t,
outfp,
) != linelen as ::core::ffi::c_ulong
{
writeerror = TRUE as ::core::ffi::c_schar;
break;
}
row += 1;
}
if writeerror != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while writing to file %s (device full?)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
tilerow += 1;
}
fprintf(
sp1,
b"Output written to file %s\n\0" as *const u8 as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
if fclose(outfp) != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: problem closing file %s (disk full?)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
}
Free2DArray(
regions as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
tileflows as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
tileunwphase as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
tilemag as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
unwphase as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
mag as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
free(outline as *mut ::core::ffi::c_void);
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn ParseSecondaryFlows(
mut tilenum: ::core::ffi::c_long,
mut nscndryarcs: *mut ::core::ffi::c_int,
mut tileflows: *mut *mut ::core::ffi::c_short,
mut regions: *mut *mut ::core::ffi::c_short,
mut scndryflows: *mut *mut ::core::ffi::c_short,
mut nodesupp: *mut *mut nodesuppT,
mut scndryarcs: *mut *mut scndryarcT,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut ntilerow: ::core::ffi::c_long,
mut ntilecol: ::core::ffi::c_long,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut scndryfrom: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut scndryto: *mut nodeT = ::core::ptr::null_mut::<nodeT>();
let mut arcnum: ::core::ffi::c_long = 0;
let mut nnrow: ::core::ffi::c_long = 0;
let mut nncol: ::core::ffi::c_long = 0;
let mut nflow: ::core::ffi::c_long = 0;
let mut primaryfromrow: ::core::ffi::c_long = 0;
let mut primaryfromcol: ::core::ffi::c_long = 0;
let mut prevrow: ::core::ffi::c_long = 0;
let mut prevcol: ::core::ffi::c_long = 0;
let mut thisrow: ::core::ffi::c_long = 0;
let mut thiscol: ::core::ffi::c_long = 0;
let mut nextrow: ::core::ffi::c_long = 0;
let mut nextcol: ::core::ffi::c_long = 0;
let mut phaseflipsign: ::core::ffi::c_schar = 0;
if (*params).flipphasesign != 0 {
phaseflipsign = -(1 as ::core::ffi::c_int) as ::core::ffi::c_schar;
} else {
phaseflipsign = 1 as ::core::ffi::c_schar;
}
arcnum = 0 as ::core::ffi::c_long;
while arcnum < *nscndryarcs.offset(tilenum as isize) as ::core::ffi::c_long {
nflow = (phaseflipsign as ::core::ffi::c_int
* *(*scndryflows.offset(tilenum as isize)).offset(arcnum as isize)
as ::core::ffi::c_int) as ::core::ffi::c_long;
if nflow != 0 {
nnrow = nrow + 1 as ::core::ffi::c_long;
nncol = ncol + 1 as ::core::ffi::c_long;
scndryfrom = (*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).from;
scndryto = (*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).to;
if (*scndryfrom).row as ::core::ffi::c_long == tilenum {
primaryfromrow = (*(*nodesupp.offset((*scndryfrom).row as isize))
.offset((*scndryfrom).col as isize))
.row as ::core::ffi::c_long;
primaryfromcol = (*(*nodesupp.offset((*scndryfrom).row as isize))
.offset((*scndryfrom).col as isize))
.col as ::core::ffi::c_long;
} else if (*scndryfrom).row as ::core::ffi::c_long == tilenum - ntilecol {
primaryfromrow = 0 as ::core::ffi::c_long;
primaryfromcol = (*(*nodesupp.offset((*scndryfrom).row as isize))
.offset((*scndryfrom).col as isize))
.col as ::core::ffi::c_long;
} else if (*scndryfrom).row as ::core::ffi::c_long == tilenum - 1 as ::core::ffi::c_long
{
primaryfromrow = (*(*nodesupp.offset((*scndryfrom).row as isize))
.offset((*scndryfrom).col as isize))
.row as ::core::ffi::c_long;
primaryfromcol = 0 as ::core::ffi::c_long;
} else {
primaryfromrow = 0 as ::core::ffi::c_long;
primaryfromcol = 0 as ::core::ffi::c_long;
}
if (*scndryto).row as ::core::ffi::c_long == tilenum {
thisrow = (*(*nodesupp.offset((*scndryto).row as isize))
.offset((*scndryto).col as isize))
.row as ::core::ffi::c_long;
thiscol = (*(*nodesupp.offset((*scndryto).row as isize))
.offset((*scndryto).col as isize))
.col as ::core::ffi::c_long;
} else if (*scndryto).row as ::core::ffi::c_long == tilenum - ntilecol {
thisrow = 0 as ::core::ffi::c_long;
thiscol = (*(*nodesupp.offset((*scndryto).row as isize))
.offset((*scndryto).col as isize))
.col as ::core::ffi::c_long;
} else if (*scndryto).row as ::core::ffi::c_long == tilenum - 1 as ::core::ffi::c_long {
thisrow = (*(*nodesupp.offset((*scndryto).row as isize))
.offset((*scndryto).col as isize))
.row as ::core::ffi::c_long;
thiscol = 0 as ::core::ffi::c_long;
} else {
thisrow = 0 as ::core::ffi::c_long;
thiscol = 0 as ::core::ffi::c_long;
}
match (*(*scndryarcs.offset(tilenum as isize)).offset(arcnum as isize)).fromdir
as ::core::ffi::c_int
{
RIGHT => {
nextrow = thisrow;
nextcol = thiscol + 1 as ::core::ffi::c_long;
let ref mut fresh33 =
*(*tileflows.offset(thisrow as isize)).offset(thiscol as isize);
*fresh33 = (*fresh33 as ::core::ffi::c_long - nflow) as ::core::ffi::c_short;
}
DOWN => {
nextrow = thisrow + 1 as ::core::ffi::c_long;
nextcol = thiscol;
let ref mut fresh34 =
*(*tileflows.offset((nnrow + thisrow) as isize)).offset(thiscol as isize);
*fresh34 = (*fresh34 as ::core::ffi::c_long - nflow) as ::core::ffi::c_short;
}
LEFT => {
nextrow = thisrow;
nextcol = thiscol - 1 as ::core::ffi::c_long;
let ref mut fresh35 = *(*tileflows.offset(thisrow as isize))
.offset((thiscol - 1 as ::core::ffi::c_long) as isize);
*fresh35 = (*fresh35 as ::core::ffi::c_long + nflow) as ::core::ffi::c_short;
}
_ => {
nextrow = thisrow - 1 as ::core::ffi::c_long;
nextcol = thiscol;
let ref mut fresh36 = *(*tileflows
.offset((nnrow + thisrow - 1 as ::core::ffi::c_long) as isize))
.offset(thiscol as isize);
*fresh36 = (*fresh36 as ::core::ffi::c_long + nflow) as ::core::ffi::c_short;
}
}
while !(nextrow == primaryfromrow && nextcol == primaryfromcol) {
prevrow = thisrow;
prevcol = thiscol;
thisrow = nextrow;
thiscol = nextcol;
if thiscol != nncol - 1 as ::core::ffi::c_long {
if thisrow == 0 as ::core::ffi::c_long
|| thisrow == nnrow - 1 as ::core::ffi::c_long
|| *(*regions.offset((thisrow - 1 as ::core::ffi::c_long) as isize))
.offset(thiscol as isize)
as ::core::ffi::c_int
!= *(*regions.offset(thisrow as isize)).offset(thiscol as isize)
as ::core::ffi::c_int
{
if !(thisrow == prevrow && thiscol + 1 as ::core::ffi::c_long == prevcol) {
let ref mut fresh37 =
*(*tileflows.offset(thisrow as isize)).offset(thiscol as isize);
*fresh37 =
(*fresh37 as ::core::ffi::c_long - nflow) as ::core::ffi::c_short;
nextcol += 1;
}
}
}
if thisrow != nnrow - 1 as ::core::ffi::c_long {
if thiscol == 0 as ::core::ffi::c_long
|| thiscol == nncol - 1 as ::core::ffi::c_long
|| *(*regions.offset(thisrow as isize)).offset(thiscol as isize)
as ::core::ffi::c_int
!= *(*regions.offset(thisrow as isize))
.offset((thiscol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
{
if !(thisrow + 1 as ::core::ffi::c_long == prevrow && thiscol == prevcol) {
let ref mut fresh38 = *(*tileflows.offset((nnrow + thisrow) as isize))
.offset(thiscol as isize);
*fresh38 =
(*fresh38 as ::core::ffi::c_long - nflow) as ::core::ffi::c_short;
nextrow += 1;
}
}
}
if thiscol != 0 as ::core::ffi::c_long {
if thisrow == 0 as ::core::ffi::c_long
|| thisrow == nnrow - 1 as ::core::ffi::c_long
|| *(*regions.offset(thisrow as isize))
.offset((thiscol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
!= *(*regions.offset((thisrow - 1 as ::core::ffi::c_long) as isize))
.offset((thiscol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
{
if !(thisrow == prevrow && thiscol - 1 as ::core::ffi::c_long == prevcol) {
let ref mut fresh39 = *(*tileflows.offset(thisrow as isize))
.offset((thiscol - 1 as ::core::ffi::c_long) as isize);
*fresh39 =
(*fresh39 as ::core::ffi::c_long + nflow) as ::core::ffi::c_short;
nextcol -= 1;
}
}
}
if thisrow != 0 as ::core::ffi::c_long {
if thiscol == 0 as ::core::ffi::c_long
|| thiscol == nncol - 1 as ::core::ffi::c_long
|| *(*regions.offset((thisrow - 1 as ::core::ffi::c_long) as isize))
.offset((thiscol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int
!= *(*regions.offset((thisrow - 1 as ::core::ffi::c_long) as isize))
.offset(thiscol as isize)
as ::core::ffi::c_int
{
if !(thisrow - 1 as ::core::ffi::c_long == prevrow && thiscol == prevcol) {
let ref mut fresh40 = *(*tileflows
.offset((nnrow + thisrow - 1 as ::core::ffi::c_long) as isize))
.offset(thiscol as isize);
*fresh40 =
(*fresh40 as ::core::ffi::c_long + nflow) as ::core::ffi::c_short;
nextrow -= 1;
}
}
}
}
}
arcnum += 1;
}
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn AssembleTileConnComps(
mut linelen: ::core::ffi::c_long,
mut nlines: ::core::ffi::c_long,
mut outfiles: *mut outfileT,
mut params: *mut paramT,
) -> ::core::ffi::c_int {
let mut ipass: ::core::ffi::c_int = 0;
let mut k: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut colstart: ::core::ffi::c_long = 0;
let mut nrow: ::core::ffi::c_long = 0;
let mut ncol: ::core::ffi::c_long = 0;
let mut readtilelinelen: ::core::ffi::c_long = 0;
let mut readtilenlines: ::core::ffi::c_long = 0;
let mut tilerow: ::core::ffi::c_long = 0;
let mut tilecol: ::core::ffi::c_long = 0;
let mut ntilerow: ::core::ffi::c_long = 0;
let mut ntilecol: ::core::ffi::c_long = 0;
let mut rowovrlp: ::core::ffi::c_long = 0;
let mut colovrlp: ::core::ffi::c_long = 0;
let mut ni: ::core::ffi::c_long = 0;
let mut nj: ::core::ffi::c_long = 0;
let mut tilenum: ::core::ffi::c_long = 0;
let mut iconncomp: ::core::ffi::c_uint = 0;
let mut iconncompmax: ::core::ffi::c_uint = 0;
let mut ntileconncomp: ::core::ffi::c_long = 0;
let mut nconncomp: ::core::ffi::c_long = 0;
let mut ntileconncompmem: ::core::ffi::c_long = 0;
let mut nconncompmem: ::core::ffi::c_long = 0;
let mut nmemold: ::core::ffi::c_long = 0;
let mut realoutfile: [::core::ffi::c_char; 512] = [0; 512];
let mut readfile: [::core::ffi::c_char; 512] = [0; 512];
let mut tempstring: [::core::ffi::c_char; 1024] = [0; 1024];
let mut path: [::core::ffi::c_char; 512] = [0; 512];
let mut basename: [::core::ffi::c_char; 512] = [0; 512];
let mut writeerror: ::core::ffi::c_schar = 0;
let mut readtileparams: [tileparamT; 1] = [tileparamST {
firstcol: 0,
ncol: 0,
firstrow: 0,
nrow: 0,
}; 1];
let mut readtileoutfiles: [outfileT; 1] = [outfileST {
outfile: [0; 512],
initfile: [0; 512],
flowfile: [0; 512],
eifile: [0; 512],
rowcostfile: [0; 512],
colcostfile: [0; 512],
mstrowcostfile: [0; 512],
mstcolcostfile: [0; 512],
mstcostsfile: [0; 512],
corrdumpfile: [0; 512],
rawcorrdumpfile: [0; 512],
conncompfile: [0; 512],
costoutfile: [0; 512],
logfile: [0; 512],
outfileformat: 0,
}; 1];
let mut tilemapping: *mut ::core::ffi::c_uint = ::core::ptr::null_mut::<::core::ffi::c_uint>();
let mut tileconncomps: *mut *mut ::core::ffi::c_uint =
::core::ptr::null_mut::<*mut ::core::ffi::c_uint>();
let mut tilerowconncomps: *mut *mut ::core::ffi::c_uint =
::core::ptr::null_mut::<*mut ::core::ffi::c_uint>();
let mut ucharbuf: *mut *mut ::core::ffi::c_uchar =
::core::ptr::null_mut::<*mut ::core::ffi::c_uchar>();
let mut ucharoutbuf: *mut ::core::ffi::c_uchar =
::core::ptr::null_mut::<::core::ffi::c_uchar>();
let mut tileconncompsizes: *mut conncompsizeT = ::core::ptr::null_mut::<conncompsizeT>();
let mut conncompsizes: *mut conncompsizeT = ::core::ptr::null_mut::<conncompsizeT>();
let mut outfp: *mut FILE = ::core::ptr::null_mut::<FILE>();
memset(
&raw mut readtileparams as *mut tileparamT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<tileparamT>() as size_t,
);
memset(
&raw mut readtileoutfiles as *mut outfileT as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
::core::mem::size_of::<outfileT>() as size_t,
);
memset(
&raw mut realoutfile as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut readfile as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut tempstring as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut path as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
memset(
&raw mut basename as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void,
0 as ::core::ffi::c_int,
MAXSTRLEN as size_t,
);
fprintf(
sp1,
b"Assembling tile connected components\n\0" as *const u8 as *const ::core::ffi::c_char,
);
ntilerow = (*params).ntilerow;
ntilecol = (*params).ntilecol;
rowovrlp = (*params).rowovrlp;
colovrlp = (*params).colovrlp;
ni = ceil(
(nlines + (ntilerow - 1 as ::core::ffi::c_long) * rowovrlp) as ::core::ffi::c_double
/ ntilerow as ::core::ffi::c_double,
) as ::core::ffi::c_long;
nj = ceil(
(linelen + (ntilecol - 1 as ::core::ffi::c_long) * colovrlp) as ::core::ffi::c_double
/ ntilecol as ::core::ffi::c_double,
) as ::core::ffi::c_long;
writeerror = FALSE as ::core::ffi::c_schar;
nrow = 0 as ::core::ffi::c_long;
conncompsizes = ::core::ptr::null_mut::<conncompsizeT>();
nconncomp = 0 as ::core::ffi::c_long;
nconncompmem = 0 as ::core::ffi::c_long;
tileconncompsizes = ::core::ptr::null_mut::<conncompsizeT>();
ntileconncompmem = 0 as ::core::ffi::c_long;
iconncompmax = 0 as ::core::ffi::c_uint;
tileconncomps = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_uint>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_uint>() as size_t,
) as *mut *mut ::core::ffi::c_uint;
tilerowconncomps = Get2DMem(
ni as ::core::ffi::c_int,
linelen as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_uint>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_uint>() as size_t,
) as *mut *mut ::core::ffi::c_uint;
ucharbuf = Get2DMem(
ni as ::core::ffi::c_int,
nj as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_uchar>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_uchar>() as size_t,
) as *mut *mut ::core::ffi::c_uchar;
ucharoutbuf = MAlloc(
(linelen as size_t).wrapping_mul(::core::mem::size_of::<::core::ffi::c_uchar>() as size_t),
) as *mut ::core::ffi::c_uchar;
tilemapping = ::core::ptr::null_mut::<::core::ffi::c_uint>();
outfp = OpenOutputFile(
&raw mut (*outfiles).conncompfile as *mut ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
ipass = 0 as ::core::ffi::c_int;
while ipass < 2 as ::core::ffi::c_int {
tilerow = 0 as ::core::ffi::c_long;
while tilerow < ntilerow {
tilecol = 0 as ::core::ffi::c_long;
while tilecol < ntilecol {
SetupTile(
nlines,
linelen,
params,
&raw mut readtileparams as *mut tileparamT,
outfiles,
&raw mut readtileoutfiles as *mut outfileT,
tilerow,
tilecol,
);
colstart = (*(&raw mut readtileparams as *mut tileparamT)).firstcol;
readtilenlines = (*(&raw mut readtileparams as *mut tileparamT)).nrow;
readtilelinelen = (*(&raw mut readtileparams as *mut tileparamT)).ncol;
SetTileReadParams(
&raw mut readtileparams as *mut tileparamT,
readtilenlines,
readtilelinelen,
tilerow,
tilecol,
nlines,
linelen,
params,
);
colstart += (*(&raw mut readtileparams as *mut tileparamT)).firstcol;
nrow = (*(&raw mut readtileparams as *mut tileparamT)).nrow;
ncol = (*(&raw mut readtileparams as *mut tileparamT)).ncol;
tilenum = tilerow * ntilecol + tilecol;
if (*params).conncompouttype == CONNCOMPOUTTYPEUCHAR {
Read2DArray(
&raw mut ucharbuf as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*(&raw mut readtileoutfiles as *mut outfileT)).conncompfile
as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut readtileparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_uchar>() as size_t,
::core::mem::size_of::<::core::ffi::c_uchar>() as size_t,
);
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*tileconncomps.offset(row as isize)).offset(col as isize) =
*(*ucharbuf.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_uint;
col += 1;
}
row += 1;
}
} else {
Read2DArray(
&raw mut tileconncomps as *mut *mut *mut ::core::ffi::c_void,
&raw mut (*(&raw mut readtileoutfiles as *mut outfileT)).conncompfile
as *mut ::core::ffi::c_char,
readtilelinelen,
readtilenlines,
&raw mut readtileparams as *mut tileparamT,
::core::mem::size_of::<*mut ::core::ffi::c_uint>() as size_t,
::core::mem::size_of::<::core::ffi::c_uint>() as size_t,
);
}
if ipass == 0 as ::core::ffi::c_int {
ntileconncomp = 0 as ::core::ffi::c_long;
k = 0 as ::core::ffi::c_long;
while k < ntileconncompmem {
(*tileconncompsizes.offset(k as isize)).tilenum =
tilenum as ::core::ffi::c_uint;
(*tileconncompsizes.offset(k as isize)).icomptile =
(k + 1 as ::core::ffi::c_long) as ::core::ffi::c_uint;
(*tileconncompsizes.offset(k as isize)).icompfull =
0 as ::core::ffi::c_uint;
(*tileconncompsizes.offset(k as isize)).npix = 0 as ::core::ffi::c_long;
k += 1;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
iconncomp = *(*tileconncomps.offset(row as isize)).offset(col as isize);
if iconncomp > 0 as ::core::ffi::c_uint {
while iconncomp as ::core::ffi::c_long > ntileconncompmem {
nmemold = ntileconncompmem;
ntileconncompmem += CONNCOMPMEMINCR as ::core::ffi::c_long;
tileconncompsizes = ReAlloc(
tileconncompsizes as *mut ::core::ffi::c_void,
(ntileconncompmem as size_t).wrapping_mul(
::core::mem::size_of::<conncompsizeT>() as size_t,
),
)
as *mut conncompsizeT;
k = nmemold;
while k < ntileconncompmem {
(*tileconncompsizes.offset(k as isize)).tilenum =
tilenum as ::core::ffi::c_uint;
(*tileconncompsizes.offset(k as isize)).icomptile =
(k + 1 as ::core::ffi::c_long) as ::core::ffi::c_uint;
(*tileconncompsizes.offset(k as isize)).icompfull =
0 as ::core::ffi::c_uint;
(*tileconncompsizes.offset(k as isize)).npix =
0 as ::core::ffi::c_long;
k += 1;
}
}
if (*tileconncompsizes.offset(
iconncomp.wrapping_sub(1 as ::core::ffi::c_uint) as isize,
))
.npix
== 0 as ::core::ffi::c_long
{
(*tileconncompsizes.offset(
iconncomp.wrapping_sub(1 as ::core::ffi::c_uint) as isize,
))
.icomptile = iconncomp;
ntileconncomp += 1;
}
let ref mut fresh41 =
(*tileconncompsizes
.offset(iconncomp.wrapping_sub(1 as ::core::ffi::c_uint)
as isize))
.npix;
*fresh41 += 1;
if iconncomp > iconncompmax {
iconncompmax = iconncomp;
}
}
col += 1;
}
row += 1;
}
nmemold = nconncompmem;
if ntileconncomp > 0 as ::core::ffi::c_long {
nconncompmem += ntileconncomp;
conncompsizes = ReAlloc(
conncompsizes as *mut ::core::ffi::c_void,
(nconncompmem as size_t)
.wrapping_mul(::core::mem::size_of::<conncompsizeT>() as size_t),
) as *mut conncompsizeT;
}
k = 0 as ::core::ffi::c_long;
while k < ntileconncompmem {
if (*tileconncompsizes.offset(k as isize)).npix > 0 as ::core::ffi::c_long {
(*conncompsizes.offset(nconncomp as isize)).tilenum =
(*tileconncompsizes.offset(k as isize)).tilenum;
(*conncompsizes.offset(nconncomp as isize)).icomptile =
(*tileconncompsizes.offset(k as isize)).icomptile;
(*conncompsizes.offset(nconncomp as isize)).icompfull =
0 as ::core::ffi::c_uint;
(*conncompsizes.offset(nconncomp as isize)).npix =
(*tileconncompsizes.offset(k as isize)).npix;
nconncomp += 1;
}
k += 1;
}
} else {
k = 0 as ::core::ffi::c_long;
while k < iconncompmax as ::core::ffi::c_long {
*tilemapping.offset(k as isize) = 0 as ::core::ffi::c_uint;
k += 1;
}
k = 0 as ::core::ffi::c_long;
while k < nconncomp {
if (*conncompsizes.offset(k as isize)).tilenum as ::core::ffi::c_long
== tilenum
{
iconncomp = (*conncompsizes.offset(k as isize)).icomptile;
*tilemapping
.offset(
iconncomp.wrapping_sub(1 as ::core::ffi::c_uint) as isize,
) = (*conncompsizes.offset(k as isize)).icompfull;
}
k += 1;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
iconncomp = *(*tileconncomps.offset(row as isize)).offset(col as isize);
if iconncomp > 0 as ::core::ffi::c_uint {
*(*tilerowconncomps.offset(row as isize))
.offset((colstart + col) as isize) =
*tilemapping
.offset(iconncomp.wrapping_sub(1 as ::core::ffi::c_uint)
as isize);
} else {
*(*tilerowconncomps.offset(row as isize))
.offset((colstart + col) as isize) = 0 as ::core::ffi::c_uint;
}
col += 1;
}
row += 1;
}
if (*params).rmtmptile != 0 {
unlink(
&raw mut (*(&raw mut readtileoutfiles as *mut outfileT)).conncompfile
as *mut ::core::ffi::c_char,
);
}
}
tilecol += 1;
}
if ipass > 0 as ::core::ffi::c_int {
row = 0 as ::core::ffi::c_long;
while row < nrow {
if (*params).conncompouttype == CONNCOMPOUTTYPEUCHAR {
k = 0 as ::core::ffi::c_long;
while k < linelen {
*ucharoutbuf.offset(k as isize) =
*(*tilerowconncomps.offset(row as isize)).offset(k as isize)
as ::core::ffi::c_uchar;
k += 1;
}
if fwrite(
ucharoutbuf as *const ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_uchar>() as size_t,
linelen as size_t,
outfp,
) != linelen as ::core::ffi::c_ulong
{
writeerror = TRUE as ::core::ffi::c_schar;
break;
}
} else if fwrite(
*tilerowconncomps.offset(row as isize) as *const ::core::ffi::c_void,
::core::mem::size_of::<::core::ffi::c_uint>() as size_t,
linelen as size_t,
outfp,
) != linelen as ::core::ffi::c_ulong
{
writeerror = TRUE as ::core::ffi::c_schar;
break;
}
row += 1;
}
if writeerror != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Error while writing to file %s (device full?)\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
}
tilerow += 1;
}
if ipass == 0 as ::core::ffi::c_int {
qsort(
conncompsizes as *mut ::core::ffi::c_void,
nconncomp as size_t,
::core::mem::size_of::<conncompsizeT>() as size_t,
Some(
ConnCompSizeNPixCompare
as unsafe extern "C" fn(
*const ::core::ffi::c_void,
*const ::core::ffi::c_void,
) -> ::core::ffi::c_int,
),
);
if nconncomp > (*params).maxncomps {
nconncomp = (*params).maxncomps;
}
k = 0 as ::core::ffi::c_long;
while k < nconncomp {
(*conncompsizes.offset(k as isize)).icompfull =
(k + 1 as ::core::ffi::c_long) as ::core::ffi::c_uint;
k += 1;
}
tilemapping = MAlloc(
(iconncompmax as size_t)
.wrapping_mul(::core::mem::size_of::<::core::ffi::c_uint>() as size_t),
) as *mut ::core::ffi::c_uint;
}
ipass += 1;
}
fprintf(
sp1,
b"Assembled connected components (%ld) output written to file %s\n\0" as *const u8
as *const ::core::ffi::c_char,
nconncomp,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
if fclose(outfp) != 0 {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: problem closing file %s (disk full?)\n\0" as *const u8
as *const ::core::ffi::c_char,
&raw mut realoutfile as *mut ::core::ffi::c_char,
);
}
Free2DArray(
tileconncomps as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
tilerowconncomps as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
Free2DArray(
ucharbuf as *mut *mut ::core::ffi::c_void,
ni as ::core::ffi::c_uint,
);
free(ucharoutbuf as *mut ::core::ffi::c_void);
if ntileconncompmem > 0 as ::core::ffi::c_long {
free(tileconncompsizes as *mut ::core::ffi::c_void);
}
if nconncompmem > 0 as ::core::ffi::c_long {
free(conncompsizes as *mut ::core::ffi::c_void);
}
free(tilemapping as *mut ::core::ffi::c_void);
return 0 as ::core::ffi::c_int;
}
unsafe extern "C" fn ConnCompSizeNPixCompare(
mut ptr1: *const ::core::ffi::c_void,
mut ptr2: *const ::core::ffi::c_void,
) -> ::core::ffi::c_int {
return ((*(ptr2 as *mut conncompsizeT)).npix - (*(ptr1 as *mut conncompsizeT)).npix)
as ::core::ffi::c_int;
}
unsafe extern "C" fn IsTrue(mut str: *mut ::core::ffi::c_char) -> ::core::ffi::c_int {
if strcmp(str, b"TRUE\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"true\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"True\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"1\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"y\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"Y\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"yes\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"YES\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"Yes\0" as *const u8 as *const ::core::ffi::c_char) == 0
{
return 1 as ::core::ffi::c_int;
} else {
return 0 as ::core::ffi::c_int;
};
}
unsafe extern "C" fn IsFalse(mut str: *mut ::core::ffi::c_char) -> ::core::ffi::c_int {
if strcmp(str, b"FALSE\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"false\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"False\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"0\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"n\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"N\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"no\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"NO\0" as *const u8 as *const ::core::ffi::c_char) == 0
|| strcmp(str, b"No\0" as *const u8 as *const ::core::ffi::c_char) == 0
{
return 1 as ::core::ffi::c_int;
} else {
return 0 as ::core::ffi::c_int;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetBooleanSignedChar(
mut boolptr: *mut ::core::ffi::c_schar,
mut str: *mut ::core::ffi::c_char,
) -> ::core::ffi::c_schar {
if IsTrue(str) != 0 {
*boolptr = TRUE as ::core::ffi::c_schar;
return 0 as ::core::ffi::c_schar;
} else if IsFalse(str) != 0 {
*boolptr = FALSE as ::core::ffi::c_schar;
return 0 as ::core::ffi::c_schar;
}
return 1 as ::core::ffi::c_schar;
}
unsafe extern "C" fn ModDiff(
mut f1: ::core::ffi::c_double,
mut f2: ::core::ffi::c_double,
) -> ::core::ffi::c_double {
let mut f3: ::core::ffi::c_double = 0.;
f3 = f1 - f2;
if f3 > PI {
f3 -= TWOPI;
} else if f3 <= -PI {
f3 += TWOPI;
}
return f3;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn WrapPhase(
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
let ref mut fresh159 = *(*wrappedphase.offset(row as isize)).offset(col as isize);
*fresh159 = (*fresh159 as ::core::ffi::c_double
- TWOPI
* floor(
*(*wrappedphase.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
/ TWOPI,
)) as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcWrappedRangeDiffs(
mut dpsi: *mut *mut ::core::ffi::c_float,
mut avgdpsi: *mut *mut ::core::ffi::c_float,
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut kperpdpsi: ::core::ffi::c_long,
mut kpardpsi: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut paddpsi: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
*(*dpsi.offset(row as isize)).offset(col as isize) =
((*(*wrappedphase.offset(row as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
- *(*wrappedphase.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double
/ TWOPI) as ::core::ffi::c_float;
if *(*dpsi.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double >= 0.5f64
{
let ref mut fresh153 = *(*dpsi.offset(row as isize)).offset(col as isize);
*fresh153 = (*fresh153 as ::core::ffi::c_double - 1.0f64) as ::core::ffi::c_float;
} else if (*(*dpsi.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double)
< -0.5f64
{
let ref mut fresh154 = *(*dpsi.offset(row as isize)).offset(col as isize);
*fresh154 = (*fresh154 as ::core::ffi::c_double + 1.0f64) as ::core::ffi::c_float;
}
col += 1;
}
row += 1;
}
paddpsi = MirrorPad(
dpsi,
nrow,
ncol - 1 as ::core::ffi::c_long,
(kperpdpsi - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
(kpardpsi - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
);
if paddpsi == dpsi {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Wrapped-gradient averaging box too large for input array size\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
BoxCarAvg(
avgdpsi,
paddpsi,
nrow,
ncol - 1 as ::core::ffi::c_long,
kperpdpsi,
kpardpsi,
);
Free2DArray(
paddpsi as *mut *mut ::core::ffi::c_void,
(nrow + kperpdpsi - 1 as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcWrappedAzDiffs(
mut dpsi: *mut *mut ::core::ffi::c_float,
mut avgdpsi: *mut *mut ::core::ffi::c_float,
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut kperpdpsi: ::core::ffi::c_long,
mut kpardpsi: ::core::ffi::c_long,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut paddpsi: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*dpsi.offset(row as isize)).offset(col as isize) =
((*(*wrappedphase.offset(row as isize)).offset(col as isize)
- *(*wrappedphase.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)) as ::core::ffi::c_double
/ TWOPI) as ::core::ffi::c_float;
if *(*dpsi.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double >= 0.5f64
{
let ref mut fresh151 = *(*dpsi.offset(row as isize)).offset(col as isize);
*fresh151 = (*fresh151 as ::core::ffi::c_double - 1.0f64) as ::core::ffi::c_float;
} else if (*(*dpsi.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double)
< -0.5f64
{
let ref mut fresh152 = *(*dpsi.offset(row as isize)).offset(col as isize);
*fresh152 = (*fresh152 as ::core::ffi::c_double + 1.0f64) as ::core::ffi::c_float;
}
col += 1;
}
row += 1;
}
paddpsi = MirrorPad(
dpsi,
nrow - 1 as ::core::ffi::c_long,
ncol,
(kpardpsi - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
(kperpdpsi - 1 as ::core::ffi::c_long) / 2 as ::core::ffi::c_long,
);
if paddpsi == dpsi {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Wrapped-gradient averaging box too large for input array size\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
BoxCarAvg(
avgdpsi,
paddpsi,
nrow - 1 as ::core::ffi::c_long,
ncol,
kpardpsi,
kperpdpsi,
);
Free2DArray(
paddpsi as *mut *mut ::core::ffi::c_void,
(nrow - 1 as ::core::ffi::c_long + kpardpsi - 1 as ::core::ffi::c_long)
as ::core::ffi::c_uint,
);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CycleResidue(
mut phase: *mut *mut ::core::ffi::c_float,
mut residue: *mut *mut ::core::ffi::c_schar,
mut nrow: ::core::ffi::c_int,
mut ncol: ::core::ffi::c_int,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_int = 0;
let mut col: ::core::ffi::c_int = 0;
let mut rowdiff: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut coldiff: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
rowdiff = Get2DMem(
nrow - 1 as ::core::ffi::c_int,
ncol,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
coldiff = Get2DMem(
nrow,
ncol - 1 as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
row = 0 as ::core::ffi::c_int;
while row < nrow - 1 as ::core::ffi::c_int {
col = 0 as ::core::ffi::c_int;
while col < ncol {
*(*rowdiff.offset(row as isize)).offset(col as isize) = ModDiff(
*(*phase.offset((row + 1 as ::core::ffi::c_int) as isize)).offset(col as isize)
as ::core::ffi::c_double,
*(*phase.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double,
)
as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
row = 0 as ::core::ffi::c_int;
while row < nrow {
col = 0 as ::core::ffi::c_int;
while col < ncol - 1 as ::core::ffi::c_int {
*(*coldiff.offset(row as isize)).offset(col as isize) = ModDiff(
*(*phase.offset(row as isize)).offset((col + 1 as ::core::ffi::c_int) as isize)
as ::core::ffi::c_double,
*(*phase.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double,
)
as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
row = 0 as ::core::ffi::c_int;
while row < nrow - 1 as ::core::ffi::c_int {
col = 0 as ::core::ffi::c_int;
while col < ncol - 1 as ::core::ffi::c_int {
*(*residue.offset(row as isize)).offset(col as isize) = LRound(
(*(*coldiff.offset(row as isize)).offset(col as isize)
+ *(*rowdiff.offset(row as isize))
.offset((col + 1 as ::core::ffi::c_int) as isize)
- *(*coldiff.offset((row + 1 as ::core::ffi::c_int) as isize))
.offset(col as isize)
- *(*rowdiff.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double
/ TWOPI,
)
as ::core::ffi::c_schar;
col += 1;
}
row += 1;
}
Free2DArray(
rowdiff as *mut *mut ::core::ffi::c_void,
(nrow - 1 as ::core::ffi::c_int) as ::core::ffi::c_uint,
);
Free2DArray(
coldiff as *mut *mut ::core::ffi::c_void,
nrow as ::core::ffi::c_uint,
);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn NodeResidue(
mut wphase: *mut *mut ::core::ffi::c_float,
mut row: ::core::ffi::c_long,
mut col: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut residue: ::core::ffi::c_int = 0;
residue = LRound(
(ModDiff(
*(*wphase.offset(row as isize)).offset((col + 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double,
*(*wphase.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double,
) + ModDiff(
*(*wphase.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double,
*(*wphase.offset(row as isize)).offset((col + 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double,
) + ModDiff(
*(*wphase.offset((row + 1 as ::core::ffi::c_long) as isize)).offset(col as isize)
as ::core::ffi::c_double,
*(*wphase.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset((col + 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double,
) + ModDiff(
*(*wphase.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double,
*(*wphase.offset((row + 1 as ::core::ffi::c_long) as isize)).offset(col as isize)
as ::core::ffi::c_double,
)) / TWOPI,
) as ::core::ffi::c_int;
return residue;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CalcFlow(
mut phase: *mut *mut ::core::ffi::c_float,
mut flowsptr: *mut *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
if (*flowsptr).is_null() {
*flowsptr = Get2DRowColMem(
nrow,
ncol,
::core::mem::size_of::<*mut ::core::ffi::c_short>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_short>() as size_t,
) as *mut *mut ::core::ffi::c_short;
}
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*(*flowsptr).offset(row as isize)).offset(col as isize) = LRound(
(*(*phase.offset(row as isize)).offset(col as isize)
- *(*phase.offset((row + 1 as ::core::ffi::c_long) as isize))
.offset(col as isize)) as ::core::ffi::c_double
/ TWOPI,
)
as ::core::ffi::c_short;
col += 1;
}
row += 1;
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
*(*(*flowsptr).offset((nrow - 1 as ::core::ffi::c_long + row) as isize))
.offset(col as isize) = LRound(
(*(*phase.offset(row as isize)).offset((col + 1 as ::core::ffi::c_long) as isize)
- *(*phase.offset(row as isize)).offset(col as isize))
as ::core::ffi::c_double
/ TWOPI,
) as ::core::ffi::c_short;
col += 1;
}
row += 1;
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn IntegratePhase(
mut psi: *mut *mut ::core::ffi::c_float,
mut phi: *mut *mut ::core::ffi::c_float,
mut flows: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut rowflow: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
let mut colflow: *mut *mut ::core::ffi::c_short =
::core::ptr::null_mut::<*mut ::core::ffi::c_short>();
rowflow = flows;
colflow =
flows.offset((nrow - 1 as ::core::ffi::c_long) as isize) as *mut *mut ::core::ffi::c_short;
*(*phi.offset(0 as ::core::ffi::c_int as isize)).offset(0 as ::core::ffi::c_int as isize) =
*(*psi.offset(0 as ::core::ffi::c_int as isize)).offset(0 as ::core::ffi::c_int as isize);
col = 1 as ::core::ffi::c_long;
while col < ncol {
*(*phi.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize) =
(*(*phi.offset(0 as ::core::ffi::c_int as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double
+ (ModDiff(
*(*psi.offset(0 as ::core::ffi::c_int as isize)).offset(col as isize)
as ::core::ffi::c_double,
*(*psi.offset(0 as ::core::ffi::c_int as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double,
) + *(*colflow.offset(0 as ::core::ffi::c_int as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_int as ::core::ffi::c_double
* TWOPI)) as ::core::ffi::c_float;
col += 1;
}
row = 1 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*phi.offset(row as isize)).offset(col as isize) =
(*(*phi.offset((row - 1 as ::core::ffi::c_long) as isize)).offset(col as isize)
as ::core::ffi::c_double
+ (ModDiff(
*(*psi.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double,
*(*psi.offset((row - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize) as ::core::ffi::c_double,
) - *(*rowflow.offset((row - 1 as ::core::ffi::c_long) as isize))
.offset(col as isize) as ::core::ffi::c_int
as ::core::ffi::c_double
* TWOPI)) as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ExtractFlow(
mut unwrappedphase: *mut *mut ::core::ffi::c_float,
mut flowsptr: *mut *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> *mut *mut ::core::ffi::c_float {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut wrappedphase: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
wrappedphase = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*wrappedphase.offset(row as isize)).offset(col as isize) =
(*(*unwrappedphase.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
- TWOPI
* floor(
*(*unwrappedphase.offset(row as isize)).offset(col as isize)
as ::core::ffi::c_double
/ TWOPI,
)) as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
CalcFlow(unwrappedphase, flowsptr, nrow, ncol);
return wrappedphase;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn FlipPhaseArraySign(
mut arr: *mut *mut ::core::ffi::c_float,
mut params: *mut paramT,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
if (*params).flipphasesign != 0 {
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*arr.offset(row as isize)).offset(col as isize) *=
-(1 as ::core::ffi::c_int) as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn FlipFlowArraySign(
mut arr: *mut *mut ::core::ffi::c_short,
mut params: *mut paramT,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut maxcol: ::core::ffi::c_long = 0;
if (*params).flipphasesign != 0 {
row = 0 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
if row < nrow - 1 as ::core::ffi::c_long {
maxcol = ncol;
} else {
maxcol = ncol - 1 as ::core::ffi::c_long;
}
col = 0 as ::core::ffi::c_long;
while col < maxcol {
*(*arr.offset(row as isize)).offset(col as isize) =
-(*(*arr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_int)
as ::core::ffi::c_short;
col += 1;
}
row += 1;
}
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Get2DMem(
mut nrow: ::core::ffi::c_int,
mut ncol: ::core::ffi::c_int,
mut psize: ::core::ffi::c_int,
mut size: size_t,
) -> *mut *mut ::core::ffi::c_void {
let mut row: ::core::ffi::c_long = 0;
let mut baseptr: *mut ::core::ffi::c_void = ::core::ptr::null_mut::<::core::ffi::c_void>();
let mut arr: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
if nrow < 1 as ::core::ffi::c_int || ncol < 1 as ::core::ffi::c_int {
return ::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
}
baseptr = CAlloc((nrow * ncol) as size_t, size);
arr = MAlloc(
(nrow as size_t).wrapping_mul(::core::mem::size_of::<*mut ::core::ffi::c_void>() as size_t),
) as *mut *mut ::core::ffi::c_void;
row = 0 as ::core::ffi::c_long;
while row < nrow as ::core::ffi::c_long {
let ref mut fresh0 = *arr.offset(row as isize);
*fresh0 = (baseptr as *mut ::core::ffi::c_char)
.offset(((row * ncol as ::core::ffi::c_long) as size_t).wrapping_mul(size) as isize)
as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void;
row += 1;
}
return arr;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Get2DRowColMem(
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut psize: ::core::ffi::c_int,
mut size: size_t,
) -> *mut *mut ::core::ffi::c_void {
let mut array: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
array = Get2DRowColZeroMem(nrow, ncol, psize, size);
return array;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Get2DRowColZeroMem(
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut psize: ::core::ffi::c_int,
mut size: size_t,
) -> *mut *mut ::core::ffi::c_void {
let mut row: ::core::ffi::c_long = 0;
let mut baseptr: *mut ::core::ffi::c_void = ::core::ptr::null_mut::<::core::ffi::c_void>();
let mut arr: *mut *mut ::core::ffi::c_void =
::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
if nrow < 1 as ::core::ffi::c_long || ncol < 1 as ::core::ffi::c_long {
return ::core::ptr::null_mut::<*mut ::core::ffi::c_void>();
}
baseptr = CAlloc(
((nrow - 1 as ::core::ffi::c_long) * ncol + nrow * (ncol - 1 as ::core::ffi::c_long))
as size_t,
size,
);
arr = MAlloc(
((2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long) as size_t)
.wrapping_mul(::core::mem::size_of::<*mut ::core::ffi::c_void>() as size_t),
) as *mut *mut ::core::ffi::c_void;
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
let ref mut fresh17 = *arr.offset(row as isize);
*fresh17 = (baseptr as *mut ::core::ffi::c_char)
.offset(((row * ncol) as size_t).wrapping_mul(size) as isize)
as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void;
row += 1;
}
row = nrow - 1 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
let ref mut fresh18 = *arr.offset(row as isize);
*fresh18 = (baseptr as *mut ::core::ffi::c_char).offset(
(((nrow - 1 as ::core::ffi::c_long) * ncol
+ (row - (nrow - 1 as ::core::ffi::c_long)) * (ncol - 1 as ::core::ffi::c_long))
as size_t)
.wrapping_mul(size) as isize,
) as *mut ::core::ffi::c_char as *mut ::core::ffi::c_void;
row += 1;
}
return arr;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn MAlloc(mut size: size_t) -> *mut ::core::ffi::c_void {
let mut ptr: *mut ::core::ffi::c_void = ::core::ptr::null_mut::<::core::ffi::c_void>();
if size == 0 as size_t {
return ::core::ptr::null_mut::<::core::ffi::c_void>();
}
ptr = malloc(size);
if ptr.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Out of memory\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return ptr;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CAlloc(mut nitems: size_t, mut size: size_t) -> *mut ::core::ffi::c_void {
let mut ptr: *mut ::core::ffi::c_void = ::core::ptr::null_mut::<::core::ffi::c_void>();
if size == 0 as size_t {
return ::core::ptr::null_mut::<::core::ffi::c_void>();
}
ptr = calloc(nitems, size);
if ptr.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Out of memory\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return ptr;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ReAlloc(
mut ptr: *mut ::core::ffi::c_void,
mut size: size_t,
) -> *mut ::core::ffi::c_void {
let mut ptr2: *mut ::core::ffi::c_void = ::core::ptr::null_mut::<::core::ffi::c_void>();
if size == 0 as size_t {
if !ptr.is_null() {
free(ptr);
}
return ::core::ptr::null_mut::<::core::ffi::c_void>();
}
ptr2 = realloc(ptr, size);
if ptr2.is_null() {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Out of memory\n\0" as *const u8 as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
return ptr2;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Free2DArray(
mut array: *mut *mut ::core::ffi::c_void,
mut nrow: ::core::ffi::c_uint,
) -> ::core::ffi::c_int {
if !array.is_null() {
if !(*array.offset(0 as ::core::ffi::c_int as isize)).is_null() {
free(*array.offset(0 as ::core::ffi::c_int as isize));
let ref mut fresh5 = *array.offset(0 as ::core::ffi::c_int as isize);
*fresh5 = NULL;
}
free(array as *mut ::core::ffi::c_void);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Set2DShortArray(
mut arr: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut value: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*arr.offset(row as isize)).offset(col as isize) = value as ::core::ffi::c_short;
col += 1;
}
row += 1;
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn ValidDataArray(
mut arr: *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_schar {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if IsFinite(*(*arr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double)
== 0
{
return 0 as ::core::ffi::c_schar;
}
col += 1;
}
row += 1;
}
return 1 as ::core::ffi::c_schar;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn NonNegDataArray(
mut arr: *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_schar {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if *(*arr.offset(row as isize)).offset(col as isize)
< 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
return 0 as ::core::ffi::c_schar;
}
col += 1;
}
row += 1;
}
return 1 as ::core::ffi::c_schar;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn IsFinite(mut d: ::core::ffi::c_double) -> ::core::ffi::c_schar {
return (if ::core::mem::size_of::<::core::ffi::c_double>() as usize
== ::core::mem::size_of::<::core::ffi::c_float>() as usize
{
__inline_isfinitef(d as ::core::ffi::c_float)
} else if ::core::mem::size_of::<::core::ffi::c_double>() as usize
== ::core::mem::size_of::<::core::ffi::c_double>() as usize
{
__inline_isfinited(d)
} else {
0
}) as ::core::ffi::c_schar;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn LRound(mut a: ::core::ffi::c_double) -> ::core::ffi::c_long {
return rint(a) as ::core::ffi::c_long;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn LMin(
mut a: ::core::ffi::c_long,
mut b: ::core::ffi::c_long,
) -> ::core::ffi::c_long {
if a < b {
return a;
} else {
return b;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn LClip(
mut a: ::core::ffi::c_long,
mut minval: ::core::ffi::c_long,
mut maxval: ::core::ffi::c_long,
) -> ::core::ffi::c_long {
if a < minval {
return minval;
} else if a > maxval {
return maxval;
} else {
return a;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Short2DRowColAbsMax(
mut arr: *mut *mut ::core::ffi::c_short,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_long {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut maxval: ::core::ffi::c_long = 0;
maxval = 0 as ::core::ffi::c_long;
row = 0 as ::core::ffi::c_long;
while row < nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol {
if labs(*(*arr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long)
> maxval
{
maxval =
labs(*(*arr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long);
}
col += 1;
}
row += 1;
}
row = nrow - 1 as ::core::ffi::c_long;
while row < 2 as ::core::ffi::c_long * nrow - 1 as ::core::ffi::c_long {
col = 0 as ::core::ffi::c_long;
while col < ncol - 1 as ::core::ffi::c_long {
if labs(*(*arr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long)
> maxval
{
maxval =
labs(*(*arr.offset(row as isize)).offset(col as isize) as ::core::ffi::c_long);
}
col += 1;
}
row += 1;
}
return maxval;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn LinInterp1D(
mut arr: *mut ::core::ffi::c_float,
mut index: ::core::ffi::c_double,
mut nelem: ::core::ffi::c_long,
) -> ::core::ffi::c_float {
let mut intpart: ::core::ffi::c_long = 0;
let mut fracpart: ::core::ffi::c_double = 0.;
intpart = floor(index) as ::core::ffi::c_long;
fracpart = index - intpart as ::core::ffi::c_double;
if intpart < 0 as ::core::ffi::c_long {
return *arr.offset(0 as ::core::ffi::c_int as isize);
} else if intpart >= nelem - 1 as ::core::ffi::c_long {
return *arr.offset((nelem - 1 as ::core::ffi::c_long) as isize);
} else {
return (((1 as ::core::ffi::c_int as ::core::ffi::c_double - fracpart)
* *arr.offset(intpart as isize) as ::core::ffi::c_double
+ fracpart
* *arr.offset((intpart + 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double)
/ 2.0f64) as ::core::ffi::c_float;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn LinInterp2D(
mut arr: *mut *mut ::core::ffi::c_float,
mut rowind: ::core::ffi::c_double,
mut colind: ::core::ffi::c_double,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_float {
let mut rowintpart: ::core::ffi::c_long = 0;
let mut rowfracpart: ::core::ffi::c_double = 0.;
rowintpart = floor(rowind) as ::core::ffi::c_long;
rowfracpart = rowind - rowintpart as ::core::ffi::c_double;
if rowintpart < 0 as ::core::ffi::c_long {
return LinInterp1D(*arr.offset(0 as ::core::ffi::c_int as isize), colind, ncol);
} else if rowintpart >= nrow - 1 as ::core::ffi::c_long {
return LinInterp1D(
*arr.offset((nrow - 1 as ::core::ffi::c_long) as isize),
colind,
ncol,
);
} else {
return (((1 as ::core::ffi::c_int as ::core::ffi::c_double - rowfracpart)
* LinInterp1D(*arr.offset(rowintpart as isize), colind, ncol) as ::core::ffi::c_double
+ rowfracpart
* LinInterp1D(
*arr.offset((rowintpart + 1 as ::core::ffi::c_long) as isize),
colind,
ncol,
) as ::core::ffi::c_double)
/ 2.0f64) as ::core::ffi::c_float;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Despeckle(
mut mag: *mut *mut ::core::ffi::c_float,
mut ei: *mut *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut intensity: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
let mut ratio: ::core::ffi::c_double = 0.;
let mut ratiomax: ::core::ffi::c_double = 0.;
let mut wfull: ::core::ffi::c_double = 0.;
let mut wstick: ::core::ffi::c_double = 0.;
let mut w: [::core::ffi::c_double; 9] = [0.; 9];
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut i: ::core::ffi::c_long = 0;
let mut j: ::core::ffi::c_long = 0;
let mut k: ::core::ffi::c_long = 0;
let mut Irow: ::core::ffi::c_long = 0;
let mut Icol: ::core::ffi::c_long = 0;
let mut jmin: [::core::ffi::c_short; 5] = [
2 as ::core::ffi::c_int as ::core::ffi::c_short,
2 as ::core::ffi::c_int as ::core::ffi::c_short,
0 as ::core::ffi::c_int as ::core::ffi::c_short,
1 as ::core::ffi::c_int as ::core::ffi::c_short,
2 as ::core::ffi::c_int as ::core::ffi::c_short,
];
let mut jmax: [::core::ffi::c_short; 5] = [
2 as ::core::ffi::c_int as ::core::ffi::c_short,
3 as ::core::ffi::c_int as ::core::ffi::c_short,
4 as ::core::ffi::c_int as ::core::ffi::c_short,
3 as ::core::ffi::c_int as ::core::ffi::c_short,
2 as ::core::ffi::c_int as ::core::ffi::c_short,
];
if (*ei).is_null() {
*ei = Get2DMem(
nrow as ::core::ffi::c_int,
ncol as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
}
intensity = MirrorPad(
mag,
nrow,
ncol,
ARMLEN as ::core::ffi::c_long,
ARMLEN as ::core::ffi::c_long,
);
if intensity == mag {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Despeckling box size too large for input array size\nAbort\n\0" as *const u8
as *const ::core::ffi::c_char,
);
exit(ABNORMAL_EXIT);
}
row = 0 as ::core::ffi::c_long;
while row < nrow {
Irow = row + ARMLEN as ::core::ffi::c_long;
col = 0 as ::core::ffi::c_long;
while col < ncol {
Icol = col + ARMLEN as ::core::ffi::c_long;
if *(*intensity.offset(Irow as isize)).offset(Icol as isize)
== 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
*(*(*ei).offset(row as isize)).offset(col as isize) =
0 as ::core::ffi::c_int as ::core::ffi::c_float;
} else {
k = 0 as ::core::ffi::c_long;
while k < (NARMS + 1 as ::core::ffi::c_int) as ::core::ffi::c_long {
w[k as usize] = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
k += 1;
}
i = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
while i <= 1 as ::core::ffi::c_long {
j = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
while j <= 1 as ::core::ffi::c_long {
w[C as ::core::ffi::c_int as usize] +=
*(*intensity.offset((Irow + i) as isize)).offset((Icol + j) as isize)
as ::core::ffi::c_double;
j += 1;
}
i += 1;
}
i = -(1 as ::core::ffi::c_int) as ::core::ffi::c_long;
while i <= 1 as ::core::ffi::c_long {
j = 2 as ::core::ffi::c_long;
while j < (ARMLEN + 1 as ::core::ffi::c_int) as ::core::ffi::c_long {
w[T as ::core::ffi::c_int as usize] +=
*(*intensity.offset((Irow - j) as isize)).offset((Icol + i) as isize)
as ::core::ffi::c_double;
w[B as ::core::ffi::c_int as usize] +=
*(*intensity.offset((Irow + j) as isize)).offset((Icol + i) as isize)
as ::core::ffi::c_double;
w[L as ::core::ffi::c_int as usize] +=
*(*intensity.offset((Irow + i) as isize)).offset((Icol - j) as isize)
as ::core::ffi::c_double;
w[R as ::core::ffi::c_int as usize] +=
*(*intensity.offset((Irow + i) as isize)).offset((Icol + j) as isize)
as ::core::ffi::c_double;
j += 1;
}
i += 1;
}
i = 0 as ::core::ffi::c_long;
while i <= 4 as ::core::ffi::c_long {
j = jmin[i as usize] as ::core::ffi::c_long;
while j <= jmax[i as usize] as ::core::ffi::c_long {
w[TR as ::core::ffi::c_int as usize] +=
*(*intensity.offset((Irow - i) as isize)).offset((Icol + j) as isize)
as ::core::ffi::c_double;
w[BR as ::core::ffi::c_int as usize] +=
*(*intensity.offset((Irow + i) as isize)).offset((Icol + j) as isize)
as ::core::ffi::c_double;
w[BL as ::core::ffi::c_int as usize] +=
*(*intensity.offset((Irow + i) as isize)).offset((Icol - j) as isize)
as ::core::ffi::c_double;
w[TL as ::core::ffi::c_int as usize] +=
*(*intensity.offset((Irow - i) as isize)).offset((Icol - j) as isize)
as ::core::ffi::c_double;
j += 1;
}
i += 1;
}
wfull = w[C as ::core::ffi::c_int as usize]
+ w[T as ::core::ffi::c_int as usize]
+ w[R as ::core::ffi::c_int as usize]
+ w[B as ::core::ffi::c_int as usize]
+ w[L as ::core::ffi::c_int as usize];
i = 2 as ::core::ffi::c_long;
while i < 5 as ::core::ffi::c_long {
j = 2 as ::core::ffi::c_long;
while j < 7 as ::core::ffi::c_long - i {
wfull += *(*intensity.offset((Irow + i) as isize))
.offset((Icol + j) as isize)
as ::core::ffi::c_double;
wfull += *(*intensity.offset((Irow - i) as isize))
.offset((Icol + j) as isize)
as ::core::ffi::c_double;
wfull += *(*intensity.offset((Irow + i) as isize))
.offset((Icol - j) as isize)
as ::core::ffi::c_double;
wfull += *(*intensity.offset((Irow - i) as isize))
.offset((Icol - j) as isize)
as ::core::ffi::c_double;
j += 1;
}
i += 1;
}
ratiomax = 1 as ::core::ffi::c_int as ::core::ffi::c_double;
k = 1 as ::core::ffi::c_long;
while k <= NARMS as ::core::ffi::c_long {
wstick = w[0 as ::core::ffi::c_int as usize]
+ w[k as usize]
+ w[(k + 1 as ::core::ffi::c_long) as usize];
ratio = wstick / (wfull - wstick);
if ratio < 1 as ::core::ffi::c_int as ::core::ffi::c_double {
ratio = 1 as ::core::ffi::c_int as ::core::ffi::c_double / ratio;
}
if ratio > ratiomax {
ratiomax = ratio;
*(*(*ei).offset(row as isize)).offset(col as isize) =
wstick as ::core::ffi::c_float;
}
k += 2 as ::core::ffi::c_long;
}
}
col += 1;
}
row += 1;
}
Free2DArray(
intensity as *mut *mut ::core::ffi::c_void,
(nrow + (2 as ::core::ffi::c_int * ARMLEN) as ::core::ffi::c_long) as ::core::ffi::c_uint,
);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn MirrorPad(
mut array1: *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut krow: ::core::ffi::c_long,
mut kcol: ::core::ffi::c_long,
) -> *mut *mut ::core::ffi::c_float {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut array2: *mut *mut ::core::ffi::c_float =
::core::ptr::null_mut::<*mut ::core::ffi::c_float>();
array2 = Get2DMem(
(nrow + 2 as ::core::ffi::c_long * krow) as ::core::ffi::c_int,
(ncol + 2 as ::core::ffi::c_long * kcol) as ::core::ffi::c_int,
::core::mem::size_of::<*mut ::core::ffi::c_float>() as ::core::ffi::c_int,
::core::mem::size_of::<::core::ffi::c_float>() as size_t,
) as *mut *mut ::core::ffi::c_float;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*array2.offset((row + krow) as isize)).offset((col + kcol) as isize) =
*(*array1.offset(row as isize)).offset(col as isize);
col += 1;
}
row += 1;
}
if krow > nrow || kcol > ncol {
return array1;
}
row = 0 as ::core::ffi::c_long;
while row < krow {
col = 0 as ::core::ffi::c_long;
while col < kcol {
*(*array2.offset(row as isize)).offset(col as isize) = *(*array2
.offset((2 as ::core::ffi::c_long * krow - row) as isize))
.offset((2 as ::core::ffi::c_long * kcol - col) as isize);
*(*array2.offset(row as isize)).offset((ncol + kcol + col) as isize) = *(*array2
.offset((2 as ::core::ffi::c_long * krow - row) as isize))
.offset((ncol + kcol - 2 as ::core::ffi::c_long - col) as isize);
*(*array2.offset((nrow + krow + row) as isize)).offset(col as isize) = *(*array2
.offset((nrow + krow - 2 as ::core::ffi::c_long - row) as isize))
.offset((2 as ::core::ffi::c_long * kcol - col) as isize);
*(*array2.offset((nrow + krow + row) as isize)).offset((ncol + kcol + col) as isize) =
*(*array2.offset((nrow + krow - 2 as ::core::ffi::c_long - row) as isize))
.offset((ncol + kcol - 2 as ::core::ffi::c_long - col) as isize);
col += 1;
}
row += 1;
}
row = krow;
while row < nrow + krow {
col = 0 as ::core::ffi::c_long;
while col < kcol {
*(*array2.offset(row as isize)).offset(col as isize) = *(*array2.offset(row as isize))
.offset((2 as ::core::ffi::c_long * kcol - col) as isize);
*(*array2.offset(row as isize)).offset((ncol + kcol + col) as isize) = *(*array2
.offset(row as isize))
.offset((ncol + kcol - 2 as ::core::ffi::c_long - col) as isize);
col += 1;
}
row += 1;
}
col = kcol;
while col < ncol + kcol {
row = 0 as ::core::ffi::c_long;
while row < krow {
*(*array2.offset(row as isize)).offset(col as isize) = *(*array2
.offset((2 as ::core::ffi::c_long * krow - row) as isize))
.offset(col as isize);
*(*array2.offset((nrow + krow + row) as isize)).offset(col as isize) = *(*array2
.offset((nrow + krow - 2 as ::core::ffi::c_long - row) as isize))
.offset(col as isize);
row += 1;
}
col += 1;
}
return array2;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn BoxCarAvg(
mut avgarr: *mut *mut ::core::ffi::c_float,
mut padarr: *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
mut krow: ::core::ffi::c_long,
mut kcol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut i: ::core::ffi::c_long = 0;
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
let mut n_0: ::core::ffi::c_long = 0;
let mut window: ::core::ffi::c_double = 0.;
row = 0 as ::core::ffi::c_long;
while row < nrow {
window = 0 as ::core::ffi::c_int as ::core::ffi::c_double;
i = row;
while i < row + krow {
col = 0 as ::core::ffi::c_long;
while col < kcol {
window +=
*(*padarr.offset(i as isize)).offset(col as isize) as ::core::ffi::c_double;
col += 1;
}
i += 1;
}
*(*avgarr.offset(row as isize)).offset(0 as ::core::ffi::c_int as isize) =
window as ::core::ffi::c_float;
col = 1 as ::core::ffi::c_long;
while col < ncol {
i = row;
while i < row + krow {
window -= *(*padarr.offset(i as isize))
.offset((col - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double;
window += *(*padarr.offset(i as isize))
.offset((col + kcol - 1 as ::core::ffi::c_long) as isize)
as ::core::ffi::c_double;
i += 1;
}
*(*avgarr.offset(row as isize)).offset(col as isize) = window as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
n_0 = krow * kcol;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*avgarr.offset(row as isize)).offset(col as isize) /= n_0 as ::core::ffi::c_float;
col += 1;
}
row += 1;
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn StrNCopy(
mut dest: *mut ::core::ffi::c_char,
mut src: *const ::core::ffi::c_char,
mut n_0: size_t,
) -> *mut ::core::ffi::c_char {
let mut s: *mut ::core::ffi::c_char = ::core::ptr::null_mut::<::core::ffi::c_char>();
s = strncpy(dest, src, n_0.wrapping_sub(1 as size_t));
*dest.offset(n_0.wrapping_sub(1 as size_t) as isize) = '\0' as i32 as ::core::ffi::c_char;
return s;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn FlattenWrappedPhase(
mut wrappedphase: *mut *mut ::core::ffi::c_float,
mut unwrappedest: *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*wrappedphase.offset(row as isize)).offset(col as isize) -=
*(*unwrappedest.offset(row as isize)).offset(col as isize);
*(*wrappedphase.offset(row as isize)).offset(col as isize) = fmod(
*(*wrappedphase.offset(row as isize)).offset(col as isize) as ::core::ffi::c_double,
TWOPI,
)
as ::core::ffi::c_float;
if *(*wrappedphase.offset(row as isize)).offset(col as isize)
< 0 as ::core::ffi::c_int as ::core::ffi::c_float
{
let ref mut fresh160 = *(*wrappedphase.offset(row as isize)).offset(col as isize);
*fresh160 = (*fresh160 as ::core::ffi::c_double + TWOPI) as ::core::ffi::c_float;
}
col += 1;
}
row += 1;
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn Add2DFloatArrays(
mut arr1: *mut *mut ::core::ffi::c_float,
mut arr2: *mut *mut ::core::ffi::c_float,
mut nrow: ::core::ffi::c_long,
mut ncol: ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut row: ::core::ffi::c_long = 0;
let mut col: ::core::ffi::c_long = 0;
row = 0 as ::core::ffi::c_long;
while row < nrow {
col = 0 as ::core::ffi::c_long;
while col < ncol {
*(*arr1.offset(row as isize)).offset(col as isize) +=
*(*arr2.offset(row as isize)).offset(col as isize);
col += 1;
}
row += 1;
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn StringToDouble(
mut str: *mut ::core::ffi::c_char,
mut d: *mut ::core::ffi::c_double,
) -> ::core::ffi::c_int {
let mut tempdouble: ::core::ffi::c_double = 0.;
let mut endp: *mut ::core::ffi::c_char = ::core::ptr::null_mut::<::core::ffi::c_char>();
endp = str;
tempdouble = strtod(str, &raw mut endp);
if strlen(endp) != 0
|| tempdouble >= ::core::f64::INFINITY
|| tempdouble <= -::core::f64::INFINITY
{
return 1 as ::core::ffi::c_int;
} else {
*d = tempdouble;
return 0 as ::core::ffi::c_int;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn StringToLong(
mut str: *mut ::core::ffi::c_char,
mut l: *mut ::core::ffi::c_long,
) -> ::core::ffi::c_int {
let mut templong: ::core::ffi::c_long = 0;
let mut endp: *mut ::core::ffi::c_char = ::core::ptr::null_mut::<::core::ffi::c_char>();
endp = str;
templong = strtol(str, &raw mut endp, 10 as ::core::ffi::c_int);
if strlen(endp) != 0 || templong == LONG_MAX || templong == LONG_MIN {
return 1 as ::core::ffi::c_int;
} else {
*l = templong;
return 0 as ::core::ffi::c_int;
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CatchSignals(
mut SigHandler: Option<unsafe extern "C" fn(::core::ffi::c_int) -> ()>,
) -> ::core::ffi::c_int {
signal(SIGHUP, SigHandler);
signal(SIGINT, SigHandler);
signal(SIGQUIT, SigHandler);
signal(SIGILL, SigHandler);
signal(SIGABRT, SigHandler);
signal(SIGFPE, SigHandler);
signal(SIGSEGV, SigHandler);
signal(SIGPIPE, SigHandler);
signal(SIGALRM, SigHandler);
signal(SIGTERM, SigHandler);
signal(SIGBUS, SigHandler);
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SetDump(mut signum: ::core::ffi::c_int) {
if signum == SIGINT {
signal(
SIGINT,
::core::mem::transmute::<
Option<unsafe extern "C" fn(::core::ffi::c_int) -> !>,
Option<unsafe extern "C" fn(::core::ffi::c_int) -> ()>,
>(Some(exit as unsafe extern "C" fn(::core::ffi::c_int) -> !)),
);
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"\n\nSIGINT signal caught. Please wait for graceful exit\n\0" as *const u8
as *const ::core::ffi::c_char,
);
fprintf(
sp0,
b"(One more interrupt signal halts job)\n\0" as *const u8 as *const ::core::ffi::c_char,
);
dumpresults_global = TRUE as ::core::ffi::c_char;
requestedstop_global = TRUE as ::core::ffi::c_char;
} else if signum == SIGHUP {
signal(
SIGHUP,
Some(SetDump as unsafe extern "C" fn(::core::ffi::c_int) -> ()),
);
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"\n\nSIGHUP signal caught. Dumping results\n\0" as *const u8
as *const ::core::ffi::c_char,
);
dumpresults_global = TRUE as ::core::ffi::c_char;
} else {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"WARNING: Invalid signal (%d) passed to signal handler\n\0" as *const u8
as *const ::core::ffi::c_char,
signum,
);
};
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn KillChildrenExit(mut signum: ::core::ffi::c_int) {
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Parent received signal %d\nKilling children and exiting\n\0" as *const u8
as *const ::core::ffi::c_char,
signum,
);
fflush(::core::ptr::null_mut::<FILE>());
signal(
SIGTERM,
::core::mem::transmute::<
::libc::intptr_t,
Option<unsafe extern "C" fn(::core::ffi::c_int) -> ()>,
>(1 as ::core::ffi::c_int as ::libc::intptr_t),
);
kill(0 as pid_t, SIGTERM);
exit(ABNORMAL_EXIT);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn SignalExit(mut signum: ::core::ffi::c_int) {
signal(
SIGTERM,
::core::mem::transmute::<
::libc::intptr_t,
Option<unsafe extern "C" fn(::core::ffi::c_int) -> ()>,
>(1 as ::core::ffi::c_int as ::libc::intptr_t),
);
fflush(::core::ptr::null_mut::<FILE>());
fprintf(
sp0,
b"Exiting with status %d on signal %d\n\0" as *const u8 as *const ::core::ffi::c_char,
ABNORMAL_EXIT,
signum,
);
fflush(::core::ptr::null_mut::<FILE>());
exit(ABNORMAL_EXIT);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn StartTimers(
mut tstart: *mut time_t,
mut cputimestart: *mut ::core::ffi::c_double,
) -> ::core::ffi::c_int {
let mut usagebuf: rusage = rusage {
ru_utime: timeval {
tv_sec: 0,
tv_usec: 0,
},
ru_stime: timeval {
tv_sec: 0,
tv_usec: 0,
},
ru_maxrss: 0,
ru_ixrss: 0,
ru_idrss: 0,
ru_isrss: 0,
ru_minflt: 0,
ru_majflt: 0,
ru_nswap: 0,
ru_inblock: 0,
ru_oublock: 0,
ru_msgsnd: 0,
ru_msgrcv: 0,
ru_nsignals: 0,
ru_nvcsw: 0,
ru_nivcsw: 0,
};
*tstart = time(::core::ptr::null_mut::<time_t>());
*cputimestart = -1.0f64;
if getrusage(RUSAGE_SELF, &raw mut usagebuf) == 0 {
*cputimestart = usagebuf.ru_utime.tv_sec as ::core::ffi::c_double
+ usagebuf.ru_utime.tv_usec as ::core::ffi::c_double
/ 1000000 as ::core::ffi::c_int as ::core::ffi::c_double
+ usagebuf.ru_stime.tv_sec as ::core::ffi::c_double
+ usagebuf.ru_stime.tv_usec as ::core::ffi::c_double
/ 1000000 as ::core::ffi::c_int as ::core::ffi::c_double;
if getrusage(RUSAGE_CHILDREN, &raw mut usagebuf) == 0 {
*cputimestart += usagebuf.ru_utime.tv_sec as ::core::ffi::c_double
+ usagebuf.ru_utime.tv_usec as ::core::ffi::c_double
/ 1000000 as ::core::ffi::c_int as ::core::ffi::c_double
+ usagebuf.ru_stime.tv_sec as ::core::ffi::c_double
+ usagebuf.ru_stime.tv_usec as ::core::ffi::c_double
/ 1000000 as ::core::ffi::c_int as ::core::ffi::c_double;
}
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn DisplayElapsedTime(
mut tstart: time_t,
mut cputimestart: ::core::ffi::c_double,
) -> ::core::ffi::c_int {
let mut cputime: ::core::ffi::c_double = 0.;
let mut walltime: ::core::ffi::c_double = 0.;
let mut seconds: ::core::ffi::c_double = 0.;
let mut hours: ::core::ffi::c_long = 0;
let mut minutes: ::core::ffi::c_long = 0;
let mut tstop: time_t = 0;
let mut usagebuf: rusage = rusage {
ru_utime: timeval {
tv_sec: 0,
tv_usec: 0,
},
ru_stime: timeval {
tv_sec: 0,
tv_usec: 0,
},
ru_maxrss: 0,
ru_ixrss: 0,
ru_idrss: 0,
ru_isrss: 0,
ru_minflt: 0,
ru_majflt: 0,
ru_nswap: 0,
ru_inblock: 0,
ru_oublock: 0,
ru_msgsnd: 0,
ru_msgrcv: 0,
ru_nsignals: 0,
ru_nvcsw: 0,
ru_nivcsw: 0,
};
cputime = -1.0f64;
if getrusage(RUSAGE_CHILDREN, &raw mut usagebuf) == 0 {
cputime = usagebuf.ru_utime.tv_sec as ::core::ffi::c_double
+ usagebuf.ru_utime.tv_usec as ::core::ffi::c_double
/ 1000000 as ::core::ffi::c_int as ::core::ffi::c_double
+ usagebuf.ru_stime.tv_sec as ::core::ffi::c_double
+ usagebuf.ru_stime.tv_usec as ::core::ffi::c_double
/ 1000000 as ::core::ffi::c_int as ::core::ffi::c_double;
if getrusage(RUSAGE_SELF, &raw mut usagebuf) == 0 {
cputime += usagebuf.ru_utime.tv_sec as ::core::ffi::c_double
+ usagebuf.ru_utime.tv_usec as ::core::ffi::c_double
/ 1000000 as ::core::ffi::c_int as ::core::ffi::c_double
+ usagebuf.ru_stime.tv_sec as ::core::ffi::c_double
+ usagebuf.ru_stime.tv_usec as ::core::ffi::c_double
/ 1000000 as ::core::ffi::c_int as ::core::ffi::c_double;
}
}
tstop = time(::core::ptr::null_mut::<time_t>());
if cputime > 0 as ::core::ffi::c_int as ::core::ffi::c_double
&& cputimestart >= 0 as ::core::ffi::c_int as ::core::ffi::c_double
{
cputime -= cputimestart;
hours = floor(cputime / 3600 as ::core::ffi::c_int as ::core::ffi::c_double)
as ::core::ffi::c_long;
minutes = floor(
(cputime - (3600 as ::core::ffi::c_long * hours) as ::core::ffi::c_double)
/ 60 as ::core::ffi::c_int as ::core::ffi::c_double,
) as ::core::ffi::c_long;
seconds = cputime
- (3600 as ::core::ffi::c_long * hours) as ::core::ffi::c_double
- (60 as ::core::ffi::c_long * minutes) as ::core::ffi::c_double;
fprintf(
sp1,
b"Elapsed processor time: %ld:%02ld:%05.2f\n\0" as *const u8
as *const ::core::ffi::c_char,
hours,
minutes,
seconds,
);
}
if tstart > 0 as time_t && tstop > 0 as time_t {
walltime = (tstop - tstart) as ::core::ffi::c_double;
hours = floor(walltime / 3600 as ::core::ffi::c_int as ::core::ffi::c_double)
as ::core::ffi::c_long;
minutes = floor(
(walltime - (3600 as ::core::ffi::c_long * hours) as ::core::ffi::c_double)
/ 60 as ::core::ffi::c_int as ::core::ffi::c_double,
) as ::core::ffi::c_long;
seconds = walltime
- (3600 as ::core::ffi::c_long * hours) as ::core::ffi::c_double
- (60 as ::core::ffi::c_long * minutes) as ::core::ffi::c_double;
fprintf(
sp1,
b"Elapsed wall clock time: %ld:%02ld:%02ld\n\0" as *const u8
as *const ::core::ffi::c_char,
hours,
minutes,
seconds as ::core::ffi::c_long,
);
}
return 0 as ::core::ffi::c_int;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn LongCompare(
mut c1: *const ::core::ffi::c_void,
mut c2: *const ::core::ffi::c_void,
) -> ::core::ffi::c_int {
return (*(c1 as *mut ::core::ffi::c_long) - *(c2 as *mut ::core::ffi::c_long))
as ::core::ffi::c_int;
}
pub const NULL: *mut ::core::ffi::c_void = __DARWIN_NULL;