Exemplo n.º 1
0
int CompareLinCtStereoCarb ( AT_STEREO_CARB *LinearCTStereoCarb1, int nLenLinearCTStereoCarb1,
                             AT_STEREO_CARB *LinearCTStereoCarb2, int nLenLinearCTStereoCarb2 )
{
    int i, num, ret = 0;

    /* compare stereocenters */
    if ( LinearCTStereoCarb1 && LinearCTStereoCarb2 ) {
        num = inchi_min(nLenLinearCTStereoCarb1, nLenLinearCTStereoCarb2);
        for ( i = 0; i < num; i ++ ) {
            if ( ret = (int)LinearCTStereoCarb1[i].at_num - (int)LinearCTStereoCarb2[i].at_num )
                break;
            if ( ret = (int)LinearCTStereoCarb1[i].parity - (int)LinearCTStereoCarb2[i].parity )
                break;
        }
        if ( !ret ) {
            ret = nLenLinearCTStereoCarb1 - nLenLinearCTStereoCarb2;
        }
    } else
    if ( LinearCTStereoCarb1 && nLenLinearCTStereoCarb1 > 0 ) {
        ret = 1;
    } else
    if ( LinearCTStereoCarb2 && nLenLinearCTStereoCarb2 > 0 ) {
        ret = -1;
    }

    return ret;
}
Exemplo n.º 2
0
int CompareLinCtStereoDble ( AT_STEREO_DBLE *LinearCTStereoDble1, int nLenLinearCTStereoDble1,
                             AT_STEREO_DBLE *LinearCTStereoDble2, int nLenLinearCTStereoDble2 )
{
    int i, num, ret = 0;

    /* compare double bonds */
    if ( LinearCTStereoDble1 && LinearCTStereoDble2 ) {
        num = inchi_min(nLenLinearCTStereoDble1, nLenLinearCTStereoDble2);
        for ( i = 0; i < num; i ++ ) {
            if ( ret = (int)LinearCTStereoDble1[i].at_num1 - (int)LinearCTStereoDble2[i].at_num1 )
                break;
            if ( ret = (int)LinearCTStereoDble1[i].at_num2 - (int)LinearCTStereoDble2[i].at_num2 )
                break;
            if ( ret = (int)LinearCTStereoDble1[i].parity - (int)LinearCTStereoDble2[i].parity )
                break;
        }
        if ( !ret ) {
            ret = nLenLinearCTStereoDble1 - nLenLinearCTStereoDble2;
        }
    } else
    if ( LinearCTStereoDble1 && nLenLinearCTStereoDble1 > 0 ) {
        ret = 1;
    } else
    if ( LinearCTStereoDble2 && nLenLinearCTStereoDble2 > 0 ) {
        ret = -1;
    }
    return ret;
}
Exemplo n.º 3
0
/*  lexicographic compare */
int CompareNeighListLex( NEIGH_LIST pp1, NEIGH_LIST pp2, const AT_RANK *nRank)
{
    int len1 = (int)*pp1++;
    int len2 = (int)*pp2++;
    int len  = inchi_min( len1, len2 );
    int diff = 0;
    while ( len -- > 0 && !( diff = (int)nRank[*pp1++] - (int)nRank[*pp2++] ) )
        ;
    return diff? diff : (len1 - len2);

}
Exemplo n.º 4
0
/*  lexicographic compare */
int CompareNeighListLexUpToMaxRank( NEIGH_LIST pp1, NEIGH_LIST pp2, const AT_RANK *nRank, AT_RANK nMaxAtNeighRank )
{
    int len1 = (int)*pp1++;
    int len2 = (int)*pp2++;
    int diff = 0;
    int len;
    while( 0 < len1 && nRank[pp1[len1-1]] > nMaxAtNeighRank ) {
        len1 --;
    }
    while( 0 < len2 && nRank[pp2[len2-1]] > nMaxAtNeighRank ) {
        len2 --;
    }
    len  = inchi_min( len1, len2 );
    while ( len -- > 0 && !( diff = (int)nRank[*pp1++] - (int)nRank[*pp2++] ) )
        ;
    return diff? diff : (len1 - len2);

}