-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathContractRepo.h
More file actions
148 lines (90 loc) · 2.62 KB
/
Copy pathContractRepo.h
File metadata and controls
148 lines (90 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#pragma once
#pragma once
#include "Disciplina.h"
#include <vector>
#include <string>
#include <ostream>
#include <map>
using std::vector;
using std::string;
using std::ostream;
using namespace std;
class AbsRepo {
public:
virtual void store(const Disciplina& p) = 0;
virtual void delet(int poz) = 0;
virtual void modifica(const Disciplina& d, int poz) = 0;
virtual vector<Disciplina>& getAllDiscipline() = 0;
virtual ~AbsRepo() = default;
};
class ContractRepo : public AbsRepo {
public:
ContractRepo() = default;
//nu permitem copierea de obiecte
ContractRepo(const ContractRepo& ot) = delete;
virtual void store(const Disciplina& p) override;
virtual void delet(int poz) override;
virtual void modifica(const Disciplina& d, int poz) override;
/*
Cauta
arunca exceptie daca nu exista disciplina
*/
const Disciplina& find(string denumire, string cadru);
const Disciplina& find2(string denumire);
bool exist(const Disciplina& p);
//bool exist2(const Disciplina& p);
bool exportFisier(const string filename, const string type);
/*
returneaza toate animalele salvate
*/
vector<Disciplina>& getAllDiscipline() override;
~ContractRepo() = default;
private:
vector<Disciplina> allDiscipline;
};
class FileRepo :public ContractRepo {
private:
string filename;
void load_from_file();
void save_to_file();
public:
FileRepo() = default;
explicit FileRepo(string fn);
//FileRepo(const FileRepo& ot) : Repo(ot) {*this=ot;};
~FileRepo() override = default;
void store(const Disciplina& p) override {
ContractRepo::store(p);
save_to_file();
}
void delet(int poz) override {
ContractRepo::delet(poz);
save_to_file();
}
void modifica(const Disciplina& d, int poz) override {
ContractRepo::modifica(d, poz);
save_to_file();
}
};
class RepoProb :public AbsRepo {
private:
float prob;
map<int, Disciplina> allDiscipline;
void det_luck();
public:
RepoProb() = default;
~RepoProb() = default;
explicit RepoProb(float chance);
void store(const Disciplina& p) override;
void delet(int poz) override;
void modifica(const Disciplina& d, int poz) override;
vector<Disciplina> all;
vector<Disciplina>& getAllDiscipline() override;
};
class ContractRepoException {
public:
explicit ContractRepoException(const vector<string>& errors) : msg{ errors } {}
friend ostream& operator<<(ostream& out, const ContractRepoException& ex);
vector<string> msg;
};
ostream& operator<<(ostream& out, const ContractRepoException& ex);
void testeRepo();