#include "camd_internal.h"
GLOBAL Int CAMD_valid
(
Int n_row,
Int n_col,
const Int Ap [ ],
const Int Ai [ ]
)
{
Int nz, j, p1, p2, ilast, i, p, result = CAMD_OK ;
if (n_row < 0 || n_col < 0 || Ap == NULL || Ai == NULL)
{
return (CAMD_INVALID) ;
}
nz = Ap [n_col] ;
if (Ap [0] != 0 || nz < 0)
{
CAMD_DEBUG0 (("column 0 pointer bad or nz < 0\n")) ;
return (CAMD_INVALID) ;
}
for (j = 0 ; j < n_col ; j++)
{
p1 = Ap [j] ;
p2 = Ap [j+1] ;
CAMD_DEBUG2 (("\nColumn: "ID" p1: "ID" p2: "ID"\n", j, p1, p2)) ;
if (p1 > p2)
{
CAMD_DEBUG0 (("column "ID" pointer bad\n", j)) ;
return (CAMD_INVALID) ;
}
ilast = EMPTY ;
for (p = p1 ; p < p2 ; p++)
{
i = Ai [p] ;
CAMD_DEBUG3 (("row: "ID"\n", i)) ;
if (i < 0 || i >= n_row)
{
CAMD_DEBUG0 (("index out of range, col "ID" row "ID"\n", j, i));
return (CAMD_INVALID) ;
}
if (i <= ilast)
{
CAMD_DEBUG1 (("index unsorted/dupl col "ID" row "ID"\n", j, i));
result = CAMD_OK_BUT_JUMBLED ;
}
ilast = i ;
}
}
return (result) ;
}
GLOBAL Int CAMD_cvalid
(
Int n,
const Int C [ ]
)
{
Int i ;
if (C != NULL)
{
for (i = 0 ; i < n ; i++)
{
if (C [i] < 0 || C [i] > n - 1)
{
CAMD_DEBUG0 (("C["ID"] = "ID" invalid\n", i, C [i])) ;
return (FALSE) ;
}
}
}
return (TRUE) ;
}