rendered paste body#include <iostream>
using std::cin;
using std::cout;
using std::endl;
#include "Filesystem.h"
File::File(string inName, int inSize)
:name(inName),
size(inSize)
{
nextPtr = NULL;
}
const string File::get_name()
{
return name;
}
int File::get_size()
{
return size;
}
List::List()
{
headPtr = NULL;
}
List::~List()
{
cout << "Destructing List" << endl;
while (headPtr) pop_front();
}
void List::push_front(File *newPtr)
{
if (headPtr == NULL){
headPtr = newPtr;
} else {
newPtr->nextPtr = headPtr;
headPtr = newPtr;
}
}
void List::pop_front()
{
if (headPtr != NULL) {
File *tempPtr = headPtr;
headPtr = headPtr->nextPtr;
delete tempPtr;
}
}
void List::clear()
{
while (headPtr != NULL) {
pop_front();
}
}
void List::traverse_list(void (*funcPtr)(File&))
{
File *nodePtr;
nodePtr = headPtr;
while (nodePtr != NULL) {
(*funcPtr)(*nodePtr);
nodePtr = nodePtr->nextPtr;
}
}
string Filesystem::fileName;
int Filesystem::totalSize = 0;
bool Filesystem::fileExist = false;
Filesystem::Filesystem()
{
}
Filesystem::~Filesystem()
{
}
void Filesystem::accumulate_size(File &filePtr)
{
totalSize += filePtr.get_size();
}
void Filesystem::print_file_list(File &filePtr)
{
cout << filePtr.get_name() << "\t";
cout << filePtr.get_size() << endl;
}
void Filesystem::find_same_file(File &filePtr)
{
if (filePtr.get_name() == fileName) fileExist = true;
}
void Filesystem::add_file(string inName, int inSize)
{
fileExist = false;
fileName = inName;
fileList.traverse_list(find_same_file);
if (fileExist == false){
File *filePtr;
filePtr = new File(inName, inSize);
fileList.push_front(filePtr);
cout << "File was sucessfully created." << endl;
} else {
cout << "A file by this name already exists, this file could not be added." << endl;
}
}
void Filesystem::du()
{
totalSize = 0; //resets size before each count
fileList.traverse_list(accumulate_size);
cout << "\nTotal Filesystem size is " << totalSize << "\n" << endl;
}
void Filesystem::ls()
{
cout << "\n" << endl;
cout << "Name \t\t" << "Size" << endl;
fileList.traverse_list(print_file_list);
cout << "\n" << endl;
}
void Filesystem::clean()
{
fileList.clear();
}
int main(){
Filesystem myFilesystem;
int choice=1;
string fileName;
int fileSize;
while (choice <= 4 && choice >= 1){
cout << "Enter 1 to Add Files" << endl;
cout << "Enter 2 to View File List" << endl;
cout << "Enter 3 to View Total Size of the Filesystem" << endl;
cout << "Enter 4 to Format the File System" << endl;
cout << "Enter 5 to Exit" << endl;
cin >> choice;
while (choice > 5 || choice < 1){
cout << "Invalid Input Selection." << endl;
cout << "Enter 1 to Add Files" << endl;
cout << "Enter 2 to View File List" << endl;
cout << "Enter 3 to View Total Size of the Filesystem" << endl;
cout << "Enter 4 to Format the File System" << endl;
cout << "Enter 5 to Exit" << endl;
cin >> choice;
}
switch (choice)
{
case 1:
cout << "Please enter the name of the file you wish to add: ";
cin >> fileName;
cout << "Please enter the size of " << fileName << ": ";
cin >> fileSize;
myFilesystem.add_file(fileName, fileSize);
break;
case 2:
myFilesystem.ls();
break;
case 3:
myFilesystem.du();
break;
case 4:
myFilesystem.clean();
break;
case 5:
return 0;
default:
break;
}
}
}