/* NAME sample01.cpp DESCRIPTION Basic sample of pattern */ #include #include #include #include "sample01.b" /* include Part-B */ class Book { EXT_Book public: char *isbn; char *name; Book(char *i, char *n) {isbn=strdup(i); name=strdup(n);} }; class Author { EXT_Author public: char *name; Author(char *n) {name=strdup(n);} }; class Publisher { EXT_Publisher public: char *name; Publisher(char *n) {name=strdup(n);} }; class App { EXT_App }; /* define pattern */ jjCollect (publishers, App, Publisher); jjCollect (authors, App, Author); jjCollect (books, Publisher, Book); jjAggregate (byAuthor, Author, Book); //in time order jjHash (isbn_hash, App, Book); /* hash member function implementation */ int isbn_hash_class::hash(Book *b){ return jjstr_hash(b->isbn); } int isbn_hash_class::cmp(Book *a, Book *b){ return strcmp(a->isbn,b->isbn); } int main(){ /* create objects for test */ App a; Publisher p1("P1"), p2("P2"); Book oosc("1-123", "Object Oriented S/W Construction"), itpl("2-111", "Introduction to the Theory of Programming Lanugages"), cpp("3-456", "The C++ Programming Language"), budo1("4-789", "Theory of Budo"), budo2("4-147", "Revive of Budo"), budo3("5-712", "The way of practice Budo"), budo4("0-123", "The way to Budo"), budo5("9-321", "What is Budo"), budo6("8-765", "Science of Budo"); Author meyer("Meyer"), str("Stroustrup"), nangou("Tugumasa Nangou"); /* define relation */ publishers.add(&a, &p1); publishers.add(&a, &p2); books.add(&p1, &oosc); books.add(&p1, &budo1); books.add(&p1, &budo2); books.add(&p1, &budo3); books.add(&p1, &budo4); books.add(&p1, &budo5); books.add(&p1, &budo6); books.add(&p2, &itpl); books.add(&p2, &cpp); authors.add(&a, &meyer); authors.add(&a, &str); authors.add(&a, &nangou); byAuthor.add(&meyer, &oosc); byAuthor.add(&meyer, &itpl); byAuthor.add(&str, &cpp); byAuthor.add(&nangou, &budo1); byAuthor.add(&nangou, &budo2); byAuthor.add(&nangou, &budo3); byAuthor.add(&nangou, &budo4); byAuthor.add(&nangou, &budo5); byAuthor.add(&nangou, &budo6); isbn_hash.add(&a, &oosc); isbn_hash.add(&a, &itpl); isbn_hash.add(&a, &cpp); isbn_hash.add(&a, &budo1); isbn_hash.add(&a, &budo2); isbn_hash.add(&a, &budo3); isbn_hash.add(&a, &budo4); isbn_hash.add(&a, &budo5); isbn_hash.add(&a, &budo6); /* Print author, order by publisher, book */ publishers_iterator i(&a); Publisher *p; while( (p=++i) ){ printf("%s\n", p->name); books_iterator j(p); Book *b; while( (b=++j) ){ printf(" %s by %s\n", b->name, byAuthor.parent(b)->name); } } /* Search by book key(ISBN) then get author */ Book key = Book("5-712", ""); Book *b = isbn_hash.sel(&a, &key); printf("\nsearched book = %s\n", b->name); printf("it's author = %s\n", byAuthor.parent(b)->name); } /* Declare pattern-class object */ publishers_class publishers; authors_class authors; books_class books; byAuthor_class byAuthor; isbn_hash_class isbn_hash;