From 7e8eb69558b9b4c5958f68560c58dbbb03287a5e Mon Sep 17 00:00:00 2001 From: CSRG Date: Wed, 29 Mar 1989 12:00:03 -0800 Subject: [PATCH] BSD 4_3_Net_2 development Work on file usr/src/lib/libg++/grot/etc/ADT-examples/generic-q.cc Work on file usr/src/lib/libg++/grot/etc/typemacros.h Synthesized-from: CSRG/cd2/net.2 --- .../libg++/grot/etc/ADT-examples/generic-q.cc | 102 ++++++++++++++++++ usr/src/lib/libg++/grot/etc/typemacros.h | 8 ++ 2 files changed, 110 insertions(+) create mode 100644 usr/src/lib/libg++/grot/etc/ADT-examples/generic-q.cc create mode 100644 usr/src/lib/libg++/grot/etc/typemacros.h diff --git a/usr/src/lib/libg++/grot/etc/ADT-examples/generic-q.cc b/usr/src/lib/libg++/grot/etc/ADT-examples/generic-q.cc new file mode 100644 index 0000000000..679001d279 --- /dev/null +++ b/usr/src/lib/libg++/grot/etc/ADT-examples/generic-q.cc @@ -0,0 +1,102 @@ +// From: "Douglas C. Schmidt" +// Date: Sun, 25 Sep 88 16:19:35 -0700 + +#include +#include +#include +#include + +#define queue(type) name2(type,queue) +#define list(type) name2(type,list) +#define queuedeclare(type) \ +class queue(type) { \ + struct list(type) { \ + type item; \ + list(type) *next; \ + } *head; \ + int sz; \ +public: \ + queue(type)(void) {head = 0;sz = 0;} \ + ~queue(type)(void) { \ + list(type) *temp; \ + while (head) { \ + temp = head; \ + head = head->next; \ + delete temp; \ + } \ + } \ + int empty(void) {return(!head);} \ + int size(void) {return(sz);} \ + void enqueue(type new_item); \ + type front(void) { \ + return(head->next->item); \ + } \ + type dequeue(void); \ +}; + +#define queueimplement(type) \ +type queue(type)::dequeue(void) { \ + if (head) { \ + type temp = head->next->item; \ + list(type) *temp_ptr; \ + if ((temp_ptr = head->next) == head) { \ + head = 0; \ + } \ + else { \ + head->next = temp_ptr->next; \ + } \ + delete temp_ptr; \ + sz--; \ + return(temp); \ + } \ +} \ +void queue(type)::enqueue(type new_item) { \ + if (!head) { \ + head = new list(type); \ + head->item = new_item; \ + head->next = head; \ + } \ + else { \ + list(type) *temp_node = new list(type); \ + temp_node->item = new_item; \ + temp_node->next = head->next; \ + head->next = temp_node; \ + head = temp_node; \ + } \ + sz++; \ +} \ + + +queuedeclare(String); +queueimplement(String); +queuedeclare(double); +queueimplement(double); + +main() { + String Buf; + queue(String) Q_String; + queue(double) Q_double; + + while (cin >> Buf) { + if (Buf.matches(RXalpha)) { + Q_String.enqueue(String(Buf)); + } + else if (Buf.matches(RXdouble)) { + Q_double.enqueue(atof(Buf)); + } + } + + while (!Q_String.empty()) { + cout << "Size = " << Q_String.size() << ",Item = " + << Q_String.front() << "\n"; + void(Q_String.dequeue()); + } + + while (!Q_double.empty()) { + cout << "Size = " << Q_double.size() << ",Item = " + << Q_double.front() << "\n"; + void(Q_double.dequeue()); + } + return (0); +} + diff --git a/usr/src/lib/libg++/grot/etc/typemacros.h b/usr/src/lib/libg++/grot/etc/typemacros.h new file mode 100644 index 0000000000..f2bd7877e3 --- /dev/null +++ b/usr/src/lib/libg++/grot/etc/typemacros.h @@ -0,0 +1,8 @@ +#define _T(type) typeof(type) +#define pointer_to(type) _T(_T(type)*) +#define member_of(cls,type) _T(_T(type) cls::) +#define function(res, args) _T(_T(res) args) + +#define _xq_yq(x,y) x ## _ ## y +#define _x_y(x,y) _xq_yq(x,y) +#define _gensym(stem) _x_y(stem, __LINE__) -- 2.20.1