home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v1.zip / IBMCPP / SAMPLES / ICLCC / ANIMALS.C < prev    next >
C/C++ Source or Header  |  1993-05-07  |  5KB  |  110 lines

  1. /******************************************************************************/
  2. /*                                                                            */
  3. /* COPYRIGHT:                                                                 */
  4. /* ----------                                                                 */
  5. /* Copyright (C) International Business Machines Corp., 1991,1992.            */
  6. /*                                                                            */
  7. /* DISCLAIMER OF WARRANTIES:                                                  */
  8. /* -------------------------                                                  */
  9. /* The following [enclosed] code is sample code created by IBM                */
  10. /* Corporation.  This sample code is not part of any standard IBM product     */
  11. /* and is provided to you solely for the purpose of assisting you in the      */
  12. /* development of your applications.  The code is provided "AS IS",           */
  13. /* without warranty of any kind.  IBM shall not be liable for any damages     */
  14. /* arising out of your use of the sample code, even if they have been         */
  15. /* advised of the possibility of such damages.                                */
  16. /*                                                                            */
  17. /******************************************************************************/
  18. /*------------------------------------------------------------*\
  19. | animals.C  -  Example for the use of the Key Bag             |
  20. |                                          """""""             |
  21. | We keep a Key Bag of our observations on animals.  Elements  |
  22. | handled in this Key Bag are of type animal, the key is the   |
  23. | name of the animal.                                          |
  24. | This Key Bag allows us to efficiently access all observations|
  25. | on an animal.                                                |
  26. | We use a Sequence to store the names of all extinct animals. |
  27. | At last we remove all extinct animals from the Key Bag.      |
  28. \*------------------------------------------------------------*/
  29.  
  30. #include <iostream.h>
  31.                // Class Animal:
  32. #include "animal.h"
  33.  
  34.                // Let's use the default Key Bag:
  35. #include <ikeybag.h>
  36. typedef IKeyBag<Animal, ToyString> Animals;
  37.  
  38.                // For keys let's use the default Sequence:
  39. #include <iseq.h>
  40. typedef ISequence<ToyString> Names;
  41.  
  42.  
  43. main() {
  44.  
  45.    Animals animals;
  46.    Animals::Cursor animalsCur1(animals), animalsCur2(animals);
  47.  
  48.    animals.add(Animal("bear", "heavy"));
  49.    animals.add(Animal("bear", "strong"));
  50.    animals.add(Animal("dinosaur", "heavy"));
  51.    animals.add(Animal("dinosaur", "huge"));
  52.    animals.add(Animal("dinosaur", "extinct"));
  53.    animals.add(Animal("eagle", "black"));
  54.    animals.add(Animal("eagle", "strong"));
  55.    animals.add(Animal("lion", "dangerous"));
  56.    animals.add(Animal("lion", "strong"));
  57.    animals.add(Animal("mammoth", "long haired"));
  58.    animals.add(Animal("mammoth", "extinct"));
  59.    animals.add(Animal("sabre tooth tiger", "extinct"));
  60.    animals.add(Animal("zebra", "striped"));
  61.  
  62.                  // Display all elements in animals:
  63.    cout << "\nAll our observations on animals:\n";
  64.    forCursor(animalsCur1)  cout << "    " << animalsCur1.element();
  65.  
  66.    cout << "\n\nNumber of observations on animals: "
  67.         << animals.numberOfElements() << "\n";
  68.  
  69.    cout << "\nNumber of different animals: "
  70.         << animals.numberOfDifferentKeys() << "\n";
  71.  
  72.    Names namesOfExtinct(animals.numberOfDifferentKeys());
  73.    Names::Cursor extinctCur1(namesOfExtinct);
  74.  
  75.    animalsCur1.setToFirst();
  76.    do {
  77.       ToyString name = animalsCur1.element().name();
  78.  
  79.       cout << "\nWe have " << animals.numberOfElementsWithKey(name)
  80.            << " observations on " << name.text() << ":\n";
  81.  
  82.                    // We need to use a separate cursor here
  83.                    // because otherwise animalsCur1 would become
  84.                    // invalid after last locateNextElement...()
  85.       animals.locateElementWithKey(name, animalsCur2);
  86.       do  {
  87.          ToyString attribute = animalsCur2.element().attribute();
  88.          cout << "    " << attribute << "\n";
  89.          if (attribute == "extinct") namesOfExtinct.add(name);
  90.       } while (animals.locateNextElementWithKey(name, animalsCur2));
  91.  
  92.    } while (animals.setToNextWithDifferentKey(animalsCur1));
  93.  
  94.                  // Remove all observations on extinct animals:
  95.    forCursor(extinctCur1)
  96.       animals.removeAllElementsWithKey(extinctCur1.element());
  97.  
  98.                  // Display all elements in animals:
  99.    cout << "\n\nAfter removing all observations on extinct animals:\n";
  100.    forCursor(animalsCur1)  cout << "    " << animalsCur1.element();
  101.  
  102.    cout << "\nNumber of observations on animals: "
  103.         << animals.numberOfElements() << "\n";
  104.  
  105.    cout << "\nNumber of different animals: "
  106.         << animals.numberOfDifferentKeys() << "\n";
  107.  
  108.    return 0;
  109. }
  110.