חזור לתיקייה: wet

MataMvidia

חיפוש בתיקיה
Ctrl K
לחץ כאן או הקש Ctrl K כדי לחפש בכל התיקיה

    MataMvidia

    02340124

    מבוא לתכנות מערכות

    רשימות הרצאה לקריאה בשבת

    MataMvidia

    הופק מתוך תקיית התואר של שקד

    uni-folder.vercel.app

    matamvidia.cpp

    הערה (קובץ קוד)

    קובץ זה הוא קובץ קוד מסוג 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;
    }