fini PiecesList

This commit is contained in:
2025-03-01 18:24:09 +01:00
parent 13ee43167e
commit 66c2cf1013
4 changed files with 155 additions and 34 deletions

View File

@@ -5,58 +5,109 @@
#include <vector>
#include <utility>
#include <memory>
PiecesList::PiecesList() {
this->maximumLoadedSize = 0;
this->loadedPieces.clear();
this->loadedPieces.push_back(std::vector<Piece>());
this->highestLoadedSize = 0;
this->selectedPieces.clear();
// we need to have something at index 0 even if there is no pieces of size 0
this->loadedPieces.clear();
this->convexPieces.clear();
this->holelessPieces.clear();
this->otherPieces.clear();
this->pushBackEmptyVectors();
// we always prepare vectors of the next size to be generated
this->pushBackEmptyVectors();
}
bool PiecesList::loadPieces(int size) {
if (size < 1) return false;
PiecesFiles piecesFiles;
std::vector<int> convexPieces;
std::vector<int> holelessPieces;
std::vector<int> otherPieces;
for (int i = this->highestLoadedSize + 1; i <= size; i++) {
for (int i = this->maximumLoadedSize + 1; i <= size; i++) {
std::vector<Piece> pieces;
this->loadedPieces.push_back(pieces);
if (!piecesFiles.loadPieces(i, this->loadedPieces.at(i), convexPieces, holelessPieces, otherPieces)) {
if (!piecesFiles.loadPieces(i, this->loadedPieces.at(i), this->convexPieces.at(i), this->holelessPieces.at(i), this->otherPieces.at(i))) {
return false;
}
else {
this->maximumLoadedSize++;
this->highestLoadedSize++;
this->pushBackEmptyVectors();
}
}
return true;
}
bool PiecesList::selectPieces(int size, int number) {
if (size < 1 || size > this->maximumLoadedSize || number >= this->loadedPieces.at(size).size()) return false;
bool PiecesList::selectPiece(int size, int number) {
if (size < 1 || size > this->highestLoadedSize || number >= this->loadedPieces.at(size).size()) return false;
this->selectedPieces.push_back(std::pair<int, int>(size, number));
return true;
}
bool PiecesList::selectAllPieces(int size) {
if (size < 1 || size > this->highestLoadedSize) return false;
for (int i = 0; i < this->loadedPieces.at(size).size(); i++) {
this->selectedPieces.push_back(std::pair<int, int>(size, i));
}
return true;
}
bool PiecesList::selectConvexPieces(int size) {
if (size < 1 || size > this->highestLoadedSize) return false;
for (int index : this->convexPieces.at(size)) {
this->selectedPieces.push_back(std::pair<int, int>(size, index));
}
return true;
}
bool PiecesList::selectHolelessPieces(int size) {
if (size < 1 || size > this->highestLoadedSize) return false;
for (int index : this->holelessPieces.at(size)) {
this->selectedPieces.push_back(std::pair<int, int>(size, index));
}
return true;
}
bool PiecesList::selectOtherPieces(int size) {
if (size < 1 || size > this->highestLoadedSize) return false;
for (int index : this->otherPieces.at(size)) {
this->selectedPieces.push_back(std::pair<int, int>(size, index));
}
return true;
}
void PiecesList::unselectAll() {
this->selectedPieces.clear();
}
int PiecesList::getHighestLoadedSize() {
return this->highestLoadedSize;
}
int PiecesList::getNumberOfPieces(int size) {
if (size < 1 || size > this->highestLoadedSize) return 0;
return this->loadedPieces.at(size).size();
}
std::vector<std::pair<int, int>> PiecesList::getSelectedPieces() {
return this->selectedPieces;
}
int PiecesList::getNumberOfPiecesOfOneSize(int size) {
if (size < 1 || size > this->maximumLoadedSize) return 0;
return this->loadedPieces.at(size).size();
Piece PiecesList::getPiece(std::pair<int, int> pieceIndex) {
return this->loadedPieces.at(pieceIndex.first).at(pieceIndex.second);
}
std::shared_ptr<Piece> PiecesList::getPiece(int size, int number) {
if (size < 1 || size > this->maximumLoadedSize || number >= this->loadedPieces.at(size).size()) return nullptr;
return std::make_shared<Piece>(this->loadedPieces.at(size).at(number));
void PiecesList::pushBackEmptyVectors() {
this->loadedPieces.push_back(std::vector<Piece>());
this->convexPieces.push_back(std::vector<int>());
this->holelessPieces.push_back(std::vector<int>());
this->otherPieces.push_back(std::vector<int>());
}