הערה (קובץ קוד)
קובץ זה הוא קובץ קוד מסוג CPP.
#include "MataMvidia.h"
#include "Matrix.h"
#include "Utilities.h"
MataMvidia::MataMvidia(const std::string& movieName, const std::string& authorName,
const Matrix frames[], const int length)
: movieName(movieName), authorName(authorName), frames(new Matrix[length]()) {
this->length = length;
this->maxLength = length;
for (int i = 0; i < length; i++) {
this->frames[i] = Matrix(frames[i]);
}
}
MataMvidia::MataMvidia(const MataMvidia& movie)
: movieName(movie.movieName), authorName(movie.authorName), frames(new Matrix[movie.length]()) {
length = movie.length;
maxLength = movie.length;
for (int i = 0; i < length; i++) {
frames[i] = Matrix(movie.frames[i]);
}
}
MataMvidia::~MataMvidia() {
delete[] frames;
}
MataMvidia& MataMvidia::operator=(const MataMvidia& movie) {
if (this == &movie) {
return *this;
}
movieName = movie.movieName;
authorName = movie.authorName;
length = movie.length;
maxLength = movie.maxLength;
delete[] frames;
frames = new Matrix[maxLength];
for (int i = 0; i < length; i++) {
frames[i] = Matrix(movie.frames[i]);
}
return *this;
}
const Matrix& MataMvidia::operator[](int index) const {
if (index < 0 || index >= length) {
exitWithError(MatamErrorType::OutOfBounds);
}
return this->frames[index];
}
Matrix& MataMvidia::operator[](int index) {
if (index < 0 || index >= length) {
exitWithError(MatamErrorType::OutOfBounds);
}
return this->frames[index];
}
MataMvidia& MataMvidia::operator+=(const MataMvidia& movie) {
MataMvidia copyOfMovie(movie);
if (length + copyOfMovie.length >= maxLength) {
expandArray(copyOfMovie.length + EXPANSION_RATE);
}
for (int i = 0; i < copyOfMovie.length; i++) {
(*this) += copyOfMovie[i];
}
return *this;
}
MataMvidia& MataMvidia::operator+=(const Matrix& matrix) {
if (length >= maxLength) {
expandArray();
}
frames[length++] = matrix;
return *this;
}
MataMvidia operator+(const MataMvidia& movie1, const MataMvidia& movie2) {
MataMvidia result(movie1);
result += movie2;
return result;
}
std::ostream& operator<<(std::ostream& ostream, const MataMvidia& movie) {
ostream << "Movie Name: " << movie.movieName << std::endl;
ostream << "Author: " << movie.authorName << std::endl << std::endl;
for (int i = 0; i < movie.length; i++) {
ostream << "Frame " << i << ":" << std::endl << movie[i] << std::endl;
}
ostream << "-----End of Movie-----";
return ostream;
}
void MataMvidia::expandArray(int amount) {
Matrix* newArr = new Matrix[this->maxLength + amount];
for (int i = 0; i < this->length; i++) {
newArr[i] = frames[i];
}
delete[] frames;
frames = newArr;
maxLength = this->maxLength + amount;
}