Не могу придумать реализацию для класса молекул на c++
Есть класс Atom, содержащий данные о атоме. Есть фабрика, создающая атомы по списку образцов, записанных в отдельном файле.
class Atom {
protected:
unsigned int id;
std::string name;
std::string abbreviation;
Vec3 position;
friend class AtomFactory;
public:
Atom(int id = 0, std::string name = "Pivo", std::string abbreviatio = "Pi", Vec3 position = Vec3(0.0f, 0.0f, 0.0f)) : id(id), name(name), abbreviation(abbreviatio), position(position) {
}
Atom operator = (Atom atomCopy) {
return Atom(atomCopy.id, atomCopy.name, atomCopy.abbreviation);
}
unsigned int GetId() {
return id;
}
std::string GetName() {
return name;
}
std::string GetAbbreviation() {
return abbreviation;
}
};
class AtomFactory {
std::vector<Atom> vcAtoms;
int errorcode = 0;
int totalAtoms = 0;
public:
AtomFactory(std::string path) {
std::ifstream ifsAtomsList(path);
if (!ifsAtomsList.is_open()) {
errorcode = MLC_ERROR_EMPTYFILE;
ifsAtomsList.close();
return;
}
Atom atomFilled;
while (!ifsAtomsList.eof()) {
ifsAtomsList >> atomFilled.id;
ifsAtomsList >> atomFilled.name;
ifsAtomsList >> atomFilled.abbreviation;
atomFilled.position = Vec3(0.0f, 0.0f, 0.0f);
vcAtoms.push_back(atomFilled);
totalAtoms++;
}
ifsAtomsList.close();
}
virtual Atom* CreateAtom(int id) {
if (id <= 0 || id > totalAtoms)
return nullptr;
return new Atom(vcAtoms[id - 1]);
}
int GetError() {
return errorcode;
}
int GetTotalAtoms() {
return totalAtoms;
}
};
Никак не могу придумать более удачную реализацию для класса молекул, которая будет хранить все атомы и их соединения. Если что программа будет отрисовываться в ogl, поэтому хотел бы вытащить максимум эффективности из этого класса