Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.89 KB | None | 0 0
  1. #pragma once
  2.  
  3. #ifndef _H_PARKING_
  4.  
  5. #define _H_PARKING_
  6.  
  7. #include <iostream>
  8. #include <exception>
  9.  
  10. class car
  11. {
  12. public:
  13.     car():number(), place_where_wife_wake_up() {}
  14.  
  15.     car(int number, int place_where_wife_wake_up) :number(number), place_where_wife_wake_up(place_where_wife_wake_up) {}
  16.  
  17.     friend std::ostream& operator<< (std::ostream& out, const car& car);
  18.     friend bool operator==(car const& left, car const& right);
  19.  
  20.     void set_number_of_car(int number)
  21.     {
  22.         this->number = number;
  23.     }
  24.  
  25.     void set_place_where_wife_wake_up(int place_where_wife_wake_up)
  26.     {
  27.         this->place_where_wife_wake_up = place_where_wife_wake_up;
  28.     }
  29.  
  30.     int get_number_of_car()
  31.     {
  32.         return number;
  33.     }
  34.  
  35.     int get_place_where_wife_wake_up()
  36.     {
  37.         return place_where_wife_wake_up;
  38.     }
  39.  
  40. private:
  41.     int number;
  42.     int place_where_wife_wake_up;
  43. };
  44.  
  45. inline std::ostream& operator<<(std::ostream& out, const car& car)
  46. {
  47.     out << "number: " << car.number << "| place where wife wake up: " << car.place_where_wife_wake_up;
  48.     return out;
  49. }
  50.  
  51. inline bool operator==(car const& left, car const& right)
  52. {
  53.     return left.number == right.number && left.place_where_wife_wake_up == right.place_where_wife_wake_up;
  54. }
  55.  
  56. class parking
  57. {
  58. public:
  59.     parking(unsigned int size):number_of_cars_in_the_parking(0), size(size)
  60.     {
  61.         if (size > 0)
  62.         {
  63.             table = new car* [size];
  64.             for (unsigned int i = 0; i < size; i++)
  65.             {
  66.                 table[i] = nullptr;
  67.             }
  68.         }
  69.         else
  70.         {
  71.             throw std::exception("size <= 0");
  72.         }
  73.     }
  74.  
  75.     ~parking()
  76.     {
  77.         for (unsigned int i = 0; i < size; i++)
  78.         {
  79.             delete table[i];
  80.         }
  81.  
  82.         delete table;
  83.  
  84.         size = 0;
  85.     }
  86.  
  87.     bool add(unsigned int key, car value)
  88.     {
  89.         if (size <= key - 1)
  90.         {
  91.             return false;
  92.         }
  93.  
  94.         for (unsigned int i = key - 1; i < size; ++i)
  95.         {
  96.             if (!table[i])
  97.             {
  98.                 table[i] = new car(value);
  99.                 ++number_of_cars_in_the_parking;
  100.                 return true;
  101.             }
  102.         }
  103.         return false;
  104.     }
  105.  
  106.     void erase(car erase)
  107.     {
  108.         for (int i = 0; i < size; ++i)
  109.         {
  110.             if (table[i] && *table[i] == erase)
  111.             {
  112.                 delete table[i];
  113.                 table[i] = nullptr;
  114.                 --number_of_cars_in_the_parking;
  115.                 return;
  116.             }
  117.         }
  118.     }
  119.  
  120.     car& operator[](int index)
  121.     {
  122.         if (index >= 1 && table[index - 1])
  123.         {
  124.             return *table[index];
  125.         }
  126.         else
  127.         {
  128.             throw std::exception("empty index");
  129.         }
  130.     }
  131.  
  132.     unsigned int get_size()
  133.     {
  134.         return size;
  135.     }
  136.    
  137.     unsigned int get_number_of_cars_in_the_parking()
  138.     {
  139.         return number_of_cars_in_the_parking;
  140.     }
  141.  
  142.     friend std::ostream& operator<< (std::ostream& out, const parking& hash_table);
  143.  
  144. private:
  145.     car **table;
  146.     unsigned int size;
  147.     unsigned int number_of_cars_in_the_parking;
  148. };
  149.  
  150. inline std::ostream& operator<<(std::ostream& out, const parking& hash_table)
  151. {
  152.     for (unsigned int i = 0; i < hash_table.size; i++)
  153.     {
  154.         if (hash_table.table[i])
  155.         {
  156.             out << i + 1 << " (" << *hash_table.table[i] << ")\n";
  157.         }
  158.     }
  159.  
  160.     return out;
  161. }
  162.  
  163. #endif // !_H_PARKING_
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement