Annotation of 43BSD/contrib/icon/functions/insert.c, revision 1.1.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.