Skip to content

Instantly share code, notes, and snippets.

@DavidA94
Last active May 27, 2017 08:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DavidA94/1b2daa132ec8a3e5b66ec0ed0a0117ed to your computer and use it in GitHub Desktop.
Save DavidA94/1b2daa132ec8a3e5b66ec0ed0a0117ed to your computer and use it in GitHub Desktop.
SimpleFileException
unique_ptr<Directory> SimpleDirectory::createDirectory(string name) { return unique_ptr<Directory>(new SimpleDirectory(m_node->createDirectory(name))); }
unique_ptr<File> SimpleDirectory::createFile(string name) { return unique_ptr<File>(new SimpleFile(m_node->createFile(name))); }
vector<unique_ptr<FSEntry>> SimpleDirectory::children() {
vector<unique_ptr<FSEntry>> retVal;
for (auto child : m_node->getChildren()) {
if (child->isDirectory()) {
retVal.push_back(unique_ptr<FSEntry>(new SimpleDirectory(child)));
}
else {
retVal.push_back(unique_ptr<FSEntry>(new SimpleFile(child)));
}
}
return retVal;
}
class SimpleDirectory : public Directory {
private:
VirtualNode* m_node;
virtual bool isDirectory() override { return m_node->isDirectory(); }
virtual bool isFile() override { return m_node->isFile(); }
public:
SimpleDirectory(VirtualNode* node) : m_node(node) {}
virtual vector<unique_ptr<FSEntry>> children() override;
virtual unique_ptr<Directory> createDirectory(string name) override;
virtual unique_ptr<File> createFile(string name) override;
virtual string name() override { return m_node->name(); }
virtual string fullName() override { return m_node->fullName(); }
virtual unique_ptr<Directory> parent() override { return unique_ptr<Directory>(new SimpleDirectory(m_node->parent())); }
};
class SimpleFile : public File {
private:
VirtualNode* m_node;
virtual bool isDirectory() override { return m_node->isDirectory(); }
virtual bool isFile() override { return m_node->isFile(); }
public:
SimpleFile(VirtualNode* node) : m_node(node) {}
virtual int length() override { return m_node->fileLength(); }
virtual Stream* open() override { return m_node; }
virtual string name() override { return m_node->name(); }
virtual string fullName() override { return m_node->fullName(); }
virtual unique_ptr<Directory> parent() override { return unique_ptr<Directory>(new SimpleDirectory(m_node->parent())); }
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment