Annotation of researchv10no/cmd/cfront/libstring/test14.c, revision 1.1.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.