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