הערה (קובץ קוד)
קובץ זה הוא קובץ קוד מסוג CPP.
#include "TextFile.h"
#include "Utilities.h"
#include "SearchAction.h"
#include <stdexcept>
#include "ReadAction.h"
#include "WriteAction.h"
TextFile::TextFile(const std::string &name, Directory* parent)
: File(name, parent), lines(std::vector<std::string>()) {
}
File& TextFile::operator[](std::list<std::string> path) {
if (!path.empty()) {
throw std::runtime_error(Utilities::FileNotFoundMsg());
}
return *this;
}
const File& TextFile::operator[](std::list<std::string> path) const {
if (!path.empty()) {
throw std::runtime_error(Utilities::FileNotFoundMsg());
}
return *this;
}
std::unique_ptr<Action> TextFile::CreateReadAction(ReadRequest& request) const {
return std::unique_ptr<Action>(
new ReadAction(request.hostPath, lines, request.isCout)
);
}
std::unique_ptr<Action> TextFile::CreateWriteAction(WriteRequest& request) {
return std::unique_ptr<Action>(
new WriteAction(*this, request.linesVector)
);
}
std::unique_ptr<Action> TextFile::CreateSearchAction(SearchRequest &request) const
{
auto linesContainingTerm = getLinesInFile(request.searchTerm);
if (!linesContainingTerm.empty())
{
if (request.comesFromCreateSearchAction)
{
request.printingVector.push_back(request.pathFromLocation + "/" + getName());
return nullptr;
}
return std::unique_ptr<Action>(
new SearchAction(linesContainingTerm)
);
}
return request.comesFromCreateSearchAction
? nullptr // we don't care if not found in directory recursive search.
: std::unique_ptr<Action>(new SearchAction(std::vector<std::string>()));
}
void TextFile::addFileText(const std::vector<std::string>& fileContent) {
lines.insert(lines.end(), fileContent.begin(), fileContent.end());
}
std::vector<std::string> TextFile::getLinesInFile(const std::string& wordToSearch) const
{
std::vector<std::string> result;
for (const std::string& line : lines) {
if (line.find(wordToSearch) != std::string::npos) {
result.push_back(line);
}
}
return result;
}