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

SymbolicLink

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

    SymbolicLink

    02340124

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

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

    SymbolicLink

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

    uni-folder.vercel.app

    symboliclink.cpp

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

    קובץ זה הוא קובץ קוד מסוג CPP.

    #include "SymbolicLink.h"
    
    #include <stdexcept>
    
    #include "Directory.h"
    #include "Utilities.h"
    
    SymbolicLink::SymbolicLink(const std::string &name, Directory* parent,
        const std::vector<std::string> &pathVector) : File(name, parent), pathVector(pathVector) {
    
        // checks if the file exists.
        getFile();
    }
    
    File& SymbolicLink::operator[](std::list<std::string> path) {
        if (!path.empty()) {
            throw std::runtime_error(Utilities::FileNotFoundMsg());
        }
    
        return *this;
    }
    
    const File& SymbolicLink::operator[](std::list<std::string> path) const {
        if (!path.empty()) {
            throw std::runtime_error(Utilities::FileNotFoundMsg());
        }
    
        return *this;
    }
    
    std::unique_ptr<Action> SymbolicLink::CreateReadAction(ReadRequest& request) const {
        return getFile().CreateReadAction(request);
    }
    
    std::unique_ptr<Action> SymbolicLink::CreateWriteAction(WriteRequest& request) {
        return getFile().CreateWriteAction(request);
    }
    
    
    std::unique_ptr<Action> SymbolicLink::CreateSearchAction(SearchRequest &request) const
    {
        if (!request.comesFromCreateSearchAction)
        {
            return getFile().CreateSearchAction(request);
        }
    
        return nullptr;
    }
    
    TextFile& SymbolicLink::getFile() const {
        Directory* root = this->getParent();
        while (root->getParent() != nullptr) {
            root = root->getParent();
        }
    
        try {
            TextFile& textFile = dynamic_cast<TextFile&>((*root)[pathVector]);
            return textFile;
        } catch (const std::bad_cast&) { // TODO: make sure
            throw std::runtime_error(Utilities::TypeErrorMsg());
        } catch (...) {
            throw std::runtime_error(Utilities::BrokenLinkMsg());
        }
    }