123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- #include <string>
- #include "BD.h"
- BD::BD(const BD& other)
- :m_cap(other.m_n), m_n(other.m_n), m_employee(new Pair* [other.m_n])
- {
- for (size_t i = 0; i < m_n; i++)
- {
- m_employee[i] = new Pair(*other.m_employee[i]);
- }
- }
- BD::BD(BD&& other)
- :m_cap(other.m_n), m_n(other.m_n)
- {
- m_employee = other.m_employee; //ïðîñòî çàáèðàåì äàííûå (ñèàìñêèå)
- other.m_n = other.m_cap = 0;//
- other.m_employee = nullptr;//ãîâîðèì, ÷òî ó äðóãîãî íåò (òåïåðü âñå îòëè÷íî)
- }
- //destructor
- BD::~BD()
- {
- for (size_t i = 0; i < m_n; i++)
- {
- delete m_employee[i];
- m_employee[i] = nullptr;
- }
- delete[]m_employee;
- m_employee = nullptr;
- }
- // äîáàâëåíèå ñîòðóäíèêîâ â áàçó
- void BD::Add_employee(const char* name, const Data& data)
- {
- for (size_t i = 0; i < m_n; i++)
- {
- if (m_employee[i]->m_name == name)
- {(*m_employee[i]).m_data = data;}
- }
- if (m_n == m_cap) //BD full
- {
- m_cap++;//add capacity
- Pair** tmp = new Pair * [m_cap];//âûäåëÿåì ïàìÿòü ïîä íîâûé ìàññèâ
-
- if (m_cap > 1)
- {
- for (size_t i = 0; i < m_n; i++)
- {tmp[i] = m_employee[i];} //ïåðåïèñûâàåì èç ñòàðîãî â íîâûé
- delete[] m_employee; //óäàëÿåì ñòàðûé
- }
- m_employee = tmp;//«ïåðåêèäûâàåì» óêàçàòåëè
- }
- m_employee[m_n] = new Pair(name, data);//ñîçäàåì êíèãó è äîáàâëÿåì åå êàðòîòåêó
- m_n++;
- }
- void BD::Add_employee(const char* name)
- {
- for (size_t i = 0; i < m_n; i++)
- {
- if (m_employee[i]->m_name == name){return;}
- }
- if (m_n == m_cap) //BD full
- {
- m_cap++;//add capacity
- Pair** tmp = new Pair * [m_cap];//âûäåëÿåì ïàìÿòü ïîä íîâûé ìàññèâ
-
- if (m_cap > 1)
- {
- for (size_t i = 0; i < m_n; i++)
- {
- tmp[i] = std::move(m_employee[i]); //ïåðåïèñûâàåì èç ñòàðîãî â íîâûé
- }
- delete[] m_employee; //óäàëÿåì ñòàðûé
- }
- m_employee = std::move(tmp); // «ïåðåêèäûâàåì» óêàçàòåëè
- }
- m_employee[m_n] = new Pair(name);//ñîçäàåì êíèãó è äîáàâëÿåì åå êàðòîòåêó
- m_n++;
- }
- //èñêëþ÷åíèå ñîòðóäíèêà èç áàçû
- void BD::Dell_employee(const char* name)
- {
- for (size_t i = 0; i < m_n; i++)
- {
- if (m_employee[i]->m_name == name)
- {
- //dell data
- delete/*[] */m_employee[i];//Pair
- m_employee[i] = nullptr;
-
- //sort BD
- for (size_t j = i+1; j < m_n; i++,j++)
- {
- m_employee[i] = m_employee[j];//ïåðåêèíóëè óêàçàòåëè
- }
- //ñèàìû ïîñëåäíèé è ïðåäïîñëåäíèé
- m_n--;
- //îáíóëèëè ïîñëåäíèé - íåò ñèàìîâ
- m_employee[m_n] = nullptr;
- }
- }
- }
- BD& BD::operator=(const BD& other)
- {
- if (this != &other)
- {
- //clear data
- for (size_t i = 0; i < m_n; i++)
- {
- delete m_employee[i];
- m_employee[i] = nullptr;
- }
- if (m_cap < other.m_n)
- { //íàäî áîëëüøå ïàìÿòè ïîä ìàññèâ óêàçàòåëåé
- m_cap = other.m_n;//set capacity
- delete[]m_employee;
- m_employee = new Pair * [m_cap];
- }
-
- //copy data
- m_n = other.m_n;
- for (size_t i = 0; i < m_n; i++)
- {
- m_employee[i] = new Pair(*other.m_employee[i]);//3d var more effection
- }
- }
-
- return *this;
- }
- BD& BD::operator=(BD&& other)
- {
- if (this != &other)
- {
- ///clear data
- for (size_t i = 0; i < m_n; i++)
- {
- delete m_employee[i];
- m_employee[i] = nullptr;
- }
- delete[]m_employee;
- //copy data
- m_cap = m_n = other.m_n;
- m_employee = other.m_employee; //ïðîñòî çàáèðàåì äàííûå (ñèàìñêèå)
- other.m_n = other.m_cap = 0;
- other.m_employee = nullptr;//ãîâîðèì, ÷òî ó äðóãîãî íåò (òåïåðü âñå îòëè÷íî)
- }
- return *this;
- }
- //operator[]
- Data& BD::operator[](const char* Str)
- {// TODO: insert return statement here
- for (size_t i = 0; i < m_n; i++)
- {
- if (m_employee[i]->m_name == Str)
- {
- return (*m_employee[i]).m_data;
- }
- }
- //check m_cap:
- //if full then add capacity & add new pair
- //else add new pair in BD
- this->Add_employee(Str);
- return (*m_employee[m_n - 1]).m_data;
- }
- //Data& BD::operator[](const char* Str) const
- //{
- // return (*m_employee[m_n - 1]).m_data;
- //}
- std::ostream& operator<<(std::ostream& os, const BD& m_bd)
- {
- for (size_t i = 0; i < m_bd.m_n; i++)
- {
- os << *m_bd.m_employee[i] << std::endl;
- }
-
- return os;
- }
|