-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDataTuples.h
More file actions
141 lines (118 loc) · 3.48 KB
/
Copy pathDataTuples.h
File metadata and controls
141 lines (118 loc) · 3.48 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
#pragma once
#include <OB/CORBA.h>
#include "GeneticTT.h"
#include "Resource.h"
struct DataTupleRaw
{
int tupleID;
int classID;
int teacherID;
int roomID;
static const int numItems = 4;
};
class DataTuplesRaw : public std::vector<DataTupleRaw>
{
public:
Genetic::TupleSeq* pack();
void unpack(const Genetic::TupleSeq* src);
int getTotalIntElements();
void getIdVector(std::vector<int>& ids) const;
const DataTupleRaw* get(int id) const;
};
class DataTuples : public ContainerWrapper<DataTuple>
{
public:
void getIdVector(std::vector<int>& ids) const;
void pack(DataTuplesRaw& dest) const;
};
inline void
DataTuples::getIdVector(std::vector<int>& ids) const
{
std::vector<DataTuple*>::const_iterator it;
for (it = getVector().begin(); it != getVector().end(); ++it) {
DataTuple* tuple = *it;
ids.push_back(tuple->getId());
}
}
inline int
DataTuplesRaw::getTotalIntElements()
{
return DataTupleRaw::numItems * size();
}
inline void
DataTuplesRaw::getIdVector(std::vector<int>& ids) const
{
for (auto it = begin(); it != end(); ++it) {
const DataTupleRaw& tuple = *it;
ids.push_back(tuple.tupleID);
}
}
inline const DataTupleRaw*
DataTuplesRaw::get(int id) const
{
const_iterator it;
for (it = begin(); it != end(); ++it) {
const DataTupleRaw* res = &(*it);
if (res->tupleID == id)
return res;
}
return nullptr;
}
inline void
DataTuples::pack(DataTuplesRaw& dest) const
{
dest.clear();
const std::vector<DataTuple*> tupVect = getVector();
for (auto it = tupVect.begin(); it != tupVect.end(); ++it) {
const DataTuple* tuple = *it;
const Subject* subject = tuple->getSubject();
dest.push_back({ tuple->getId(),
tuple->getClass()->getId(),
subject->getTeacher()->getId(),
subject->getRoom()->getId() });
}
}
inline Genetic::TupleSeq*
DataTuplesRaw::pack()
{
Genetic::TupleSeq* tuples = new Genetic::TupleSeq;
tuples->length(size());
int i = 0;
for (auto it = begin(); it != end(); ++it, ++i) {
(*tuples)[i] = {
it->tupleID, it->classID, it->teacherID, it->roomID
};
}
return tuples;
}
inline void
DataTuplesRaw::unpack(const Genetic::TupleSeq* src)
{
clear();
for (int i = 0; i < src->length(); ++i) {
const Genetic::Tuple& tuple = (*src)[i];
push_back({ tuple.tupleID,
tuple.classID,
tuple.teacherID,
tuple.roomID });
}
}
inline std::ostream&
operator<<(std::ostream& input, const DataTupleRaw& tuple)
{
int tupleID;
int classID;
int teacherID;
int roomID;
input << "{tupleID: " << tuple.tupleID << ", classID: " << tuple.classID
<< ", teacerID: " << tuple.teacherID
<< ", roomID: " << tuple.roomID << "}";
}
inline std::ostream&
operator<<(std::ostream& input, const DataTuplesRaw& tuples)
{
input << "[";
for (auto it = tuples.begin(); it != tuples.end(); ++it)
std::cout << *it << std::endl;
input << "]";
}