Annotation of researchv10no/cmd/cfront/libstring/test14.c, revision 1.1

1.1     ! root        1: // list test program.  Sorts standard input, prints with counts
        !             2: #include "pair.h"
        !             3: #include "list.h"
        !             4: 
        !             5: plistdeclare(pair)
        !             6: plistimplement(pair)
        !             7: plistoutimplement(pair)
        !             8: 
        !             9: pairP_list     sort(pairP_list);
        !            10: 
        !            11: main()
        !            12: {
        !            13:        String  s;
        !            14:        pairP_list      myList;
        !            15:        /* input */
        !            16:        while (cin >> s)
        !            17:                myList.put(new pair(s,1));
        !            18:        myList = sort(myList);
        !            19:        /* print result */
        !            20:        operator<<(cout,myList) << "\n"; // work around iostream bug
        !            21:        pair    *p;
        !            22:        while (myList.getX(p))
        !            23:                delete p;
        !            24: }
        !            25: 
        !            26: pairP_list
        !            27: sort(pairP_list aList) // straight insertion
        !            28: {
        !            29:        pairP_list_iterator     unsorted(aList);
        !            30:        if ( unsorted.next() ) {
        !            31:                pair    *p;
        !            32:                while ( unsorted.r_removeX(p) ) {
        !            33:                        pairP_list_iterator     sorted = unsorted;
        !            34:                        pair    **q;  // pointer into sorted part
        !            35:                        while ( sorted.r_nextX(q) && (*q)->word > p->word )
        !            36:                                ;
        !            37:                        if ( (*q)->word < p->word )
        !            38:                                sorted.next();   // back up
        !            39:                        else if ( (*q)->word == p->word ) {
        !            40:                                (*q)->count += p->count;
        !            41:                                delete p;
        !            42:                                continue;
        !            43:                        }
        !            44:                        sorted.r_insert(p);
        !            45:                }
        !            46:        }
        !            47:        return aList;
        !            48: }
        !            49: 
        !            50: ostream&
        !            51: operator<<(ostream& oo, pair *p)
        !            52: {
        !            53:        return oo << "(" << p->word << ", " << p->count << ")\n";
        !            54: }

unix.superglobalmegacorp.com

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