home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pat_hash.h < prev    next >
Text File  |  1995-12-29  |  3KB  |  98 lines

  1. #include <istring.hpp>
  2. #include <idate.hpp>
  3. #include <iglobals.h>
  4. #include <stdio.h>
  5.  
  6.  
  7. struct NameBirthSex
  8. {
  9.         IString ivName;
  10.         IDate   ivBirth;
  11.         IString ivSex;
  12.  
  13.  
  14.         NameBirthSex (IString const& n, IDate const& b, IString const& s)
  15.                                                        : ivName(n),
  16.                                                          ivBirth(b),
  17.                                                          ivSex(s)
  18.                                                          {}
  19.  
  20.         Boolean operator== (NameBirthSex const& nbs) const
  21.               {
  22.                return
  23.                    this->ivName == nbs.ivName
  24.                    && this->ivBirth == nbs.ivBirth
  25.                    && this->ivSex == nbs.ivSex;
  26.  
  27.               }
  28. };
  29.  
  30. class Patient
  31. {
  32.         NameBirthSex  ivNameBirthSex;
  33.         IString       ivDiagnosis;
  34.  
  35. public:
  36.  
  37.  // a constructor
  38.  Patient( IString patName, IDate patBirth, IString patSex,
  39.           IString patDiagnosis)
  40.                                    : ivNameBirthSex(patName, patBirth, patSex),
  41.                                      ivDiagnosis(patDiagnosis)
  42.                                      {}
  43.  
  44.  
  45.         IString const& patientName()  const
  46.           {
  47.             return ivNameBirthSex.ivName;
  48.           }
  49.  
  50.  
  51.         IDate const& patientBirth() const
  52.           {
  53.             return ivNameBirthSex.ivBirth;
  54.           }
  55.  
  56.         IString const& patientSex()
  57.           {
  58.             return ivNameBirthSex.ivSex;
  59.           }
  60.  
  61.         NameBirthSex const& getKey() const
  62.           {
  63.             return ivNameBirthSex;
  64.           }
  65.  
  66.         IString const& patientDiagnosis()  const
  67.           {
  68.             return ivDiagnosis;
  69.           }
  70.  
  71.         void setPatientDiagnosis(IString const& setDiagnosis)
  72.           {
  73.              this->ivDiagnosis = setDiagnosis;
  74.           }
  75. };
  76.  
  77. // key function
  78. inline NameBirthSex const& key (Patient const& patient)
  79.           {
  80.               return patient.getKey();
  81.           }
  82.  
  83. // hash function
  84. // our private hash function composes "hashValue" by using
  85. // the hash function 'hash' for string input provided by the collection classes
  86. // n is the number of elements in the collection
  87.  
  88. inline unsigned long hash (NameBirthSex const& nbs,
  89.                            unsigned long n)
  90.      {
  91.        unsigned long hashValue;
  92.        int           sex;
  93.  
  94.        if (nbs.ivSex == "female") sex=1; else sex=2;
  95.  
  96.        return hashValue = (hash(nbs.ivName, n) + nbs.ivBirth.year() + sex) % n;
  97.      }
  98.