Annotation of 43BSD/contrib/icon/functions/insert.c, revision 1.1

1.1     ! root        1: #include "../h/rt.h"
        !             2: #ifdef SETS
        !             3: 
        !             4: /*
        !             5:  * insert(S,x) - insert element x into set S if not already there
        !             6:  *  (always succeeds and returns S).
        !             7:  */
        !             8: 
        !             9: Xinsert(nargs,arg2,arg1,arg0)
        !            10: int nargs;
        !            11: struct descrip arg0, arg1, arg2;
        !            12:    {
        !            13:    register struct descrip *pd;
        !            14:    register int  hn;
        !            15:    int res;
        !            16:    extern struct b_selem *alcselem();
        !            17:    extern struct descrip *memb();
        !            18: 
        !            19:    DeRef(arg1)
        !            20:    DeRef(arg2)
        !            21:    arg0 = arg1;
        !            22: 
        !            23:    if (QUAL(arg1) || TYPE(arg1) != T_SET)
        !            24:       runerr(119,&arg1);
        !            25: 
        !            26:       /*
        !            27:       * We may need at most one new element.
        !            28:       */
        !            29:    hneed(sizeof(struct b_selem));
        !            30:    hn = hash(&arg2);
        !            31:    /*
        !            32:     * If arg2 is a member of set arg1 then res will have the
        !            33:     *  value 1 and pd will have a pointer to the descriptor
        !            34:     *  that points to that member.
        !            35:     *  If arg2 is not a member of the set then res will have
        !            36:     *  the value 0 and pd will point to the descriptor
        !            37:     *  which should point to the member - thus we know where
        !            38:     *  to link in the new element without having to do any
        !            39:     *  repetitive looking.
        !            40:     */
        !            41:    pd = memb(BLKLOC(arg1),&arg2,hn,&res);
        !            42:    if (res == 0)
        !            43:       /*
        !            44:       * The element is not in the set - insert it.
        !            45:       */
        !            46:       addmem(BLKLOC(arg1),alcselem(&arg2,hn),pd);
        !            47:    }
        !            48: 
        !            49: Procblock(insert,2)
        !            50: 
        !            51: #else SETS
        !            52: char junk;                     /* prevent null object file  */
        !            53: #endif SETS

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.