From 6dee11bfed7d39b5c79accc2e5177797680c106d Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Fri, 20 May 2022 17:48:57 -0400 Subject: [PATCH 01/24] modify gitignore --- .gitignore | 2 ++ .vscode/settings.json | 6 ------ 2 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index e69de29..345a975 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,2 @@ +.git/ +.vscode/ \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 7b7311f..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "C_Cpp.errorSquiggles": "Disabled", - "files.associations": { - "__tuple": "cpp" - } -} \ No newline at end of file From 3bcfe5e9d592dbc90629415c7fb36667106508bc Mon Sep 17 00:00:00 2001 From: Dunya Date: Fri, 20 May 2022 17:50:55 -0400 Subject: [PATCH 02/24] Create README.md --- README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..f94418f --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# advanced_programming_assignment1 From 2bff64bd0503030b8d389a826e2b45a6ceeeff2a Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Sun, 22 May 2022 13:33:06 -0400 Subject: [PATCH 03/24] implement more member functions --- .gitignore | 4 +- ArrayList.cpp | 19 ++++++- ArrayList.h | 148 ++++++++++++++++++++++++++++++++++++++++++++---- ArrayListDriver | Bin 0 -> 56784 bytes 4 files changed, 155 insertions(+), 16 deletions(-) create mode 100755 ArrayListDriver diff --git a/.gitignore b/.gitignore index 345a975..12af761 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .git/ -.vscode/ \ No newline at end of file +.vscode/ +*.gch +*.o \ No newline at end of file diff --git a/ArrayList.cpp b/ArrayList.cpp index ccd3746..d300b83 100644 --- a/ArrayList.cpp +++ b/ArrayList.cpp @@ -32,16 +32,29 @@ ArrayList::ArrayList(ArrayList&& arrayToMove) // getters int ArrayList::getCapacity() const { - return capacity; + return this->capacity; } int ArrayList::getUsed() const { - return used; + return this->used; } int *ArrayList::getPArray() const { - return pArray; + return this->pArray; } +std::ostream &operator<<(std::ostream &output, const IntList &someList) +{ + //base case if used is 0, then we have a fresh/empty array; return empty string + if (someList.getUsed() == 0) + { + return output; + } + for (int i = 0; i < someList.getUsed(); i++) + { + output << someList.dynarray[i] << " "; + } + return output; +} \ No newline at end of file diff --git a/ArrayList.h b/ArrayList.h index a118455..06d2acf 100644 --- a/ArrayList.h +++ b/ArrayList.h @@ -1,5 +1,6 @@ #include #include + using namespace std; class ArrayList @@ -10,16 +11,139 @@ class ArrayList int* pArray; // pointer to a dynamically allocated array of integers public: - // constructors - ArrayList(); // default constructor - ArrayList(const ArrayList &arrayToCopy); // copy constructor - ArrayList(ArrayList&& arrayToMove); // move constructor - - // getters - int getCapacity() const; - int getUsed() const; - int *getPArray() const; - - // operator overload - friend ostream &operator<<(ostream &sout, const ArrayList &someList); + // default constructor + ArrayList() + { + cout << "default constructor is called" << endl; + capacity = 1; + used = 0; + pArray = new int[capacity]; + } + + // copy constructor + ArrayList(const ArrayList &arrayToCopy) + { + cout << "copy constructor is called" << endl; + capacity = arrayToCopy.getCapacity(); + used = arrayToCopy.size(); + pArray = new int[capacity]; + + for (int i = 0; i < capacity; i++) + { + pArray[i] = arrayToCopy.getPArray()[i]; + } + } + + // move constructor + ArrayList(ArrayList&& arrayToMove) + { + cout << "move constructor is called" << endl; + capacity = arrayToMove.capacity; + used = arrayToMove.used; + pArray = arrayToMove.pArray; + arrayToMove.capacity = 0; + arrayToMove.used = 0; + arrayToMove.pArray = nullptr; + } + + // copy assignment operator + ArrayList& operator=(const ArrayList &rhs) + { + cout << "copy assignment operator is called" << endl; + // if the addresses are not the same, proceed with copying + if (&rhs != this) + { + capacity = rhs.getCapacity(); + used = rhs.size(); + delete[] pArray; + pArray = new int[capacity]; + + for (int i = 0; i < capacity; i++) + { + pArray[i] = rhs.getPArray()[i]; + } + } + return *this; + } + + // move assignment operator + ArrayList& operator=(ArrayList &&rhs) + { + cout << "move assignment operator is called" << endl; + if (&rhs != this) + { + delete[] pArray; + capacity = rhs.capacity; + used = rhs.used; + pArray = rhs.pArray; + rhs.pArray = nullptr; + } + return *this; + } + + // destructor + ~ArrayList() + { + delete[] pArray; + } + + // determines whether used equals zero + bool empty() const + { + return used == 0; + } + + // determines whether used equals capacity + bool full() const + { + return used == capacity; + } + + // getters for all member variables + int getCapacity() const + { + return capacity; + } + + int *getPArray() const + { + return pArray; + } + + int size() const + { + return used; + } + + // double the capacity of pArray + void resize + { + int newCapacity = this->capacity * 2; + int* newPArray = new int[newCapacity]; + + for (int i = 0; i < this->capacity; i++) + { + newPArray[i] = this->pArray[i]; + } + this->capacity = newCapacity; + delete[] this->pArray; + this->pArray = newParray; + } + + + + // << operator overload + friend ostream &operator<<(ostream &output, const ArrayList &listToPrint) + { + // if used is 0, return empty string because we can't print anything + if (listToPrint.size() == 0) + { + return output; + } + for (int i = 0; i < listToPrint.size(); i++) + { + output << listToPrint.pArray[i] << " "; + } + return output; + } }; diff --git a/ArrayListDriver b/ArrayListDriver new file mode 100755 index 0000000000000000000000000000000000000000..8d453ab35aff6efdc2b53c6933efd6d3762ab77b GIT binary patch literal 56784 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 Date: Sun, 22 May 2022 22:07:52 -0400 Subject: [PATCH 04/24] separate .h and .cpp files --- ArrayList.cpp | 161 ++++++++++++++++++++++++++++++++++++------ ArrayList.h | 166 ++++++++------------------------------------ ArrayListDriver | Bin 56784 -> 58152 bytes ArrayListDriver.cpp | 52 +++++++------- Token.h | 34 +++++++++ TokenDriver.cpp | 44 ++++++++++++ 6 files changed, 273 insertions(+), 184 deletions(-) create mode 100644 Token.h create mode 100644 TokenDriver.cpp diff --git a/ArrayList.cpp b/ArrayList.cpp index d300b83..b08575b 100644 --- a/ArrayList.cpp +++ b/ArrayList.cpp @@ -1,60 +1,177 @@ -#include -#include +#include #include "ArrayList.h" using namespace std; -// default constructor -ArrayList::ArrayList() +// default constructor +ArrayList::ArrayList() { - capacity = 1; - used = 0; - pArray = new int[capacity]; + cout << "Default constructor is called." << endl; + this->capacity = 1; + this->used = 0; + this->pArray = new int[capacity]; } // copy constructor ArrayList::ArrayList(const ArrayList &arrayToCopy) { - capacity = arrayToCopy.getCapacity(); - used = arrayToCopy.getUsed(); - pArray = new int[capacity]; + cout << "Copy constructor is called." << endl; + this->capacity = arrayToCopy.getCapacity(); + this->used = arrayToCopy.size(); + this->pArray = new int[capacity]; + + for (int i = 0; i < capacity; i++) + { + this->pArray[i] = arrayToCopy.getPArray()[i]; + } } // move constructor ArrayList::ArrayList(ArrayList&& arrayToMove) -{ - capacity = arrayToMove.capacity; - used = arrayToMove.used; +{ + cout << "Move constructor is called." << endl; + this->capacity = arrayToMove.capacity; + this->used = arrayToMove.used; + this->pArray = arrayToMove.pArray; arrayToMove.capacity = 0; arrayToMove.used = 0; + arrayToMove.pArray = nullptr; +} + +// copy assignment operator +ArrayList& ArrayList::operator=(const ArrayList &rhs) +{ + cout << "Copy assignment operator is called." << endl; + // if the addresses are not the same, proceed with copying + if (&rhs != this) + { + this->capacity = rhs.getCapacity(); + this->used = rhs.size(); + delete[] pArray; + this->pArray = new int[capacity]; + + for (int i = 0; i < capacity; i++) + { + this->pArray[i] = rhs.getPArray()[i]; + } + } + return *this; +} + +// move assignment operator +ArrayList& ArrayList::operator=(ArrayList &&rhs) +{ + cout << "Move assignment operator is called." << endl; + if (&rhs != this) + { + delete[] pArray; + this->capacity = rhs.capacity; + this->used = rhs.used; + this->pArray = rhs.pArray; + rhs.pArray = nullptr; + } + return *this; +} + +// destructor +ArrayList::~ArrayList() +{ + cout << "Destructor is called." << endl; + delete[] this->pArray; +} + +// determines whether used equals zero +bool ArrayList::empty() const +{ + return this->used == 0; +} + +// determines whether used equals capacity +bool ArrayList::full() const +{ + return this->used == this->capacity; } -// getters +// getters for all member variables int ArrayList::getCapacity() const { return this->capacity; } -int ArrayList::getUsed() const +int *ArrayList::getPArray() const +{ + return this->pArray; +} + +int ArrayList::size() const { return this->used; } -int *ArrayList::getPArray() const +// inserts x at position used and then increments used by 1 +void ArrayList::pushBack(int x) { - return this->pArray; + // if we are at capacity + if (this->capacity == this->used) + { + resize(); + } + + this->pArray[this->used] = x; + this->used++; +} + +// determines whether x occurs in the list +bool ArrayList::contains(int x) const +{ + for (int i = 0; i < this->used; i++) + { + if (x == this->pArray[i]) + { + return true; + } + } + return false; +} + +// places the value stored at position in the reference parameter value and returns true +// if position is out of range, returns false +bool ArrayList::get(int position, int& value) const +{ + if(position > this->capacity) + { + return false; + } + value = this->pArray[position]; + return true; +} + +// double the capacity of pArray +void ArrayList::resize() +{ + int newCapacity = this->capacity * 2; + int* newPArray = new int[newCapacity]; + + for (int i = 0; i < this->capacity; i++) + { + newPArray[i] = this->pArray[i]; + } + this->capacity = newCapacity; + delete[] this->pArray; + this->pArray = newPArray; } -std::ostream &operator<<(std::ostream &output, const IntList &someList) +// << operator overload +ostream &operator<<(ostream &output, const ArrayList &listToPrint) { - //base case if used is 0, then we have a fresh/empty array; return empty string - if (someList.getUsed() == 0) + // if used is 0, return empty string because we can't print anything + if (listToPrint.size() == 0) { return output; } - for (int i = 0; i < someList.getUsed(); i++) + for (int i = 0; i < listToPrint.size(); i++) { - output << someList.dynarray[i] << " "; + output << listToPrint.pArray[i] << " "; } return output; } \ No newline at end of file diff --git a/ArrayList.h b/ArrayList.h index 06d2acf..492a94f 100644 --- a/ArrayList.h +++ b/ArrayList.h @@ -1,5 +1,6 @@ -#include -#include +#include +#ifndef ARRAYLIST_H +#define ARRAYLIST_H using namespace std; @@ -9,141 +10,34 @@ class ArrayList int capacity; // capacity of the array int used; // number of array elements currently in use int* pArray; // pointer to a dynamically allocated array of integers + void resize(); - public: - // default constructor - ArrayList() - { - cout << "default constructor is called" << endl; - capacity = 1; - used = 0; - pArray = new int[capacity]; - } - - // copy constructor - ArrayList(const ArrayList &arrayToCopy) - { - cout << "copy constructor is called" << endl; - capacity = arrayToCopy.getCapacity(); - used = arrayToCopy.size(); - pArray = new int[capacity]; - - for (int i = 0; i < capacity; i++) - { - pArray[i] = arrayToCopy.getPArray()[i]; - } - } - - // move constructor - ArrayList(ArrayList&& arrayToMove) - { - cout << "move constructor is called" << endl; - capacity = arrayToMove.capacity; - used = arrayToMove.used; - pArray = arrayToMove.pArray; - arrayToMove.capacity = 0; - arrayToMove.used = 0; - arrayToMove.pArray = nullptr; - } - - // copy assignment operator - ArrayList& operator=(const ArrayList &rhs) - { - cout << "copy assignment operator is called" << endl; - // if the addresses are not the same, proceed with copying - if (&rhs != this) - { - capacity = rhs.getCapacity(); - used = rhs.size(); - delete[] pArray; - pArray = new int[capacity]; - - for (int i = 0; i < capacity; i++) - { - pArray[i] = rhs.getPArray()[i]; - } - } - return *this; - } - - // move assignment operator - ArrayList& operator=(ArrayList &&rhs) - { - cout << "move assignment operator is called" << endl; - if (&rhs != this) - { - delete[] pArray; - capacity = rhs.capacity; - used = rhs.used; - pArray = rhs.pArray; - rhs.pArray = nullptr; - } - return *this; - } - - // destructor - ~ArrayList() - { - delete[] pArray; - } - - // determines whether used equals zero - bool empty() const - { - return used == 0; - } - - // determines whether used equals capacity - bool full() const - { - return used == capacity; - } - - // getters for all member variables - int getCapacity() const - { - return capacity; - } - - int *getPArray() const - { - return pArray; - } - - int size() const - { - return used; - } - - // double the capacity of pArray - void resize - { - int newCapacity = this->capacity * 2; - int* newPArray = new int[newCapacity]; - - for (int i = 0; i < this->capacity; i++) - { - newPArray[i] = this->pArray[i]; - } - this->capacity = newCapacity; - delete[] this->pArray; - this->pArray = newParray; - } - - + public: + // constructors + ArrayList(); // default constructor + ArrayList(const ArrayList &arrayToCopy); // copy constructor + ArrayList(ArrayList&& arrayToMove); // move constructor + + // assignment operators + ArrayList& operator=(const ArrayList &rhs); // copy assignment operator + ArrayList& operator=(ArrayList &&rhs); // move assignment operator + + ~ArrayList(); // destructor + + // getters + int getCapacity() const; + int *getPArray() const; + int size() const; + + // member functions + bool empty() const; + bool full() const; + bool contains(int x) const; + bool get(int position, int& value) const; + void pushBack(int x); // << operator overload - friend ostream &operator<<(ostream &output, const ArrayList &listToPrint) - { - // if used is 0, return empty string because we can't print anything - if (listToPrint.size() == 0) - { - return output; - } - for (int i = 0; i < listToPrint.size(); i++) - { - output << listToPrint.pArray[i] << " "; - } - return output; - } + friend ostream &operator<<(ostream &output, const ArrayList &listToPrint); }; +#endif + diff --git a/ArrayListDriver b/ArrayListDriver index 8d453ab35aff6efdc2b53c6933efd6d3762ab77b..28176a2f3b50ea8f4e9c2fc424002e5b86ec0775 100755 GIT binary patch literal 58152 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 PBhk=y>?r8=gR%bumY&@Z delta 4406 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 My`G?tMnunl0cga>IRF3v diff --git a/ArrayListDriver.cpp b/ArrayListDriver.cpp index db16357..e7b3c67 100644 --- a/ArrayListDriver.cpp +++ b/ArrayListDriver.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include "ArrayList.h" using std::cout; @@ -13,30 +13,30 @@ int main() cout << "list-1 -> " << list << endl; assert(list.getCapacity() == 1); - // list.pushback(19); - // cout << "list-2 -> " << list << endl; - // assert(list.getCapacity() == 1); - // assert(list.size() == 1); - - // list.pushback(32); - // cout << "list-3 -> " << list << endl; - // assert(list.getCapacity() == 2); - // assert(list.size() == 2); - - // list.pushback(21); - // cout << "list-4 -> " << list << endl; - // assert(list.getCapacity() == 4); - // assert(list.size() == 3); - - // list.pushback(7); - // cout << "list-5 -> " << list << endl; - // assert(list.getCapacity() == 4); - // assert(list.size() == 4); - - // list.pushback(18); - // cout << "list-6 -> " << list << endl; - // assert(list.getCapacity() == 8); - // assert(list.size() == 5); + list.pushBack(19); + cout << "list-2 -> " << list << endl; + assert(list.getCapacity() == 1); + assert(list.size() == 1); + + list.pushBack(32); + cout << "list-3 -> " << list << endl; + assert(list.getCapacity() == 2); + assert(list.size() == 2); + + list.pushBack(21); + cout << "list-4 -> " << list << endl; + assert(list.getCapacity() == 4); + assert(list.size() == 3); + + list.pushBack(7); + cout << "list-5 -> " << list << endl; + assert(list.getCapacity() == 4); + assert(list.size() == 4); + + list.pushBack(18); + cout << "list-6 -> " << list << endl; + assert(list.getCapacity() == 8); + assert(list.size() == 5); cout << "ArrayList Test Successful" << endl; return 0; diff --git a/Token.h b/Token.h new file mode 100644 index 0000000..e79a12a --- /dev/null +++ b/Token.h @@ -0,0 +1,34 @@ +#include +#include +#include +#include "ArrayList.h" + +using namespace std; + +class Token +{ + private: + char* cstr; // pointer to an array of characters storing the characters in this token + int frequency; // number of occurences of this token + ArrayList number_list; // list of line numbers associated with this token + + public: + // default constructor + Token() + { + this->frequency = 0; + this->cstr[0] = '\0'; + } + + // normal constructor + Token(const char* chars, int line_num) + { + this->cstr = new char[strlen(chars)]; + for (int i = 0; i < strlen(chars); i++) + { + this->cstr[i] = chars[i]; + } + this->frequency = 1; + this->number_list.pushback(line_num); + } +} \ No newline at end of file diff --git a/TokenDriver.cpp b/TokenDriver.cpp new file mode 100644 index 0000000..3933769 --- /dev/null +++ b/TokenDriver.cpp @@ -0,0 +1,44 @@ +#include +#include +#include "Token.h" + +using std::cout; +using std::endl; + +int main() +{ + std::cout << "Testing an Object of Class Token\n"; + Token t1{ "Hello", 1 }; + + // ideally we want to print t1 like this (easy to implement) + // cout << "A) t1: " << t1 << '\n'; + cout << "A) t1: "; t1.print(cout); cout << '\n'; + t1.addLineNumber(11); + t1.addLineNumber(13); + t1.addLineNumber(74); + t1.addLineNumber(92); + cout << "B) t1: "; t1.print(cout); cout << '\n'; + + Token t2 = t1; // copy constructor (not copy assignment) + t1.addLineNumber(11111); + cout << "C) t1: "; t1.print(cout); cout << '\n'; + cout << "D) t2: "; t2.print(cout); cout << '\n' + t2 = t1; // copy assignment + cout << "E) t1: "; t1.print(cout); cout << '\n'; + cout << "F) t2: "; t2.print(cout); cout << '\n'; + + Token t3 = std::move(t2); // move constructor + cout << "G) t3: "; t3.print(cout); cout << '\n'; + cout << "H) t2: "; t2.print(cout); cout << '\n'; // warning C26800: + // Use of a moved from object + + t1 = std::move(t3); // move assignment + cout << "I) t3: "; t3.print(cout); cout << '\n'; // warning C26800: + // Use of a moved from object + cout << "J) t1: "; t1.print(cout); cout << '\n'; + + ArrayList ia = t1.getNumberList(); + cout << "J) ia: "; ia.print(cout); cout << '\n'; + + return 0; +} \ No newline at end of file From d0d604982e0f458a3e89ef05a01e3bf4fdbd51c8 Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Tue, 24 May 2022 22:22:02 -0400 Subject: [PATCH 05/24] develop token class --- ArrayList.cpp | 24 ++++--- ArrayList.h | 1 + Token.cpp | 167 ++++++++++++++++++++++++++++++++++++++++++++++++ Token.h | 50 +++++++++------ TokenDriver.cpp | 2 +- 5 files changed, 215 insertions(+), 29 deletions(-) create mode 100644 Token.cpp diff --git a/ArrayList.cpp b/ArrayList.cpp index b08575b..d996774 100644 --- a/ArrayList.cpp +++ b/ArrayList.cpp @@ -6,7 +6,7 @@ using namespace std; // default constructor ArrayList::ArrayList() { - cout << "Default constructor is called." << endl; + cout << "Arraylist default constructor is called." << endl; this->capacity = 1; this->used = 0; this->pArray = new int[capacity]; @@ -15,7 +15,7 @@ ArrayList::ArrayList() // copy constructor ArrayList::ArrayList(const ArrayList &arrayToCopy) { - cout << "Copy constructor is called." << endl; + cout << "Arraylist copy constructor is called." << endl; this->capacity = arrayToCopy.getCapacity(); this->used = arrayToCopy.size(); this->pArray = new int[capacity]; @@ -29,7 +29,7 @@ ArrayList::ArrayList(const ArrayList &arrayToCopy) // move constructor ArrayList::ArrayList(ArrayList&& arrayToMove) { - cout << "Move constructor is called." << endl; + cout << "Arraylist move constructor is called." << endl; this->capacity = arrayToMove.capacity; this->used = arrayToMove.used; this->pArray = arrayToMove.pArray; @@ -41,13 +41,13 @@ ArrayList::ArrayList(ArrayList&& arrayToMove) // copy assignment operator ArrayList& ArrayList::operator=(const ArrayList &rhs) { - cout << "Copy assignment operator is called." << endl; + cout << "Arraylist copy assignment operator is called." << endl; // if the addresses are not the same, proceed with copying if (&rhs != this) { this->capacity = rhs.getCapacity(); this->used = rhs.size(); - delete[] pArray; + delete[] this->pArray; this->pArray = new int[capacity]; for (int i = 0; i < capacity; i++) @@ -61,10 +61,10 @@ ArrayList& ArrayList::operator=(const ArrayList &rhs) // move assignment operator ArrayList& ArrayList::operator=(ArrayList &&rhs) { - cout << "Move assignment operator is called." << endl; + cout << "Arraylist move assignment operator is called." << endl; if (&rhs != this) { - delete[] pArray; + delete[] this->pArray; this->capacity = rhs.capacity; this->used = rhs.used; this->pArray = rhs.pArray; @@ -76,7 +76,7 @@ ArrayList& ArrayList::operator=(ArrayList &&rhs) // destructor ArrayList::~ArrayList() { - cout << "Destructor is called." << endl; + cout << "Arraylist destructor is called." << endl; delete[] this->pArray; } @@ -174,4 +174,12 @@ ostream &operator<<(ostream &output, const ArrayList &listToPrint) output << listToPrint.pArray[i] << " "; } return output; +} + +void ArrayList::print(std::ostream &sout) +{ + for (int i = 0; i < this->used; i++) + { + sout << pArray[i] << ", "; + } } \ No newline at end of file diff --git a/ArrayList.h b/ArrayList.h index 492a94f..d827a9e 100644 --- a/ArrayList.h +++ b/ArrayList.h @@ -35,6 +35,7 @@ class ArrayList bool contains(int x) const; bool get(int position, int& value) const; void pushBack(int x); + void print(ostream&) const; // << operator overload friend ostream &operator<<(ostream &output, const ArrayList &listToPrint); diff --git a/Token.cpp b/Token.cpp new file mode 100644 index 0000000..37f93dd --- /dev/null +++ b/Token.cpp @@ -0,0 +1,167 @@ +#include +#include +#include +#include "Token.h" + +using namespace std; + +// default constructor +Token::Token() +{ + this->frequency = 0; + this->cstr[0] = '\0'; +} + +// normal constructor +Token::Token(const char* chars, int line_num) +{ + this->cstr = new char[strlen(chars)]; + for (int i = 0; i < strlen(chars); i++) + { + this->cstr[i] = chars[i]; + } + this->frequency = 1; + this->number_list.pushBack(line_num); +} + +// copy constructor +Token::Token(const Token& token) +{ + cout << "Token copy constructor is called." << endl; + this->frequency = token.getFrequency(); + this->number_list = token.getNumberList(); + this->cstr = new char[token.size()]; + + for (int i = 0; i < token.size(); i++) + { + this->cstr[i] = token.c_str()[i]; + } +} + +// move constructor +Token::Token(Token&& token) +{ + cout << "Token move constructor is called." << endl; + this->cstr = token.c_str(); + token.cstr = nullptr; +} + +// copy assignment operator +Token& Token::operator=(const Token& rhs) +{ + cout << "Token copy assignment operator is called." << endl; + // if the addresses are not the same, proceed with copying + if (&rhs != this) + { + this->frequency = rhs.getFrequency(); + this->number_list = rhs.getNumberList(); + delete[] this->cstr; + this->cstr = new char[rhs.size()]; + + for (int i = 0; i < rhs.size(); i++) + { + this->cstr[i] = rhs.c_str()[i]; + } + } + return *this; +} + +// move assignment operator +Token& Token::operator=(Token &&rhs) +{ + cout << "Token move assignment operator is called." << endl; + if (&rhs != this) + { + delete[] this->cstr; + this->frequency = rhs.frequency; + this->number_list = rhs.number_list; + this->cstr = rhs.cstr; + rhs.cstr = nullptr; + } + return *this; +} + +// destructor +Token::~Token() +{ + cout << "Token destructor is called." << endl; + delete[] this->cstr; +} + +// returns a constant pointer to this token's cstr +char *Token::c_str() const +{ + return this->cstr; +} + +// returns this token's list of line numbers +const ArrayList& Token::getNumberList() const +{ + return this->number_list; +} + +// returns this token's frequency +int Token::getFrequency() const +{ + return this->frequency; +} + +// adds line num to the end of this token's number list +void Token::addLineNumber(int line_num) +{ + this->number_list.pushBack(line_num); +} + +// returns the length of this token's cstr +int Token::size() const +{ + if (this->cstr != NULL) + { + return strlen(this->cstr); + } + else + { + return 0; + } +} + +// returns -1, 0, or 1, depending on whether this token's +// cstr is less than, equal to, or grater than aToken's cstr +int Token::compare(const Token& aToken) const +{ + if(strcmp(this->cstr, aToken.c_str()) < 0) + { + return 1; + } + else if(strcmp(this->cstr, aToken.c_str()) == 0) + { + return 0; + } + else + { + return 1; + } +} + +// << operator overload +// prints this token's cstr followed by its number list +ostream &operator<<(ostream &output, const Token &tokenToPrint) +{ + // if used is 0, return empty string because we can't print anything + if (tokenToPrint.size() == 0) + { + return output; + } + for (int i = 0; i < tokenToPrint.size(); i++) + { + output << tokenToPrint.c_str[i] << " "; + } + output << " " << tokenToPrint.number_list; + return output; +} + +void Token::print(ostream &sout) const +{ + sout << this->cstr << endl; + sout << this->number_list << endl; +} \ No newline at end of file diff --git a/Token.h b/Token.h index e79a12a..0c614aa 100644 --- a/Token.h +++ b/Token.h @@ -2,6 +2,8 @@ #include #include #include "ArrayList.h" +#ifndef TOKEN_H +#define TOKEN_H using namespace std; @@ -10,25 +12,33 @@ class Token private: char* cstr; // pointer to an array of characters storing the characters in this token int frequency; // number of occurences of this token - ArrayList number_list; // list of line numbers associated with this token + ArrayList number_list; // list of line numbers associated with this token public: - // default constructor - Token() - { - this->frequency = 0; - this->cstr[0] = '\0'; - } - - // normal constructor - Token(const char* chars, int line_num) - { - this->cstr = new char[strlen(chars)]; - for (int i = 0; i < strlen(chars); i++) - { - this->cstr[i] = chars[i]; - } - this->frequency = 1; - this->number_list.pushback(line_num); - } -} \ No newline at end of file + // constructors + Token(); // default constructor + Token(const char* chars, int line_num); // normal constructor + Token(const Token& token); // copy constructor + Token(Token&& token); // move constructor + + // assignment operators + Token& operator=(const Token& rhs); // copy assignment operator + Token& operator=(Token&& rhs); // move assignment operator + + ~Token(); // destructor + + // getters + char *c_str() const; + const ArrayList& getNumberList() const; + int getFrequency() const; + + // member functions + void addLineNumber(int line_num); + int size() const; + int compare(const Token& aToken) const; + void print(ostream&) const; + + // >> operator overload + friend ostream &operator<<(ostream &output, const Token &tokenToPrint); +}; +#endif \ No newline at end of file diff --git a/TokenDriver.cpp b/TokenDriver.cpp index 3933769..4951cd8 100644 --- a/TokenDriver.cpp +++ b/TokenDriver.cpp @@ -22,7 +22,7 @@ int main() Token t2 = t1; // copy constructor (not copy assignment) t1.addLineNumber(11111); cout << "C) t1: "; t1.print(cout); cout << '\n'; - cout << "D) t2: "; t2.print(cout); cout << '\n' + cout << "D) t2: "; t2.print(cout); cout << '\n'; t2 = t1; // copy assignment cout << "E) t1: "; t1.print(cout); cout << '\n'; cout << "F) t2: "; t2.print(cout); cout << '\n'; From a4b12a2e77bda7c644c75ef982f1c868ea1fce1e Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Tue, 24 May 2022 23:57:40 -0400 Subject: [PATCH 06/24] add print class to ArrayList --- ArrayList.cpp | 6 ++++-- ArrayList.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ArrayList.cpp b/ArrayList.cpp index d996774..f54f10f 100644 --- a/ArrayList.cpp +++ b/ArrayList.cpp @@ -68,6 +68,8 @@ ArrayList& ArrayList::operator=(ArrayList &&rhs) this->capacity = rhs.capacity; this->used = rhs.used; this->pArray = rhs.pArray; + rhs.capacity = 0; + rhs.used = 0; rhs.pArray = nullptr; } return *this; @@ -176,10 +178,10 @@ ostream &operator<<(ostream &output, const ArrayList &listToPrint) return output; } -void ArrayList::print(std::ostream &sout) +void ArrayList::print(ostream &output) const { for (int i = 0; i < this->used; i++) { - sout << pArray[i] << ", "; + output << pArray[i] << " "; } } \ No newline at end of file diff --git a/ArrayList.h b/ArrayList.h index d827a9e..70df0d1 100644 --- a/ArrayList.h +++ b/ArrayList.h @@ -35,7 +35,7 @@ class ArrayList bool contains(int x) const; bool get(int position, int& value) const; void pushBack(int x); - void print(ostream&) const; + void print(ostream &output) const; // << operator overload friend ostream &operator<<(ostream &output, const ArrayList &listToPrint); From 67f6ec2714db4bb5a35e909c5769f0bcdd3029e6 Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Tue, 24 May 2022 23:58:18 -0400 Subject: [PATCH 07/24] implement Token class --- Token.cpp | 16 +++++++++++----- Token.h | 2 +- TokenDriver.cpp | 9 +++++---- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Token.cpp b/Token.cpp index 37f93dd..8b9ac4b 100644 --- a/Token.cpp +++ b/Token.cpp @@ -42,8 +42,12 @@ Token::Token(const Token& token) Token::Token(Token&& token) { cout << "Token move constructor is called." << endl; - this->cstr = token.c_str(); + this->cstr = token.cstr; + this->frequency = token.frequency; + this->number_list = token.number_list; token.cstr = nullptr; + token.frequency = 0; + // token.number_list = nullptr; --> why is this not working? } // copy assignment operator @@ -77,6 +81,7 @@ Token& Token::operator=(Token &&rhs) this->number_list = rhs.number_list; this->cstr = rhs.cstr; rhs.cstr = nullptr; + rhs.frequency = 0; } return *this; } @@ -110,6 +115,7 @@ int Token::getFrequency() const void Token::addLineNumber(int line_num) { this->number_list.pushBack(line_num); + this->frequency++; } // returns the length of this token's cstr @@ -154,14 +160,14 @@ ostream &operator<<(ostream &output, const Token &tokenToPrint) } for (int i = 0; i < tokenToPrint.size(); i++) { - output << tokenToPrint.c_str[i] << " "; + output << tokenToPrint.c_str()[i] << " "; } output << " " << tokenToPrint.number_list; return output; } -void Token::print(ostream &sout) const +void Token::print(ostream &output) const { - sout << this->cstr << endl; - sout << this->number_list << endl; + output << this->cstr << " " << "(" << this->frequency << ")"; + output << " " << this->number_list << endl; } \ No newline at end of file diff --git a/Token.h b/Token.h index 0c614aa..b4dd441 100644 --- a/Token.h +++ b/Token.h @@ -36,7 +36,7 @@ class Token void addLineNumber(int line_num); int size() const; int compare(const Token& aToken) const; - void print(ostream&) const; + void print(ostream &output) const; // >> operator overload friend ostream &operator<<(ostream &output, const Token &tokenToPrint); diff --git a/TokenDriver.cpp b/TokenDriver.cpp index 4951cd8..43956f6 100644 --- a/TokenDriver.cpp +++ b/TokenDriver.cpp @@ -23,18 +23,19 @@ int main() t1.addLineNumber(11111); cout << "C) t1: "; t1.print(cout); cout << '\n'; cout << "D) t2: "; t2.print(cout); cout << '\n'; + t2 = t1; // copy assignment cout << "E) t1: "; t1.print(cout); cout << '\n'; cout << "F) t2: "; t2.print(cout); cout << '\n'; Token t3 = std::move(t2); // move constructor cout << "G) t3: "; t3.print(cout); cout << '\n'; - cout << "H) t2: "; t2.print(cout); cout << '\n'; // warning C26800: - // Use of a moved from object + // warning C26800: Use of a moved from object + // cout << "H) t2: "; t2.print(cout); cout << '\n'; t1 = std::move(t3); // move assignment - cout << "I) t3: "; t3.print(cout); cout << '\n'; // warning C26800: - // Use of a moved from object + // cout << "I) t3: "; t3.print(cout); cout << '\n'; + // warning C26800: Use of a moved from object cout << "J) t1: "; t1.print(cout); cout << '\n'; ArrayList ia = t1.getNumberList(); From 7f08e03881ac3ea349429ae3ae76f64c9e27d3dc Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Tue, 24 May 2022 23:59:15 -0400 Subject: [PATCH 08/24] a simple test program --- test | Bin 0 -> 56096 bytes test.cpp | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100755 test create mode 100644 test.cpp diff --git a/test b/test new file mode 100755 index 0000000000000000000000000000000000000000..70030233c4c6058673b9b717fdb7067cc7799bf0 GIT binary patch literal 56096 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 +#include + +int main() +{ + char a = 'a'; + // this doesnt work + // const char *b = 'b'; + const char *b = "b"; // works + char *c; + c = &a; + + std::cout << "a: " << a << std::endl; + std::cout << "b: " << b << std::endl; + std::cout << "a: " << &a << std::endl; // cant print address of a variable + std::cout << "b: " << &b << std::endl; + std::cout << "c: " << c << std::endl; + std::cout << "c: " << *c << std::endl; + + return 0; +}; From 90c89fbe2e211f6d536ffeed0677276b053b27ce Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Wed, 25 May 2022 00:37:43 -0400 Subject: [PATCH 09/24] begin TokenList class --- TokenDriver | Bin 0 -> 60528 bytes TokenList.cpp | 0 TokenList.h | 31 +++++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100755 TokenDriver create mode 100644 TokenList.cpp create mode 100644 TokenList.h diff --git a/TokenDriver b/TokenDriver new file mode 100755 index 0000000000000000000000000000000000000000..a3fd2c9661289392f96a868f916f2829a358cb1c GIT binary patch literal 60528 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 Date: Wed, 25 May 2022 01:09:06 -0400 Subject: [PATCH 10/24] implement TokenList header class --- TokenList.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ TokenList.h | 36 +++++++++++++++++++++++++++++--- 2 files changed, 90 insertions(+), 3 deletions(-) diff --git a/TokenList.cpp b/TokenList.cpp index e69de29..b315ceb 100644 --- a/TokenList.cpp +++ b/TokenList.cpp @@ -0,0 +1,57 @@ +#include +#include "TokenList.h" + +using namespace std; + +// default constructor +TokenList() +{ + +} + +// copy constructor +TokenList(const TokenList& list) +{ + +} + +// move constructor +TokenList(TokenList&& list) +{ + +} + +// copy assignment operator +TokenList& operator=(const TokenList& rhs) +{ + +} + +// move assignment operator +TokenList& operator=(TokenList&& rhs) +{ + +} + +// destructor +~TokenList() +{ + +} + +// member functions +bool empty() const; +size_t size() const; +void print(ostream &output) const; +const Token& front() const; +const Token& back() const; +void addSorted(const Token& aToken); +void addSorted(const string& str, int LineNum); +bool removeFront(); +bool removeBack(); +bool search(const Token& aToken) const; +void addFront(const Token& aToken); +void addBack(const Token& aToken); +bool remove(TNode* nodePtr); +TNode* lookup(const Token& aToken) const; +void addAfter(TNode* p, const Token& aToken); \ No newline at end of file diff --git a/TokenList.h b/TokenList.h index 8fe3bb8..799d473 100644 --- a/TokenList.h +++ b/TokenList.h @@ -1,3 +1,6 @@ +#include +#include "Token.h" + #ifndef TOKENLIST_H_ #define TOKENLIST_H_ @@ -24,8 +27,35 @@ class TokenList { TNode* head{ nullptr }; // points to the first node in the list TNode* tail{ nullptr }; // points to the last node in the list size_t size{ 0 }; // counts the number of noded in the list + + bool remove(TNode* nodePtr); + TNode* lookup(const Token& aToken) const; + void addAfter(TNode* p, const Token& aToken); public: - - -}; \ No newline at end of file + // constructors + TokenList(); // default constructor + TokenList(const TokenList& list); // copy constructor + TokenList(TokenList&& list); // move constructor + + // assignment operators + TokenList& operator=(const TokenList& rhs); // copy assignment operator + TokenList& operator=(TokenList&& rhs); // move assignment operator + + ~TokenList(); + + // member functions + bool empty() const; + size_t size() const; + void print(ostream &output) const; + const Token& front() const; + const Token& back() const; + void addSorted(const Token& aToken); + void addSorted(const string& str, int LineNum); + bool removeFront(); + bool removeBack(); + bool search(const Token& aToken) const; + void addFront(const Token& aToken); + void addBack(const Token& aToken); +}; +#endif \ No newline at end of file From f1f8035ec9add8e4c13b246b27873fd4344cd638 Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Wed, 25 May 2022 21:40:31 -0400 Subject: [PATCH 11/24] remove using namespace std --- ArrayList.cpp | 18 ++++++++---------- ArrayList.h | 6 ++---- ArrayListDriver | Bin 58152 -> 58304 bytes Token.cpp | 14 +++++++------- Token.h | 6 ++---- TokenDriver | Bin 60528 -> 60528 bytes TokenList.cpp | 2 -- TokenList.h | 2 +- 8 files changed, 20 insertions(+), 28 deletions(-) diff --git a/ArrayList.cpp b/ArrayList.cpp index f54f10f..2e29db2 100644 --- a/ArrayList.cpp +++ b/ArrayList.cpp @@ -1,12 +1,10 @@ #include #include "ArrayList.h" -using namespace std; - // default constructor ArrayList::ArrayList() { - cout << "Arraylist default constructor is called." << endl; + std::cout << "Arraylist default constructor is called." << std::endl; this->capacity = 1; this->used = 0; this->pArray = new int[capacity]; @@ -15,7 +13,7 @@ ArrayList::ArrayList() // copy constructor ArrayList::ArrayList(const ArrayList &arrayToCopy) { - cout << "Arraylist copy constructor is called." << endl; + std::cout << "Arraylist copy constructor is called." << std::endl; this->capacity = arrayToCopy.getCapacity(); this->used = arrayToCopy.size(); this->pArray = new int[capacity]; @@ -29,7 +27,7 @@ ArrayList::ArrayList(const ArrayList &arrayToCopy) // move constructor ArrayList::ArrayList(ArrayList&& arrayToMove) { - cout << "Arraylist move constructor is called." << endl; + std::cout << "Arraylist move constructor is called." << std::endl; this->capacity = arrayToMove.capacity; this->used = arrayToMove.used; this->pArray = arrayToMove.pArray; @@ -41,7 +39,7 @@ ArrayList::ArrayList(ArrayList&& arrayToMove) // copy assignment operator ArrayList& ArrayList::operator=(const ArrayList &rhs) { - cout << "Arraylist copy assignment operator is called." << endl; + std::cout << "Arraylist copy assignment operator is called." << std::endl; // if the addresses are not the same, proceed with copying if (&rhs != this) { @@ -61,7 +59,7 @@ ArrayList& ArrayList::operator=(const ArrayList &rhs) // move assignment operator ArrayList& ArrayList::operator=(ArrayList &&rhs) { - cout << "Arraylist move assignment operator is called." << endl; + std::cout << "Arraylist move assignment operator is called." << std::endl; if (&rhs != this) { delete[] this->pArray; @@ -78,7 +76,7 @@ ArrayList& ArrayList::operator=(ArrayList &&rhs) // destructor ArrayList::~ArrayList() { - cout << "Arraylist destructor is called." << endl; + std::cout << "Arraylist destructor is called." << std::endl; delete[] this->pArray; } @@ -164,7 +162,7 @@ void ArrayList::resize() } // << operator overload -ostream &operator<<(ostream &output, const ArrayList &listToPrint) +std::ostream &operator<<(std::ostream &output, const ArrayList &listToPrint) { // if used is 0, return empty string because we can't print anything if (listToPrint.size() == 0) @@ -178,7 +176,7 @@ ostream &operator<<(ostream &output, const ArrayList &listToPrint) return output; } -void ArrayList::print(ostream &output) const +void ArrayList::print(std::ostream &output) const { for (int i = 0; i < this->used; i++) { diff --git a/ArrayList.h b/ArrayList.h index 70df0d1..15662d1 100644 --- a/ArrayList.h +++ b/ArrayList.h @@ -2,8 +2,6 @@ #ifndef ARRAYLIST_H #define ARRAYLIST_H -using namespace std; - class ArrayList { private: @@ -35,10 +33,10 @@ class ArrayList bool contains(int x) const; bool get(int position, int& value) const; void pushBack(int x); - void print(ostream &output) const; + void print(std::ostream &output) const; // << operator overload - friend ostream &operator<<(ostream &output, const ArrayList &listToPrint); + friend std::ostream &operator<<(std::ostream &output, const ArrayList &listToPrint); }; #endif diff --git a/ArrayListDriver b/ArrayListDriver index 28176a2f3b50ea8f4e9c2fc424002e5b86ec0775..4ee10aa1f0a6306e60435d3571d6c1a94c2063ff 100755 GIT binary patch delta 5409 zcma)=e{|E;6~Ny&O=_{!gn}#d=eIwgtoA-U~3rAC8qbZ@W%-ABvB*s{IAqe=y77c&glsVC$YM)S*Y@&fz zOHK3q%T@JZQv3N1X~n#j>s4)pv@LvGT9J8?v}T>EzIZ(^(lyO1S)m%ACgYOmy}DD9 z6yq!Ps~0&^7(?@g(CUvf_6YP_-(}3spVep0$ph-aQ7)zC7@itu?7HDw=ktWV%;b74 z_GaCH^|R*(e%buh{U?s|GDE#?tb*TVcrY_|41$1LIW!Zr`r}b4^-uG;KRdm|vIK$$ z1}@oyt(WY9QTvc}elcoV6G|s6h&^b{TEbt>ZqZ#^$p4kSdfuZlDhCvMus?1O98~u5 zn{w{T8J{P#3FCo;QlMHuG@GIzyt#Re!0(7_X5?+&g zi*9!TAIo3Nf1i7>>{gLWvfqO^L!ebr9?BPfHN~9gJykYbgz9ADPcSx4au8MzCh05U z>+^5bdGq-1^2>CNJecdA#vLM)WLKT)swjWR6|PQUHL861?bH-Jg<@aUnlL`>;#&&} zb-rBwOhMVaQL)$d;D*HLDm^SU<8KvYtuhw0Ft))SIBOrAG^?v^gB5SwhYvDjy&oSV zU`r@p=ZG)LIrM~F_ux1zwqoXa@{;l+I6QdRyzvn3RA9qtO~@1`o>{4|T#qMAsHykaT;$iLP4QbcNI%-LdpaNqU<iBI|Cm8HfWiyl|Fc#OgcsC3h#k&rSnRNAK1AS zcA4VfV(mv(zJW)8G0*f^(E2$(VsJmIlsn`lj{Tj_sV-h%{!E)V*r->R@ipFDEmwUA3B%;K&zgK3A1JsVRZ1iL zRA(kXb&fw)U18b@ivp7miY_B%EKKY?J~RhAhmpvN+6l)XLJG(dTL_4N@*2 zU-ma?58vD1_nB;rO)bt8a)FRP5OSfA*+S+DnJ=U)WRZ|1LM{=qOvr15TqvC8+yA!O%sq`c>9f4}qm9M0cr%ZDkMEAY z*Z6?s!|Q_|wxSstUK;S@hh~PC2i^-z@Cv&PddFhMc0r%Gma#DOv89YfpdYJ%@6b0d zW9&WXB;6Z z$q(n6X#taBa1#3qm=uRZWSL1}8OD=7Xd}U8z_%c3O7%>O$929XkOI^w3oTdsUr`@| zv{4_S-UN?@{977-iTV-h4^n@U`VXj&Q;*Ao{u9I()jpG5CWQl21cNj_?9WTup;bF&FUU9YRpz1?NIkA2Q9 zNAu^z^(ib?!)Y5F{VgERLV$1`Y*ws}G4S2w@~-aibU5AKZ7|7*zLxFRF9W4R)D@^c&|BFv zhI*)3Z-=|553;&wr~w0;d!3to?K42Qdbk2omgD-){_bvYI|~DmdYESnMFK^58Hfl} zoKEEPwaDi(n6-nfabW^L;ipmNT^MQjy_$Z8P&77$?@tWD?!Sev?TSI;JIm(8)p z$@alwxbAI(=xyF@9+%DSW(QJhTw6LJnM1Imp&z2xk3mF0u(3N~i(xB5l0$Bn?bzPp@77# z#AC#q7;op8(1*lk;!DKs#7%In;{!zm`xrY$iZ~gpgM$GLny*myHYp zX#8ZL6-|U#D;jp4YOmFdnOLit5V2M>VPdUjBE(wFjQL2R6-}I2E1CqcRx}Pc+%RFS zWt(LpO3I5h=pH4`J&Y9>ys)l54a zu;{PVOo*6j#>Zl$*o{R5_iycg0WTBdyB`A_B*r@c^83Vi7eH2s@lJsJEiv8=kTc*< z4UCU>1Y}t->_1)>P*H;lI4q9&Rfg*=Gs1vJRv8XR!7?$_s$etxU5x%W5qok~ZX=d+ zRPH4X)A-Mk@%PtE2G5d#_79ba#szACL&SJ9!U;bh_Q0RN$mfaMDIp1z_y96ZC=*8t zRr`8i9~v-ORonvKkgt)m-^k`Uqe8m`^^k#fsX0X~u33=4)o`gpd+knhyI>fggq{`*8xJ3to4rWmct=Ez0z(f` z)z6_6pHSeK_)Mq<)0_qc12E0&llZA5K9$62hVT2|n8bs=B*jP)A5Y?slK876HpA2aU2yG{{q=5fVJcEcAEqwQJDa}eZ zIR47%Z1v_Q*`m+?`Mawctn9|stJ_>#oh}dD!8-2hc2(E^m&*FzR&{26=Hph0{Rd-s BdiMYT delta 5117 zcmZ{o3viUx6@c%**$s~*?j|6QJpUx5Nq{7~NfrpQc@P#CBqgBK)<;Q5HzYNIB@YB8 z?$67zu5p%L+iELg)M-mgZDUtEj1~+UdDyWoXf3ta*`|s=PZwouDxIe1+-f*y zbN}z0bI*O9z4uRsjwS3rnh=VlY3Yn9jIm#-AmGu`_l{Jj&Avrye=L=3_AR_zsZJdt z^)RW2_;#fxb=M;4JV@GI{G?KoR_T)3s~8=gN*B*FRi_r!NcCx{WkumlrneQPh}W6x zXW9}NGl5|Sl+oji?S{JO6bQc0Jbh9oymUgD!Ii`ei{~U`^Y^Zr!eizl+r3vF8f)5F zbN_+;`@dKi9h$_8EDKDwQohdeP?`pTwm`FDC^jgg$HPkEt5diw@ohddGilbQ0>(Un zzEMxGVbl{i=IM9xJk&JA^s_3w1f6#l@K0tgF&$93Grc}FSt$E-Pp~)Y3B0Dy<$?5d z8LLv!wJ&Bp9Mhl95$_Pqt?N(Z@Wc#v(Up9R3B3e*V>fy#%|&fPR9`2WIN!M2i*H9crRpK z-+q1DXJQ-!#yEztMX+x`?;amn-wk6AxStYULHAQTM-^UNHr=}WCJ}$9s8T|FWm&eV z<`UmnR%k7grV?qom;byhf9i1T#?W**rTP3!S$gs2PsJ$q7^66h#$ewbz0*8ye!Bl6 z&#@Pl`BOx%eWFS^0oBXXaps9hc?A|hFnEP?D4k7E`ht&m}@47AM{2ew89zvCVHyk@R`tH2I9gY&)dR+N_ zr&m-dA0_h*jx1B|1>Wx{u_j5|Bx!qwpK#<)9k^_C9CQuKaXrf5mMP&pKTuv`y@d1ZcU}-x%G3Pg z^8BegV54alT)&WG+sd;m)Ur}oEa<#;T<6_r4<165o&#s|jm{nCcxOe4ZI0}qSa$HA z$^6$9S;|NJctz=LZ%-0^za^@am%!uYLfpe|!Ov2}G4?R%`k9=3;Di~XN3HRkWnE=g#1v* zvqI`Zo)_|>ke7vw3HhmzSB3ms$WbA`$Q9Lph5Vn8%+1(}{wxKmy4%MJR)rtErA<+m z@UcbN=K77kt$dYhhSI>l>B>;*d5+L*ZJ!G^s96bPF{o{&@D7)$R>jyQSmq6epSL zX;iCJ+*KDKj3w5W-oBZ(d^`p%?V6%GG^}RUdA0GH*??7 zgZ?)x4o6E{bJyCQuIBch?qw}*_NFDl9Gb@x%-Vd|mCfvY!s^>@U&}_!D?wg_Akq1- zS=s`|5*?29-k$nqUvo=)&sON@RdXd9HdleNv97DD8C4&co!(BLus&;9(6VtuPjmZ* zZW!PnEEVg${vLPx>UQ>u1)@Sem}tPK&8@v19nkuhV2D*gccFzK22n& +luVpy65 zhqW901{R@9H5kgF6Z2-TqniU^8<#moBv%;^t=x5 zhV?yd?#A0%*ypf9-c4)UH}tIS+3NGU+uPYSONDo1D}>h)p}}%&^&Jo~5G-^LY%o5W zGo&=CO=?uJsj5As*h8j4MMF>}RZp6d`gr zKs-czoH$CH2qz~7uocUID~M}}e?;sfet~#^_}|1aWayu5haWixRAwj5NpIy;&+H^=P>4nb}SbT7ttXokhc;K5T7EB5Ld&!i~cd< z7m3+i+5RJ9m3RVtRG>eeiWvWH;?P{?7m5%m2Fc-hVmv;v!3eQNJQKc^FyJ8ZJmM&^ zkyAsJvb~W*QDP%!m=o4tbU;aBhob`7NSa1sBWZ?+jhu-R8#!Z}C)*o2V<$Fpris|d znUJ3pM$!xs8%Yx*Hj<_mjwc-8_Q`Sue8fi1M2L-?fn!Vf8#xmrHgd*qgCh+C8cCxP z8%bj)Hj*YpY~)OY*vOd}v5_+>oNyT5$eCJV${9avB!!VQK4K$j@X8beq#VE_6WPca z23IMvku!L;A{#j~Ky2hpgjnVb{{HA9TZ2htmiIXZXd}jZ9r;0Gyx)-@BgT6k`59uo z?~z|5#(N+6C^6pu$bUojLx=bwfQpN#fWzUqCK16F9ZX){+fc@A3%aj53k%RI7gh67TD($Zm<5v$hdym*oe1TYnzc|sZfWY`s zimwtkxv_BoDBIf-o7f1_r&p$IA)eFw_g;;{!MX;9dZ2AI3A4Sb8&2e>w5fv zrwP`sPcZw->}LhC!SyAohzqbZj_-`)&baoyaohfrequency = token.getFrequency(); this->number_list = token.getNumberList(); this->cstr = new char[token.size()]; @@ -41,7 +41,7 @@ Token::Token(const Token& token) // move constructor Token::Token(Token&& token) { - cout << "Token move constructor is called." << endl; + std::cout << "Token move constructor is called." << std::endl; this->cstr = token.cstr; this->frequency = token.frequency; this->number_list = token.number_list; @@ -53,7 +53,7 @@ Token::Token(Token&& token) // copy assignment operator Token& Token::operator=(const Token& rhs) { - cout << "Token copy assignment operator is called." << endl; + std::cout << "Token copy assignment operator is called." << std::endl; // if the addresses are not the same, proceed with copying if (&rhs != this) { @@ -73,7 +73,7 @@ Token& Token::operator=(const Token& rhs) // move assignment operator Token& Token::operator=(Token &&rhs) { - cout << "Token move assignment operator is called." << endl; + std::cout << "Token move assignment operator is called." << std::endl; if (&rhs != this) { delete[] this->cstr; @@ -89,7 +89,7 @@ Token& Token::operator=(Token &&rhs) // destructor Token::~Token() { - cout << "Token destructor is called." << endl; + std::cout << "Token destructor is called." << std::endl; delete[] this->cstr; } @@ -151,7 +151,7 @@ int Token::compare(const Token& aToken) const // << operator overload // prints this token's cstr followed by its number list -ostream &operator<<(ostream &output, const Token &tokenToPrint) +std::ostream &operator<<(std::ostream &output, const Token &tokenToPrint) { // if used is 0, return empty string because we can't print anything if (tokenToPrint.size() == 0) @@ -166,7 +166,7 @@ ostream &operator<<(ostream &output, const Token &tokenToPrint) return output; } -void Token::print(ostream &output) const +void Token::print(std::ostream &output) const { output << this->cstr << " " << "(" << this->frequency << ")"; output << " " << this->number_list << endl; diff --git a/Token.h b/Token.h index b4dd441..07598b8 100644 --- a/Token.h +++ b/Token.h @@ -5,8 +5,6 @@ #ifndef TOKEN_H #define TOKEN_H -using namespace std; - class Token { private: @@ -36,9 +34,9 @@ class Token void addLineNumber(int line_num); int size() const; int compare(const Token& aToken) const; - void print(ostream &output) const; + void print(std::ostream &output) const; // >> operator overload - friend ostream &operator<<(ostream &output, const Token &tokenToPrint); + friend std::ostream &operator<<(std::ostream &output, const Token &tokenToPrint); }; #endif \ No newline at end of file diff --git a/TokenDriver b/TokenDriver index a3fd2c9661289392f96a868f916f2829a358cb1c..61766223885155388d7446b92c6809cdf53acca9 100755 GIT binary patch delta 3241 zcmZvee{56N702)O4?^k?+a%;CiJipx;X)F}sn=#9kfbq~vILJT>pw*asYu7jhL;pN z7*Wh%Qe6|xaLVYmb~RL^tfP~uMY}Z&8Cnt2uAAwKNLNuzrIqJ`)<>&VP^x9;JfCze zn*X@(e(pWzd(OM}-21G~=+zm0Bxw~UA*2wZxDgxr9lvs~!P4`@iQhK7xMJ|7_b$D- zZ{A)JuQSdV!EQ2D-MB{xUuf*6FWi087n<@-c*0FI(yc1rMG0Tna}jz>UReQ8n!2nz z8)#@u@rAdhe4#VS(~vd|mY%n2qpJCos+cntsO43Z`3*3X&{p+-aa=AM z?M^9g*OR-a7v9eC>-N_}z+4Th7o4fJy8oZsXA~gRttcZ)HMdW}o%_q$Z)-{48RDUg zZAy7*iDugjpX9ES-v_VRDObW4^Ke^-mc*TYJ18THarkb{uS&C;Qa-&sJBu%%_*%ME z^PY`RWT}u_;hPqxbxKET?F;v*Q=JCtLcgW3(`@S!qR$ulr*HRlS7w#HxYBLgX=Nuo zAJZFzysDCRY8@q=5%Fx$R(?!TT<~X0jdPNwcfamh{~GO3sBcEeLPN7HNalX!sOD{O zC=-xl{Y)MP{lf3bW*A<0OBTXV-V%8Y_UBbvUag@Zw8PiXL79fv^R`%8zZ@KOAf_pz5(8OKQr%6Qn#C0fd6S{OzbJd=3^Xgv z^D49#G|4sbk%EXU=&3}9U!%a3_i@tkO^iLIv_Mf2$e+NmqV0Lb6%?>r4Ihu-bZAP^ zRmATrj!8KfPnWFH>vW63UEUx|U_*In{eMce>{7}h?3hhoU1|$f(=O7|>U!*^vIl-w zJ|rIli_IV**~Pd7hl@40bL{3Rf!p>T`7k_C(IlO)v*Kx8ZV{AJ?v(}bd}Y*8oz@gip(`r< zxC9m4g=PG*`9Bd!TbaB>xKi zZohm6V(xPJKK#wyi0!Pq9^aw9dA%Hohnqb{xio(IzQ%b{z>VdFEdhLkovnDv@`c!o z&j`j#;L}wm#0)+~Ic_CB16Uh3@fo!Xk+Vz)3v{elH6AbusTze&%tM82A^mtcM@&M- z7NEjHAtMV>Ay3F)9xCJu8Nf}6E)vp$wP7g|GKIS(N`;J;3X!T5vb{=(U=`l)c+w&c zArp1zS1)7|?<-3K>fwF&l^;gU!LLEw+Wzs1eFKL5!6IuC^QO;(%1=KygDa#THU(`m z5)TDuz4L?kiiY9Q)v)jKA{e+-24~JrRz(Vh-Vnre^xK4@U$>^WU)(UP#rC#AFECBL z2tssfpg)E6q#NC|W21MQxM~>MIy{V>+eW=mOVB1#icO4~6g4Uy2c4$%b0cXziFVO4 zGQri$vy*4M-h211IY8QMl?Q8q19O1+oeYnQ2oIPr5ek@Ku47Iy4>4PC z_et;=b360DnFGvLEKAahGC#;B)3> zwlhD%O!o+xO)^KARpdSri1EMzyec$7yl}{&lR3z|ojJz*3+5E_hj@FFza{>sxB89a zDZEKY2LEUXGj;;@40kZ&$(qi=~gA~VjiH&5BWjn6weQ5cw7Y8 z;HPXb_uu)z9CN^<%=9t9u9#$wVNnn#nWLQ0hs-WsM4c{^u%FqcG2Qt*;AVpaOuy4O zKEQdN=1~>5lES>p+|FsK%mKE~(r3chdEUmH!bs#l#2jS3UCa^oe@5frI+5g>JC_;w o@?()^_VYbsHc-Hz_Hm>D0cP#1gZwgc1g0-E%J%rJ3y&527Z@c6d;kCd delta 3201 zcmZvedu)@}6~OPc;{t^ zwZ{u$)s|@s*i#*2R%`i%dxh|ahGzXEU9Y?rFNX{dM`;m!1bX=g12Y))`3JzI6l2;^?HKT-&xE=}8f4|(#w2g@>kSk>@< zWt)?-sy0?*$Y#OCjLq_XaN1n55;ofUTS|=}?)LF@iimt1_>!S#Hl!xBPv_?6aRZva zsY|y#9e`O|sqBUVyG!~(br!<&)NgHJObljX2= z*=<<`U(2eIb8sN5%zmPhoKPnJj0)P@@bj!E>@{CZZl%dp(3ssKFUFqC-YAzmTS37L zCA2eeE@y>xAL0yo)FN;zr@+}ltj^=kL%u|)`@FVmLBNnQG(P}$Zi8GM+nyVixvgcW za1;$p_?{&@{?VZ$nhO@?f!qNv^cqDGG z|bnSKlN%`Un@y4}x;dDuj9EZP_9F)hP*RieQ_;nI)DK0_LQSa#$xc#ww zLv51Pyi4G^;{iDct4bSWKJ=HqWcqwLEGc_Vro!Q}NQHOCu<$cfMGKFiPpxeEe_MDF zzER#RbKppMlk~#H^7U00Xn+6nG+r@0v?1oZ||}kLmLdK3GGLBD8Pl=yA8hMERr+ug3~4c0dZ%s$)`auV>zT% zdZh|2mG`=i{v8$gKKk@f_YMDuPxV{ulvB*wep;sUeHdP>d_X=8GnK9KI8;~NCm)Ak zRkxgg(^WN&qo2*sk94U`XKbTuNE0>Cj)uFQCM)MbR&SBB&|Q7OUTIkLen7j%rE9U3 zuFq2B`B+2UYZ5I_*MBHi!dvbWn7Qo@ugdFS@@$nKLXRgP-+-v6Sbh%gdg|p(nD^A; z9%>sOk_TcVjb4jvj-B~(eX4Z8t=8pD3hrS4Y9WHzLOh3k1pURaZ!Z#J8hd*&<_>!W zFT*VMQHK!e%~(#Mqix-A&?2O25hmS&8jFQ&$D*rPg^VmkiDg16%Y@LeAILI1$RK7R zoP%{4FN4SvGJ)w)3s9~Qy_N~-C`Y++w2A#d1=^{`$6hOB6pN6K{Qwtp)TUpmaHM0E zk7c%h+;%9KGN$BZsu(wweSvXP9|V`uCWFwYl*ni-q|Eyk(H2ws2iL=)D>)GSOA(y? z-FSI)xiF_hFdXw9p_w;t*wQ0zrEJ7@F2yXAd|?(5h)e`~C{oj4-@ZqDd&ISr-rfEE zIGD4TMYs@UqSPd)QC46R#$Zf_t>-Od>-#7dFCq~lkRl& z9vZI3Mrj7;R9AhZ75BYITuBRTc(_l@q#1!7UQB@In%cj8c` zM)AR&DZeY>!?8|HWG#)>E$r|YhM`}gp@<(B;_&#n)!7lOfdNO*p-Q{M;SNi8*c63d zo!cPeu;}-}VL{o$BvmZNd`U$J{CE;KBWK`1!AueF<8{g$@l9TjW4?&jEJ@1i%stF@ ztR1ut%$P@m-%s+ei136J?=3k@Fjq6{%)QJGEFWa>By)iIpUet#CT@)EMVTLD7I=F| z|Ej^mLb!Qi2R;~5z*}Spyu%z}UYo%NnO|kbyJpCbGpo!hv(DUTOX>%(B2xfQ5f76? zp18~cQDzU;1qw)IeuY`^`^v^t(Yl@4$LwZ)l$q)XIUHw>Fzd+OWB}iTA+Qung<+5% z?i%JW^IqmS^9#&6^GA!4`i|J!f9SCc>sUd^FaE0#HXJC9BzG|5%QDutFbDBPlKggN zszk(t%vAq~zsnqTB>6D2gV$e6G8}%dbhzD_l)1DZgMSvt#x>?Ro&oVZ^8j-`PEyQa zOd_qd+5O*>w{Cpl{7A)VNWW3%iaDW9C{uBRz+0G7MXQqz<4#hZg0xtz|f;r9( zK4Na?Lo}I^0SB2&491$T@Pvm25-|0C{jkFOIK#67CCSZY<^YGKGly9|&75@O=JgV0 zo%MT}!+15w-c!s`)_>VxWwTKE&P^sKzW7+oFbBEL*iy)$VtgFQ-~hAn)j>YZ9EGV% N^)e8 #include "TokenList.h" -using namespace std; - // default constructor TokenList() { diff --git a/TokenList.h b/TokenList.h index 799d473..98f1fe7 100644 --- a/TokenList.h +++ b/TokenList.h @@ -47,7 +47,7 @@ class TokenList { // member functions bool empty() const; size_t size() const; - void print(ostream &output) const; + void print(std::ostream &output) const; const Token& front() const; const Token& back() const; void addSorted(const Token& aToken); From af743b37e5d981a87b17ff1bfd6686b8108f7443 Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Thu, 26 May 2022 00:56:49 -0400 Subject: [PATCH 12/24] use std::move in move constructor and assignment operator --- ArrayList.cpp | 12 ++++++------ ArrayListDriver | Bin 58304 -> 58304 bytes Token.cpp | 13 ++++++------- Token.h | 8 ++++---- TokenDriver | Bin 60528 -> 60648 bytes TokenList.h | 4 ++-- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/ArrayList.cpp b/ArrayList.cpp index 2e29db2..dd855cb 100644 --- a/ArrayList.cpp +++ b/ArrayList.cpp @@ -28,9 +28,9 @@ ArrayList::ArrayList(const ArrayList &arrayToCopy) ArrayList::ArrayList(ArrayList&& arrayToMove) { std::cout << "Arraylist move constructor is called." << std::endl; - this->capacity = arrayToMove.capacity; - this->used = arrayToMove.used; - this->pArray = arrayToMove.pArray; + this->capacity = arrayToMove.getCapacity(); + this->used = arrayToMove.size(); + this->pArray = arrayToMove.getPArray(); arrayToMove.capacity = 0; arrayToMove.used = 0; arrayToMove.pArray = nullptr; @@ -63,9 +63,9 @@ ArrayList& ArrayList::operator=(ArrayList &&rhs) if (&rhs != this) { delete[] this->pArray; - this->capacity = rhs.capacity; - this->used = rhs.used; - this->pArray = rhs.pArray; + this->capacity = rhs.getCapacity(); + this->used = rhs.size(); + this->pArray = rhs.getPArray(); rhs.capacity = 0; rhs.used = 0; rhs.pArray = nullptr; diff --git a/ArrayListDriver b/ArrayListDriver index 4ee10aa1f0a6306e60435d3571d6c1a94c2063ff..314250b9af63bb982a49e81cf16c82025c7e632d 100755 GIT binary patch delta 1203 zcmaJ=Z)jUp6hG(XrKG;D*fPvcXEH{ z{O*9eg>-`G@YUrJ|4{mw3Hq`#{fWPNE_tLVx#s730 zl{*4Gdo}?W=HV+wA#=qr9pmLxvPWbxb@n`OVH8pWbg3haT9JciL$_k&X&UIb3V?}@rGf|}2z$zS7 zCEn#>!yIik3hBB7V#(czy1H#QoRMY;j-J-0mV)tl0qBX15xkS`>FnD3R=1dB{d|AK z<$Nytwo}e`RI(iQ`(JV-*BHvwgYzHqR&taFuQk%%q*GMx?8SMib>4*26pU?BH*f;| z7VV{}SnRfA(zErFEe%P=7B@=CS;=zPPk%OCXh_b|N3pI0uSg2_WUKUR&7zxEp=Z&p z9{yj8)*LFNneiW&s4spyhU~}U?<&gjRl1>jD}HI;(Y+KdY4An7IycCIC_$$?-2ar zyKj7AAN-*1=CP*wAio2AV9|cZ*p(jyP-Y)}=0N%ooK+v5%jNi{=J!EykaJ2RR7J=S zi6c8XS@yardtKwbsylhXrOQsG%}N$At4(VzhBQsLP%kP~I(H_Ad3*Hpgny65|ANTh zZj3)czRB{BFYrDOL$rYpdN}XZU+}Qz)nE6pMGM~~x~BQX6J37wvRO|Bc~YnVg)0dR c(P(8Dbvjbn9hQdjLc32e@}S!nD(74O0T{rN6951J delta 1174 zcmZ8ge`p(Z6o2pTQY%4{EFH1wl3af{okDY6mbn#lTUqMO5u3I~kRltCRtA|=yH*kE zGFQ+e6XG8Jrx^bbh6uLik2xlKZHKoOTsqLd{KITmI2@G||8Od~;VIfL)y&__7ynKB@)BFWF!0olXDz(d@eie|u$hrTUQX)iw&Y z=u~Ofy8bhuk|vYtD^G-fFsq3i7#e1zJfhePLe(VBJ5(sbRl zmfTP1Wb{PzMo4zOz?YtzXdsv?nayF>_lbX(8tIW?`)t_6Q=nW)%bE2l99Z?*m{#a-Joi3rgb)Fx^ z@M4Rln4D)yq8wLk%u_e_XT8AOC8lEAJhyOHj#;-*mZxYw)`O?%yVx$w(PnI?7GVH= z)6qlOc>J-m(xR=BN<-3hKieTCpO+}d{q;}D?KULG>0-Pye?~$wUWr%FxE9B}S9(&j zOtvM@wv4bXIoWj-xj%QEfu=1Ca0VK-@L{uIO(1cYdJ~VMQ9YHos3?&?DAM&X-mVUG zE&G+o2Hn$p6jy1q_p0LCp!Vd`_!YgF{1i7SZshSYoi?uE1{r;0_#vI|Tf`bYwR;TD z(Z{7z?>hT><65`55U+4Sl-4{hXIRW zfM6S-9R(;R0PF0Lt^-zdvDN=Cfx#-ad=Rb%Tgv~2J-!RYw=h?=imRDcI|ZN>rjAhG zt?e}Vb*+1C52%`*22f|x=)4qeT-QX!4sjfpTm4VgC*DRlIt#W)%yj6esOATcB+gy{kUGopspKbG|Gxi z-(D+VrFv*3=^HlqlSAI^2;TutCi!KH`dG8pI~w)N&AQTj{${g2*nIwev$kpRda`qp ue=NaryV*V7R6%YE6`ex0BpP(6c7VUxv$dg+G?dZXRe>l%u6ncfL-=n!es=%> diff --git a/Token.cpp b/Token.cpp index 9a4917e..ce054f3 100644 --- a/Token.cpp +++ b/Token.cpp @@ -42,12 +42,11 @@ Token::Token(const Token& token) Token::Token(Token&& token) { std::cout << "Token move constructor is called." << std::endl; - this->cstr = token.cstr; - this->frequency = token.frequency; - this->number_list = token.number_list; + this->cstr = token.c_str(); + this->number_list = std::move(token.number_list); + this->frequency = token.getFrequency(); token.cstr = nullptr; token.frequency = 0; - // token.number_list = nullptr; --> why is this not working? } // copy assignment operator @@ -77,9 +76,9 @@ Token& Token::operator=(Token &&rhs) if (&rhs != this) { delete[] this->cstr; - this->frequency = rhs.frequency; - this->number_list = rhs.number_list; - this->cstr = rhs.cstr; + this->frequency = rhs.getFrequency(); + this->number_list = std::move(rhs.number_list); + this->cstr = rhs.c_str(); rhs.cstr = nullptr; rhs.frequency = 0; } diff --git a/Token.h b/Token.h index 07598b8..d08037b 100644 --- a/Token.h +++ b/Token.h @@ -14,10 +14,10 @@ class Token public: // constructors - Token(); // default constructor - Token(const char* chars, int line_num); // normal constructor - Token(const Token& token); // copy constructor - Token(Token&& token); // move constructor + Token(); // default constructor + explicit Token(const char* chars, int line_num); // normal constructor + Token(const Token& token); // copy constructor + Token(Token&& token); // move constructor // assignment operators Token& operator=(const Token& rhs); // copy assignment operator diff --git a/TokenDriver b/TokenDriver index 61766223885155388d7446b92c6809cdf53acca9..a80c74f8d1cb13ad72c352abdcedafd94099a824 100755 GIT binary patch delta 4493 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 z zKz@(79rg?I6=FN_I1pmYcG&T#pGxe86NEgESc4;qyp*_$^qmI#m>rHJ8f+$m)Su*^ z68BSa+Cz+QQncSs?1dAA94B^DK<^SK%MHB=761cgl(aIPVUZOQG>}1;7&=ww(C1>iFcXgNAa;_!9%6;YKdiHVF-yH*2Mxj17ws@H zqoQnsJ!yj?j$alyK^L+9#s=O;tcao0btWw@a_RJLUhoWPo`v=tw8x7|8*AE|20db zC-J+ytWV#{qV0UOXgdFH^>u8)+_}qF-@R&e*ZSq_SFG$@?VA22(e!%ZxUlFykZ_I| delta 4350 zcmb7{4RBP|702)04*~?Un}mdXkYp2~x-nr*(jN^85$R0`MiEJUH5TdvN9sOnR{NTrS8B{Hf&e{XuJBEZX@-dHb zfCTWjfmu(BAqnUQoxDt+N;ih9V)JtRM%Sz?Qo}YJnJebcROG^&tTGOU$uW7h4BCzH+jM3_7cH5Mjrjto*qOUc--pJ>p+4i*Y z$2!t(>Qt@c0=B#Bl$kSGJwI-+FBhl!Z?(_KzTR#at1q(DKC}Ey8vFl!?i`Gp;av2F zj()8fzS5yDbkIl(uN$rDH;txoaugzk9WiQij10A8+h}XN>40bP{uTAE3g>2GHSdBF z*{P=HRCX=2cKYryuF3e5HlDuF@@G2xW6$`L)@HVwuFcQE6ar@&JzrUFrgdrI4Jw-B zl|NN~$f=cW>XV#m#{>wd7sq+k99Q|A7Ar>I-Esp3j6$$|s! z`9gGQ`d_q7r+t~+@gslctfzeGZ~BB@i|#j#;aUs|kOjjTyG={2gz7a6pIYp$uH8-R zn-2IE@2AAmyM~M`2)ZglBpxsxqh;OUHTu$$^RqoPdztz$e~#^g$?>Z39WwhqFI2+4DdVtL-BwV# z;7;%`?P|oV6&z>dfhc(KersCm?;SGQNho~|5!U@Fz3Vk&^N3bPhU|SjNu4P0$p!Je z!iX&FsDj4*Fq8D(fgZu>z0a7bc1=+7Hg$Q?`n=*w@&hTmGlFG3Y1rb&igrr5EUuSa zVwW~`xU4~zC|O=w_f@Ioa@yF2fh+r)@4$__vym)W*SPnLu~}VOzCzxjV&#o;s`{{e zW!d0qN(^M*7&4>#6C*AsjQ2~_%8IGBS4)(t__=Lov6|rN_TF=f+G$Gfmd2iIoq?9QAxIQ#IYv}tRtJoOX@*y zv3yBQy88`f-0KB&Kmd4SVOdc(kx{A3|rn-ftDqT}3pDGEik%Y}#Q- zC5;{bqC>WG8R${hO)k6oi}7R>vD7G#hE5OM?u~q@n4B z7Jaiie5)d;hl+|+R&|q1sX5g%YQra?&bQic>RqR?UHbe6Mh`91;X2iCsypP(YPfo? zyhqhcxmYe%-BY^cbL!bC7ka{9QaI8Sj#dr_xs4bgDU!w>C2KmRp}J}gy9+IgO~>fP zVCh)=d$nIWi1JtNy#%<$GNIUM-vUkbFnk8n2OWs3na7xmCp)%jJ9O z&Bg}w=Njv9h`Q;EEr0*4ZK`pSeD!c&wZ{qYRqQk}sw>JehxY$4o}RO`I9zMxY`(-j;61-Jzn~6dacj zG5Hx#wV`=3pjL${WF)SK&iO}&a7IVZnoHHT_X||;-7+=!@@{Wrg0MS6aL2w*81_XA zI+ut~9X~{W)?pWL(=I~AYFlzicN+O>TeE7za{oH589Szx+mVVhj|jNnr{Ol2XG5ec7ptXgCX8dULodKkM8iT%-SEn+@gaOt0-kP9TDm_#q-!2#xG=6^B=nRAh)WG~8m6*E#sNbE08 z@Pr5VfDB%b`$GyL=Do~FFKfLmhYd16#GGK>&75LRGb1T2{pqfZelzm3k2c)M6Cq3x zA7_p-H{w;0Ln-D5nJK|Zetd3bUGTN@GkcgcUaz*vXX2l}*rW#0G z$4s@5xS5%1B5@}()kfmw%v2+ZZ(;UixKG^46Ej#~WP|z4BO6@7yp`pD!u%BTUCe{b z4=^7k#(hYIG7iwsV;4L@ZGc0n{H?KlX%t!V4L@wHrJyInEzBr6)_Ny%0JVzbmod9p ze+@Hz8)*F(%u!EFv}e&CMx%dK6KMO<{^u^!{_kDlTZZ1qQ`=7+kr%72rx!@^AJo1-0{{R3 diff --git a/TokenList.h b/TokenList.h index 98f1fe7..c983e9b 100644 --- a/TokenList.h +++ b/TokenList.h @@ -26,7 +26,7 @@ class TokenList { private: TNode* head{ nullptr }; // points to the first node in the list TNode* tail{ nullptr }; // points to the last node in the list - size_t size{ 0 }; // counts the number of noded in the list + size_t size{ 0 }; // counts the number of nodes in the list bool remove(TNode* nodePtr); TNode* lookup(const Token& aToken) const; @@ -42,7 +42,7 @@ class TokenList { TokenList& operator=(const TokenList& rhs); // copy assignment operator TokenList& operator=(TokenList&& rhs); // move assignment operator - ~TokenList(); + ~TokenList(); // destructor // member functions bool empty() const; From ac7069c85a6f48acf209b2bc88eda3ddda418e32 Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Thu, 26 May 2022 10:28:35 -0400 Subject: [PATCH 13/24] develop more functions in TokenList --- Token.cpp | 4 +- TokenList.cpp | 107 +++++++++++++++++++++++++++++++++++++++++--------- TokenList.h | 5 ++- 3 files changed, 96 insertions(+), 20 deletions(-) diff --git a/Token.cpp b/Token.cpp index ce054f3..03d84e1 100644 --- a/Token.cpp +++ b/Token.cpp @@ -8,13 +8,15 @@ using namespace std; // default constructor Token::Token() { + std::cout << "Token default constructor is called." << std::endl; this->frequency = 0; this->cstr[0] = '\0'; } -// normal constructor +// explicit normal constructor Token::Token(const char* chars, int line_num) { + std::cout << "Token explicit normal constructor is called." << std::endl; this->cstr = new char[strlen(chars)]; for (int i = 0; i < strlen(chars); i++) { diff --git a/TokenList.cpp b/TokenList.cpp index 9f6d711..44dc148 100644 --- a/TokenList.cpp +++ b/TokenList.cpp @@ -2,47 +2,118 @@ #include "TokenList.h" // default constructor -TokenList() +TokenList::TokenList() { - + std::cout << "Tokenlist default constructor is called." << std::endl; + this->size = 0; + this->head = new TNode{}; + this->tail = new TNode{}; + this->head->next = this->tail; } // copy constructor -TokenList(const TokenList& list) +TokenList::TokenList(const TokenList& list) { + std::cout << "Tokenlist copy constructor is called." << std::endl; + this->size = list.size(); + this->head = new TNode{}; + this->tail = new TNode{}; + + TList::TNode *nodeBeingCopied = list.getHead(); + TList::TNode *newNode = this->head; + // copy the head node + addAfter(newNode, nodeBeingCopied->theToken); + + // copy the rest of the nodes + while (nodeBeingCopied != list.getTail()) + { + nodeBeingCopied = nodeBeingCopied->next; + addAfter(newNode, nodeBeingCopied->theToken); + newNode = newNode->next; + } } // move constructor -TokenList(TokenList&& list) +TokenList::TokenList(TokenList&& list) { - + std::cout << "Tokenlist move constructor is called." << std::endl; + this->size = list.size(); + this->head = std::move(list.getHead()); + this->tail = std::move(list.getTail()); + list.size = 0; } // copy assignment operator -TokenList& operator=(const TokenList& rhs) +TokenList& TokenList::operator=(const TokenList& rhs) { - + std::cout << "Tokenlist copy assignment operator is called." << std::endl; } // move assignment operator -TokenList& operator=(TokenList&& rhs) +TokenList& TokenList::operator=(TokenList&& rhs) { - + std::cout << "Tokenlist move assignment operator is called." << std::endl; } // destructor -~TokenList() +~TokenList::TokenList() { - + std::cout << "Tokenlist destructor is called." << std::endl; } -// member functions -bool empty() const; -size_t size() const; -void print(ostream &output) const; -const Token& front() const; -const Token& back() const; +// determines whether the list is empty +bool TokenList::empty() const +{ + return this->theSize == 0; +} + +// returns theSize +size_t TokenList::size() const +{ + return this->theSize; +} + +// returns head TNode +TokenList::TNode *TokenList::getHead() const +{ + return this->head; +} + +// returns tail TNode +TokenList::TNode *TokenList::getTail() const +{ + return this->tail; +} + +// returns the Token at the front of this TokenList +const Token& TokenList::front() const +{ + return this->head->theToken; +} + +// returns the Token at the back of this TokenList +const Token& TokenList::back() const; +{ + return this->tail->theToken; +} + +// Adds a new node storing aToken after the node to +// which p points. If p is nullptr, it adds the node to +// the front of the list. +void TokenList::addAfter(TNode* p, const Token& aToken) +{ + TList::TNode *newNode = new TNode{aToken}; + if (p != nullptr) + { + p.next = newNode; + } + else + { + this->head = newNode; + } +} + void addSorted(const Token& aToken); void addSorted(const string& str, int LineNum); bool removeFront(); @@ -52,4 +123,4 @@ void addFront(const Token& aToken); void addBack(const Token& aToken); bool remove(TNode* nodePtr); TNode* lookup(const Token& aToken) const; -void addAfter(TNode* p, const Token& aToken); \ No newline at end of file +void print(ostream &output) const; diff --git a/TokenList.h b/TokenList.h index c983e9b..dfa209d 100644 --- a/TokenList.h +++ b/TokenList.h @@ -26,7 +26,7 @@ class TokenList { private: TNode* head{ nullptr }; // points to the first node in the list TNode* tail{ nullptr }; // points to the last node in the list - size_t size{ 0 }; // counts the number of nodes in the list + size_t theSize{ 0 }; // counts the number of nodes in the list bool remove(TNode* nodePtr); TNode* lookup(const Token& aToken) const; @@ -47,6 +47,9 @@ class TokenList { // member functions bool empty() const; size_t size() const; + TNode *getHead() const; + TNode *getTail() const; + void print(std::ostream &output) const; const Token& front() const; const Token& back() const; From dfac1380b208d87872d9c36f8b016af90ba2aeb8 Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Thu, 26 May 2022 13:38:02 -0400 Subject: [PATCH 14/24] implement more add/remove methods in TokenList --- TokenList.cpp | 201 ++++++++++++++++++++++++++++++++++++++++++++++++-- TokenList.h | 2 +- 2 files changed, 194 insertions(+), 9 deletions(-) diff --git a/TokenList.cpp b/TokenList.cpp index 44dc148..7e97fbd 100644 --- a/TokenList.cpp +++ b/TokenList.cpp @@ -48,18 +48,80 @@ TokenList::TokenList(TokenList&& list) TokenList& TokenList::operator=(const TokenList& rhs) { std::cout << "Tokenlist copy assignment operator is called." << std::endl; + if (&rhs != this) + { + // delete old stuff + TList::TNode *oldNode = this->head; + TList::TNode *tempNode; + while (oldNode != this->tail) + { + tempNode = oldNode; + oldNode = oldNode->next; + delete[] tempNode; + } + delete this->tail; + + // copy new stuff + this->size = rhs.size(); + this->head = new TNode{}; + this->tail = new TNode{}; + + TList::TNode *nodeBeingCopied = rhs.getHead(); + TList::TNode *newNode = this->head; + + // copy the head node + addAfter(newNode, nodeBeingCopied->theToken); + + // copy the rest of the nodes + while (nodeBeingCopied != list.getTail()) + { + nodeBeingCopied = nodeBeingCopied->next; + addAfter(newNode, nodeBeingCopied->theToken); + newNode = newNode->next; + } + } + return *this; } // move assignment operator TokenList& TokenList::operator=(TokenList&& rhs) { std::cout << "Tokenlist move assignment operator is called." << std::endl; + if (&rhs != this) + { + // delete old stuff + TList::TNode *oldNode = this->head; + TList::TNode *tempNode; + while (oldNode != this->tail) + { + tempNode = oldNode; + oldNode = oldNode->next; + delete[] tempNode; + } + delete this->tail; + + // move new stuff + this->size = list.size(); + this->head = std::move(list.getHead()); + this->tail = std::move(list.getTail()); + list.size = 0; + } + return *this; } // destructor ~TokenList::TokenList() { std::cout << "Tokenlist destructor is called." << std::endl; + TList::TNode *oldNode = this->head; + TList::TNode *tempNode; + while (oldNode != this->tail) + { + tempNode = oldNode; + oldNode = oldNode->next; + delete[] tempNode; + } + delete this->tail; } // determines whether the list is empty @@ -112,15 +174,138 @@ void TokenList::addAfter(TNode* p, const Token& aToken) { this->head = newNode; } + this->size = this->size + 1; +} + +// If the list is nonempty, removes the node at the front of the list and returns true; +// otherwise, returns false +bool removeFront() +{ + if(this->head != nullptr) + { + TList::TNode *oldNode = this->head; + this->head = oldNode.next; + delete[] oldNode; + + this->size = this->size - 1; + return true; + } + else + { + return false; + } +} + +// If the list is nonempty, removes the node at the end of the list and returns true; +// otherwise, returns false +bool removeBack() +{ + if(this->tail != nullptr) + { + // get the node before tail + TList::TNode *oldNode = this->head; + while (oldNode->next != this->tail) + { + oldNode = oldNode->next; + } + delete[] this->tail; + this->tail = oldNode; + this->tail.next = nullptr; + + this->size = this->size - 1; + return true; + } + else + { + return false; + } +} + +// Removes the node to which nodePtr points and returns true; +// otherwise, returns false. +bool remove(TNode* nodePtr) +{ + if((nodePtr != this->head) && (nodePtr != this->tail)) + { + // get the Node after nodePtr + TList::TNode *nextNode = nodePtr.next; + // get the node before nodePtr + TList::TNode *oldNode = this->head; + while (oldNode->next != nodePtr) + { + oldNode = oldNode->next; + } + oldNode.next = nextNode; + delete[] nodePtr; + this->size = this->size - 1; + } + else + { + return false; + } +} + +// Adds a new node storing aToken to the front of the list +void addFront(const Token& aToken) +{ + TList::TNode *newNode = new TNode{aToken}; + if(this-> head != nullptr) + { + newNode.next = this->head; + this->head = newNode; + } + else + { + this->head = newNode; + } + this->size = this->size + 1; +} + +// Adds a new node storing aToken to the end of the list +void addBack(const Token& aToken) +{ + TList::TNode *newNode = new TNode{aToken}; + if(this-> head != nullptr) + { + this->tail.next = newNode; + this->tail = newNode; + } + else + { + this->head = newNode; + } + this->size = this->size + 1; +} + +// determines whether aToken is in the list +bool search(const Token& aToken) const +{ + TList::TNode *currentNode = this->head; + while (currentNode != nullptr) + { + Token* currentToken = currentNode.theToken; + if(aToken.compare(currentToken) == 0) + { + return true; + } + currentNode = currentNode.next; + } + return false; +} + +// Adds aToken at its sorted position into the list so +// as to maintain the ascending order of the tokens in the list +void addSorted(const Token& aToken) +{ + +} + +// Equivalent to addSorted(Token(str,lineNum)); +// but it's up to you to decide how you want to implement it. +void addSorted(const string& str, int LineNum) +{ + } -void addSorted(const Token& aToken); -void addSorted(const string& str, int LineNum); -bool removeFront(); -bool removeBack(); -bool search(const Token& aToken) const; -void addFront(const Token& aToken); -void addBack(const Token& aToken); -bool remove(TNode* nodePtr); TNode* lookup(const Token& aToken) const; void print(ostream &output) const; diff --git a/TokenList.h b/TokenList.h index dfa209d..c661099 100644 --- a/TokenList.h +++ b/TokenList.h @@ -26,7 +26,7 @@ class TokenList { private: TNode* head{ nullptr }; // points to the first node in the list TNode* tail{ nullptr }; // points to the last node in the list - size_t theSize{ 0 }; // counts the number of nodes in the list + size_t theSize{ 0 }; // counts the number of nodes in the list bool remove(TNode* nodePtr); TNode* lookup(const Token& aToken) const; From d7b5410127ecf0747fb9bfba290ec7f76e263bff Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Thu, 26 May 2022 19:32:21 -0400 Subject: [PATCH 15/24] fix bugs in TokenList --- ArrayList.cpp | 12 +-- Token.cpp | 14 +-- TokenList.cpp | 240 ++++++++++++++++++++++++++++++-------------- TokenList.h | 2 +- TokenListDriver | Bin 0 -> 81272 bytes TokenListDriver.cpp | 35 +++++++ 6 files changed, 212 insertions(+), 91 deletions(-) create mode 100755 TokenListDriver create mode 100644 TokenListDriver.cpp diff --git a/ArrayList.cpp b/ArrayList.cpp index dd855cb..1b71d89 100644 --- a/ArrayList.cpp +++ b/ArrayList.cpp @@ -4,7 +4,7 @@ // default constructor ArrayList::ArrayList() { - std::cout << "Arraylist default constructor is called." << std::endl; + // std::cout << "Arraylist default constructor is called." << std::endl; this->capacity = 1; this->used = 0; this->pArray = new int[capacity]; @@ -13,7 +13,7 @@ ArrayList::ArrayList() // copy constructor ArrayList::ArrayList(const ArrayList &arrayToCopy) { - std::cout << "Arraylist copy constructor is called." << std::endl; + // std::cout << "Arraylist copy constructor is called." << std::endl; this->capacity = arrayToCopy.getCapacity(); this->used = arrayToCopy.size(); this->pArray = new int[capacity]; @@ -27,7 +27,7 @@ ArrayList::ArrayList(const ArrayList &arrayToCopy) // move constructor ArrayList::ArrayList(ArrayList&& arrayToMove) { - std::cout << "Arraylist move constructor is called." << std::endl; + // std::cout << "Arraylist move constructor is called." << std::endl; this->capacity = arrayToMove.getCapacity(); this->used = arrayToMove.size(); this->pArray = arrayToMove.getPArray(); @@ -39,7 +39,7 @@ ArrayList::ArrayList(ArrayList&& arrayToMove) // copy assignment operator ArrayList& ArrayList::operator=(const ArrayList &rhs) { - std::cout << "Arraylist copy assignment operator is called." << std::endl; + // std::cout << "Arraylist copy assignment operator is called." << std::endl; // if the addresses are not the same, proceed with copying if (&rhs != this) { @@ -59,7 +59,7 @@ ArrayList& ArrayList::operator=(const ArrayList &rhs) // move assignment operator ArrayList& ArrayList::operator=(ArrayList &&rhs) { - std::cout << "Arraylist move assignment operator is called." << std::endl; + // std::cout << "Arraylist move assignment operator is called." << std::endl; if (&rhs != this) { delete[] this->pArray; @@ -76,7 +76,7 @@ ArrayList& ArrayList::operator=(ArrayList &&rhs) // destructor ArrayList::~ArrayList() { - std::cout << "Arraylist destructor is called." << std::endl; + // std::cout << "Arraylist destructor is called." << std::endl; delete[] this->pArray; } diff --git a/Token.cpp b/Token.cpp index 03d84e1..54a35fa 100644 --- a/Token.cpp +++ b/Token.cpp @@ -8,7 +8,7 @@ using namespace std; // default constructor Token::Token() { - std::cout << "Token default constructor is called." << std::endl; + // std::cout << "Token default constructor is called." << std::endl; this->frequency = 0; this->cstr[0] = '\0'; } @@ -16,7 +16,7 @@ Token::Token() // explicit normal constructor Token::Token(const char* chars, int line_num) { - std::cout << "Token explicit normal constructor is called." << std::endl; + // std::cout << "Token explicit normal constructor is called." << std::endl; this->cstr = new char[strlen(chars)]; for (int i = 0; i < strlen(chars); i++) { @@ -29,7 +29,7 @@ Token::Token(const char* chars, int line_num) // copy constructor Token::Token(const Token& token) { - std::cout << "Token copy constructor is called." << std::endl; + // std::cout << "Token copy constructor is called." << std::endl; this->frequency = token.getFrequency(); this->number_list = token.getNumberList(); this->cstr = new char[token.size()]; @@ -43,7 +43,7 @@ Token::Token(const Token& token) // move constructor Token::Token(Token&& token) { - std::cout << "Token move constructor is called." << std::endl; + // std::cout << "Token move constructor is called." << std::endl; this->cstr = token.c_str(); this->number_list = std::move(token.number_list); this->frequency = token.getFrequency(); @@ -54,7 +54,7 @@ Token::Token(Token&& token) // copy assignment operator Token& Token::operator=(const Token& rhs) { - std::cout << "Token copy assignment operator is called." << std::endl; + // std::cout << "Token copy assignment operator is called." << std::endl; // if the addresses are not the same, proceed with copying if (&rhs != this) { @@ -74,7 +74,7 @@ Token& Token::operator=(const Token& rhs) // move assignment operator Token& Token::operator=(Token &&rhs) { - std::cout << "Token move assignment operator is called." << std::endl; + // std::cout << "Token move assignment operator is called." << std::endl; if (&rhs != this) { delete[] this->cstr; @@ -90,7 +90,7 @@ Token& Token::operator=(Token &&rhs) // destructor Token::~Token() { - std::cout << "Token destructor is called." << std::endl; + // std::cout << "Token destructor is called." << std::endl; delete[] this->cstr; } diff --git a/TokenList.cpp b/TokenList.cpp index 7e97fbd..40cd2d4 100644 --- a/TokenList.cpp +++ b/TokenList.cpp @@ -1,26 +1,24 @@ #include +#include "Token.h" #include "TokenList.h" +#include "ArrayList.h" // default constructor -TokenList::TokenList() +TokenList::TokenList() : head{}, tail{}, theSize{} { std::cout << "Tokenlist default constructor is called." << std::endl; - this->size = 0; - this->head = new TNode{}; - this->tail = new TNode{}; - this->head->next = this->tail; } // copy constructor TokenList::TokenList(const TokenList& list) { std::cout << "Tokenlist copy constructor is called." << std::endl; - this->size = list.size(); - this->head = new TNode{}; - this->tail = new TNode{}; + this->theSize = list.size(); + this->head = new TNode(list.front()); + this->tail = new TNode(list.back()); - TList::TNode *nodeBeingCopied = list.getHead(); - TList::TNode *newNode = this->head; + TokenList::TNode *nodeBeingCopied = list.getHead(); + TokenList::TNode *newNode = this->head; // copy the head node addAfter(newNode, nodeBeingCopied->theToken); @@ -38,10 +36,10 @@ TokenList::TokenList(const TokenList& list) TokenList::TokenList(TokenList&& list) { std::cout << "Tokenlist move constructor is called." << std::endl; - this->size = list.size(); + this->theSize = list.size(); this->head = std::move(list.getHead()); this->tail = std::move(list.getTail()); - list.size = 0; + list.theSize = 0; } // copy assignment operator @@ -51,29 +49,29 @@ TokenList& TokenList::operator=(const TokenList& rhs) if (&rhs != this) { // delete old stuff - TList::TNode *oldNode = this->head; - TList::TNode *tempNode; + TokenList::TNode *oldNode = this->head; + TokenList::TNode *tempNode; while (oldNode != this->tail) { tempNode = oldNode; oldNode = oldNode->next; - delete[] tempNode; + free(tempNode); } - delete this->tail; + free(this->tail); // copy new stuff - this->size = rhs.size(); - this->head = new TNode{}; - this->tail = new TNode{}; + this->theSize = rhs.size(); + this->head = new TNode(rhs.front()); + this->tail = new TNode(rhs.back()); - TList::TNode *nodeBeingCopied = rhs.getHead(); - TList::TNode *newNode = this->head; + TokenList::TNode *nodeBeingCopied = rhs.getHead(); + TokenList::TNode *newNode = this->head; // copy the head node addAfter(newNode, nodeBeingCopied->theToken); // copy the rest of the nodes - while (nodeBeingCopied != list.getTail()) + while (nodeBeingCopied != rhs.getTail()) { nodeBeingCopied = nodeBeingCopied->next; addAfter(newNode, nodeBeingCopied->theToken); @@ -90,38 +88,38 @@ TokenList& TokenList::operator=(TokenList&& rhs) if (&rhs != this) { // delete old stuff - TList::TNode *oldNode = this->head; - TList::TNode *tempNode; + TokenList::TNode *oldNode = this->head; + TokenList::TNode *tempNode; while (oldNode != this->tail) { tempNode = oldNode; oldNode = oldNode->next; - delete[] tempNode; + free(tempNode); } - delete this->tail; + free(this->tail); // move new stuff - this->size = list.size(); - this->head = std::move(list.getHead()); - this->tail = std::move(list.getTail()); - list.size = 0; + this->theSize = rhs.size(); + this->head = std::move(rhs.getHead()); + this->tail = std::move(rhs.getTail()); + rhs.theSize = 0; } return *this; } // destructor -~TokenList::TokenList() +TokenList::~TokenList() { std::cout << "Tokenlist destructor is called." << std::endl; - TList::TNode *oldNode = this->head; - TList::TNode *tempNode; + TokenList::TNode *oldNode = this->head; + TokenList::TNode *tempNode; while (oldNode != this->tail) { tempNode = oldNode; oldNode = oldNode->next; - delete[] tempNode; + free(tempNode); } - delete this->tail; + free(this->tail); } // determines whether the list is empty @@ -155,7 +153,7 @@ const Token& TokenList::front() const } // returns the Token at the back of this TokenList -const Token& TokenList::back() const; +const Token& TokenList::back() const { return this->tail->theToken; } @@ -165,29 +163,30 @@ const Token& TokenList::back() const; // the front of the list. void TokenList::addAfter(TNode* p, const Token& aToken) { - TList::TNode *newNode = new TNode{aToken}; + TokenList::TNode *newNode = new TNode(aToken); if (p != nullptr) { - p.next = newNode; + p->next = newNode; } else { this->head = newNode; + this->tail = newNode; } - this->size = this->size + 1; + this->theSize++; } // If the list is nonempty, removes the node at the front of the list and returns true; // otherwise, returns false -bool removeFront() +bool TokenList::removeFront() { if(this->head != nullptr) { - TList::TNode *oldNode = this->head; - this->head = oldNode.next; + TokenList::TNode *oldNode = this->head; + this->head = oldNode->next; delete[] oldNode; - this->size = this->size - 1; + this->theSize--; return true; } else @@ -198,21 +197,21 @@ bool removeFront() // If the list is nonempty, removes the node at the end of the list and returns true; // otherwise, returns false -bool removeBack() +bool TokenList::removeBack() { if(this->tail != nullptr) { // get the node before tail - TList::TNode *oldNode = this->head; + TokenList::TNode *oldNode = this->head; while (oldNode->next != this->tail) { oldNode = oldNode->next; } delete[] this->tail; this->tail = oldNode; - this->tail.next = nullptr; + this->tail->next = nullptr; - this->size = this->size - 1; + this->theSize--; return true; } else @@ -223,21 +222,22 @@ bool removeBack() // Removes the node to which nodePtr points and returns true; // otherwise, returns false. -bool remove(TNode* nodePtr) +bool TokenList::remove(TNode* nodePtr) { if((nodePtr != this->head) && (nodePtr != this->tail)) { // get the Node after nodePtr - TList::TNode *nextNode = nodePtr.next; + TokenList::TNode *nextNode = nodePtr->next; // get the node before nodePtr - TList::TNode *oldNode = this->head; + TokenList::TNode *oldNode = this->head; while (oldNode->next != nodePtr) { oldNode = oldNode->next; } - oldNode.next = nextNode; - delete[] nodePtr; - this->size = this->size - 1; + oldNode->next = nextNode; + free(nodePtr); + this->theSize--; + return true; } else { @@ -246,66 +246,152 @@ bool remove(TNode* nodePtr) } // Adds a new node storing aToken to the front of the list -void addFront(const Token& aToken) +void TokenList::addFront(const Token& aToken) { - TList::TNode *newNode = new TNode{aToken}; - if(this-> head != nullptr) + TokenList::TNode *newNode = new TNode(aToken); + if(this->head != nullptr) { - newNode.next = this->head; + newNode->next = this->head; this->head = newNode; } else { - this->head = newNode; + this->head = this->tail = newNode; } - this->size = this->size + 1; + this->theSize++; } // Adds a new node storing aToken to the end of the list -void addBack(const Token& aToken) +void TokenList::addBack(const Token& aToken) { - TList::TNode *newNode = new TNode{aToken}; - if(this-> head != nullptr) + TokenList::TNode *newNode = new TNode(aToken); + if(this->tail == nullptr) { - this->tail.next = newNode; - this->tail = newNode; + this->head = this->tail = newNode; } else { - this->head = newNode; + this->tail->next = newNode; + this->tail = newNode; } - this->size = this->size + 1; + this->theSize++; } // determines whether aToken is in the list -bool search(const Token& aToken) const +bool TokenList::search(const Token& aToken) const { - TList::TNode *currentNode = this->head; + TokenList::TNode *currentNode = this->head; while (currentNode != nullptr) { - Token* currentToken = currentNode.theToken; - if(aToken.compare(currentToken) == 0) + if(currentNode->theToken.compare(aToken) == 0) { return true; } - currentNode = currentNode.next; + currentNode = currentNode->next; } return false; } // Adds aToken at its sorted position into the list so // as to maintain the ascending order of the tokens in the list -void addSorted(const Token& aToken) +void TokenList::addSorted(const Token& aToken) { - + ArrayList list = aToken.getNumberList(); + int line_number; + list.get(list.size() - 1, line_number); // never returns false here (why?) + addSorted(aToken.c_str(), line_number); } // Equivalent to addSorted(Token(str,lineNum)); -// but it's up to you to decide how you want to implement it. -void addSorted(const string& str, int LineNum) +void TokenList::addSorted(const std::string& str, int lineNumber) { + Token aToken(str.c_str(), lineNumber); // create a node with str and lineNumber + TNode* nodePtr = lookup(aToken); // look it up in the list + + // should aToken be the first node? + // lookup provides this information by returning nullptr + if (nodePtr == nullptr) + { + addFront(aToken); + return; // done + } + + // aToken cannot be the first token; + // hence, whether or not aToken is already in the list, + // nodePtr must point to one of the nodes in the list, + // including the first, last, and the nodes in between. + // could it be that nodePtr's token is equal to aToken? + if ((nodePtr->theToken).compare(aToken) == 0) + { + // yes, we have a repeated token, so we only add its line number + (nodePtr->theToken).addLineNumber(lineNumber); + return; // done + } + else + { + // we have a new token, + // so we add it to the list after the node nodePtr is pointing at. + addAfter(nodePtr, aToken); + return; // done + } +} +// If aToken is in the list, it returns a pointer to the node whose token +// is equal to aToken; otherwise, it returns a pointer to the node after +// which aToken would be inserted in the sorted list. +TokenList::TNode* TokenList::lookup(const Token& aToken) const +{ + if (head == nullptr) + { + return nullptr; // nullptr means that aToken must be the first node + } + + // list has more than one node. + // should aToken go before the first node? + // that is, is aToken strictly less than the head node? + if (aToken.compare(head->theToken) < 0) + { + return nullptr; // nullptr means that aToken must be the first node + } + + // so aToken does not become the first node. + // We set out to locate and return either + // (1) a pointer to the node whose token is equal to aToken, or + // (2) a pointer to the node after which aToken would be inserted + // if the list were to remain in the sorted order. + TNode* prev = head; // may or may not be the node of interest + TNode* current = head->next; // ->next works because head is not nullptr + while (current != nullptr) + { + // we know the list is sorted and there are no repeated tokens. + // we want to skip all the nodes that are smaller than aToken. + // that is, we are looking for the first node strictly larger than aToken + if ((current->theToken).compare(aToken) > 0) + { + return prev; // aToken goes between the prev and current nodes, + // unless prev's token is equal to aToken, addSorted will sort this out! + } + // no luck! so we advance to the next node + prev = current; // update prev + current = current->next; // again, ->next works because current is not nullptr + } + return nullptr; } -TNode* lookup(const Token& aToken) const; -void print(ostream &output) const; +// prints the entire list to sout +void TokenList::print(std::ostream &output) const +{ + if(this->theSize == 0) + { + std::cout << "empty TokenList" << std::endl; + } + else + { + TokenList::TNode *current = this->head; + do + { + current->theToken.print(output); + current = current->next; + } while (current != this->tail); + } +} diff --git a/TokenList.h b/TokenList.h index c661099..019cde7 100644 --- a/TokenList.h +++ b/TokenList.h @@ -54,7 +54,7 @@ class TokenList { const Token& front() const; const Token& back() const; void addSorted(const Token& aToken); - void addSorted(const string& str, int LineNum); + void addSorted(const std::string& str, int LineNum); bool removeFront(); bool removeBack(); bool search(const Token& aToken) const; diff --git a/TokenListDriver b/TokenListDriver new file mode 100755 index 0000000000000000000000000000000000000000..5edbb93dd99a64f4e3ff32593c1af5ccfd17da38 GIT binary patch literal 81272 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 UsBmgvau$ZQ#BCU~)4tPx0~qynhyVZp literal 0 HcmV?d00001 diff --git a/TokenListDriver.cpp b/TokenListDriver.cpp new file mode 100644 index 0000000..4b9e79a --- /dev/null +++ b/TokenListDriver.cpp @@ -0,0 +1,35 @@ +#include +#include "TokenList.h" + +using std::cout; +using std::endl; + +int main() +{ + TokenList bucket; + Token t1("Hello", 1); + bucket.addSorted(t1); + // bucket.addFront(t1); + // bucket.addBack(t1); + Token t2("Hello", 11); + bucket.addSorted(t2); + // bucket.addFront(t2); + // bucket.addBack(t2); + Token t3("Hello", 111); + bucket.addSorted(t3); + // bucket.addFront(t3); + // bucket.addBack(t3); + Token tArray[]{ Token("How", 1), Token("are", 11), Token("you", 2), + Token("today?", 22), Token("#tag", 3), Token("bye", 3) }; + + for (Token t : tArray) + { + bucket.addSorted(t); + // bucket.addBack(t); + // bucket.addFront(t); + } + bucket.print(cout); // ideally we prefer cout << bucket << endl; + cout << endl; + cout << "Success!" << endl; + return 0; // 0 means success! +} \ No newline at end of file From dd80b2a9ba3b2b49c940777099dba09a7c0f3dde Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Thu, 26 May 2022 21:51:43 -0400 Subject: [PATCH 16/24] fix error in addAfter --- TokenList.cpp | 48 ++++++++++++++++++++++---------------------- TokenListDriver | Bin 81272 -> 81288 bytes TokenListDriver.cpp | 7 +++++++ 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/TokenList.cpp b/TokenList.cpp index 40cd2d4..3d6ec04 100644 --- a/TokenList.cpp +++ b/TokenList.cpp @@ -166,6 +166,8 @@ void TokenList::addAfter(TNode* p, const Token& aToken) TokenList::TNode *newNode = new TNode(aToken); if (p != nullptr) { + // new Node points to what p was previously pointing to + newNode->next = p->next; p->next = newNode; } else @@ -341,39 +343,35 @@ void TokenList::addSorted(const std::string& str, int lineNumber) // which aToken would be inserted in the sorted list. TokenList::TNode* TokenList::lookup(const Token& aToken) const { + // nullptr means that aToken must be the first node if (head == nullptr) { - return nullptr; // nullptr means that aToken must be the first node + return nullptr; } - - // list has more than one node. - // should aToken go before the first node? - // that is, is aToken strictly less than the head node? + // aToken should be placed at head if (aToken.compare(head->theToken) < 0) { - return nullptr; // nullptr means that aToken must be the first node + return nullptr; } + + // aToken is equal to head + if (aToken.compare(head->theToken) == 0) + { + return this->head; + } + + TokenList::TNode* prev = head; + TokenList::TNode* current = head->next; - // so aToken does not become the first node. - // We set out to locate and return either - // (1) a pointer to the node whose token is equal to aToken, or - // (2) a pointer to the node after which aToken would be inserted - // if the list were to remain in the sorted order. - TNode* prev = head; // may or may not be the node of interest - TNode* current = head->next; // ->next works because head is not nullptr while (current != nullptr) - { - // we know the list is sorted and there are no repeated tokens. - // we want to skip all the nodes that are smaller than aToken. - // that is, we are looking for the first node strictly larger than aToken + { + std::cout << "iter" << std::endl; if ((current->theToken).compare(aToken) > 0) - { - return prev; // aToken goes between the prev and current nodes, - // unless prev's token is equal to aToken, addSorted will sort this out! + { + return prev; } - // no luck! so we advance to the next node - prev = current; // update prev - current = current->next; // again, ->next works because current is not nullptr + prev = current; + current = current->next; } return nullptr; } @@ -388,10 +386,12 @@ void TokenList::print(std::ostream &output) const else { TokenList::TNode *current = this->head; + int counter = 0; do { current->theToken.print(output); current = current->next; - } while (current != this->tail); + counter++; + } while (theSize != counter); } } diff --git a/TokenListDriver b/TokenListDriver index 5edbb93dd99a64f4e3ff32593c1af5ccfd17da38..0d6050c28d17180d79f47cfa58bdaff3b2426f65 100755 GIT binary patch delta 9618 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 T-Lkr}^6JWQW?xC3Hthcarv;zj delta 9411 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 diff --git a/TokenListDriver.cpp b/TokenListDriver.cpp index 4b9e79a..9d30d85 100644 --- a/TokenListDriver.cpp +++ b/TokenListDriver.cpp @@ -7,18 +7,25 @@ using std::endl; int main() { TokenList bucket; + + std::cout << "Token 1:" << std::endl; Token t1("Hello", 1); bucket.addSorted(t1); // bucket.addFront(t1); // bucket.addBack(t1); + + std::cout << "Token 2:" << std::endl; Token t2("Hello", 11); bucket.addSorted(t2); // bucket.addFront(t2); // bucket.addBack(t2); + + std::cout << "Token 3:" << std::endl; Token t3("Hello", 111); bucket.addSorted(t3); // bucket.addFront(t3); // bucket.addBack(t3); + Token tArray[]{ Token("How", 1), Token("are", 11), Token("you", 2), Token("today?", 22), Token("#tag", 3), Token("bye", 3) }; From 07b26ebf2a7376b1958dd43994eb9268bece9b5e Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Thu, 26 May 2022 23:55:20 -0400 Subject: [PATCH 17/24] finish token list driver --- Token.cpp | 2 +- TokenList.cpp | 54 ++++++++++++++------------------------------ TokenListDriver | Bin 81288 -> 81272 bytes TokenListDriver.cpp | 3 --- 4 files changed, 18 insertions(+), 41 deletions(-) diff --git a/Token.cpp b/Token.cpp index 54a35fa..b475b31 100644 --- a/Token.cpp +++ b/Token.cpp @@ -138,7 +138,7 @@ int Token::compare(const Token& aToken) const { if(strcmp(this->cstr, aToken.c_str()) < 0) { - return 1; + return -1; } else if(strcmp(this->cstr, aToken.c_str()) == 0) { diff --git a/TokenList.cpp b/TokenList.cpp index 3d6ec04..9c6dcf5 100644 --- a/TokenList.cpp +++ b/TokenList.cpp @@ -169,6 +169,10 @@ void TokenList::addAfter(TNode* p, const Token& aToken) // new Node points to what p was previously pointing to newNode->next = p->next; p->next = newNode; + if(this->tail == p) + { + this->tail = newNode; + } } else { @@ -304,37 +308,25 @@ void TokenList::addSorted(const Token& aToken) addSorted(aToken.c_str(), line_number); } -// Equivalent to addSorted(Token(str,lineNum)); void TokenList::addSorted(const std::string& str, int lineNumber) { - Token aToken(str.c_str(), lineNumber); // create a node with str and lineNumber - TNode* nodePtr = lookup(aToken); // look it up in the list + Token aToken(str.c_str(), lineNumber); // create a node with str and lineNumber + TokenList::TNode* nodePtr = lookup(aToken); // look it up in the list - // should aToken be the first node? - // lookup provides this information by returning nullptr + // if nullptr, should be first node if (nodePtr == nullptr) { addFront(aToken); - return; // done } - - // aToken cannot be the first token; - // hence, whether or not aToken is already in the list, - // nodePtr must point to one of the nodes in the list, - // including the first, last, and the nodes in between. - // could it be that nodePtr's token is equal to aToken? - if ((nodePtr->theToken).compare(aToken) == 0) + // if same node, should add line number + else if ((aToken).compare(nodePtr->theToken) == 0) { - // yes, we have a repeated token, so we only add its line number (nodePtr->theToken).addLineNumber(lineNumber); - return; // done } + // else, add new node where appropriate else { - // we have a new token, - // so we add it to the list after the node nodePtr is pointing at. addAfter(nodePtr, aToken); - return; // done } } @@ -344,36 +336,24 @@ void TokenList::addSorted(const std::string& str, int lineNumber) TokenList::TNode* TokenList::lookup(const Token& aToken) const { // nullptr means that aToken must be the first node - if (head == nullptr) - { - return nullptr; - } - // aToken should be placed at head - if (aToken.compare(head->theToken) < 0) + if (head == nullptr || (aToken).compare(this->head->theToken) < 0) { return nullptr; } - // aToken is equal to head - if (aToken.compare(head->theToken) == 0) - { - return this->head; - } - - TokenList::TNode* prev = head; - TokenList::TNode* current = head->next; + TokenList::TNode* prev = this->head; + TokenList::TNode* current = this->head->next; while (current != nullptr) - { - std::cout << "iter" << std::endl; + { if ((current->theToken).compare(aToken) > 0) { return prev; } - prev = current; + prev = current; current = current->next; - } - return nullptr; + } + return this->tail; } // prints the entire list to sout diff --git a/TokenListDriver b/TokenListDriver index 0d6050c28d17180d79f47cfa58bdaff3b2426f65..b74d21e62c2f0de762ac022e5497936d2756a7d2 100755 GIT binary patch delta 9404 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 Rs Date: Fri, 27 May 2022 00:03:08 -0400 Subject: [PATCH 18/24] begin Dictionary class --- Dictionary.cpp | 0 Dictionary.h | 27 +++++++++++++++++++++++++++ DictionaryDriver.cpp | 17 +++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 Dictionary.cpp create mode 100644 Dictionary.h create mode 100644 DictionaryDriver.cpp diff --git a/Dictionary.cpp b/Dictionary.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Dictionary.h b/Dictionary.h new file mode 100644 index 0000000..e88e498 --- /dev/null +++ b/Dictionary.h @@ -0,0 +1,27 @@ +#include +#include "TokenList.h" + +#ifndef DICTIONARY_H_ +#define DICTIONARY_H_ + +using std::string; + +class Dictionary +{ + private: + string filename; + TokenList tokenListBuckets[27]; // 26 alpha buckets + 1 none-alpha bucket + size_t bucketIndex(const string& token) const; + + public: + Dictionary(const string& filename); + void processToken(const string& token, int linenum) ; + void print(ostream& out) const; + Dictionary() = delete; // no default ctor + ~Dictionary() = default; // default dtor + Dictionary(const Dictionary& ) = default; // copy ctor + Dictionary( Dictionary&&) = default; // move ctor + Dictionary& operator=(const Dictionary&) = default; // copy assignment + Dictionary& operator=( Dictionary&&) = default; // move assignment +}; +#endif \ No newline at end of file diff --git a/DictionaryDriver.cpp b/DictionaryDriver.cpp new file mode 100644 index 0000000..c4f1fc4 --- /dev/null +++ b/DictionaryDriver.cpp @@ -0,0 +1,17 @@ +#include +#include +#include "Dictionary.h" + +using std::cout; +using std::cin; +using std::string; + +int main() +{ + cout << "Enter the name of input text file: " ; + string filename; + cin >> filename; + Dictionary dictionary(filename); + dictionary.print(cout); + return 0; // 0 means success! +} \ No newline at end of file From 00c76341a766fd4db84155d60e79d9f4b11ed87b Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Fri, 27 May 2022 01:53:11 -0400 Subject: [PATCH 19/24] finish dict driver --- ArrayListDriver | Bin 58304 -> 0 bytes Dictionary.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++++ Dictionary.h | 11 +++++--- DictionaryDriver | Bin 0 -> 123184 bytes TokenDriver | Bin 60648 -> 0 bytes TokenList.cpp | 16 +++++------ TokenListDriver | Bin 81272 -> 0 bytes input.txt | 48 +++++++++++++++++++++++++++++++++ test | Bin 56096 -> 0 bytes test.cpp | 21 --------------- 10 files changed, 131 insertions(+), 33 deletions(-) delete mode 100755 ArrayListDriver create mode 100755 DictionaryDriver delete mode 100755 TokenDriver delete mode 100755 TokenListDriver create mode 100644 input.txt delete mode 100755 test delete mode 100644 test.cpp diff --git a/ArrayListDriver b/ArrayListDriver deleted file mode 100755 index 314250b9af63bb982a49e81cf16c82025c7e632d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58304 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 Xom#Hi10?vu6MOZoSW(a+3O@f2=Z +#include +#include +#include "Dictionary.h" + +// constructor +Dictionary::Dictionary(const string& filename) : filename(filename) +{ + // create an input file stream + std::ifstream fin(filename); + if (!fin) + { + std::cout << "could not open input file: " << filename << std::endl; + exit(1); + } + int linenum = 0; + string line; + getline(fin, line); // very important first attempt to read + + // this first attemot will get the i/o flags initialized + while (fin) + { + // std::cout << line << std::endl; + ++linenum; // count the line + std::istringstream sin(line); // turn the line into an input string stream + string tokenStr; + while (sin >> tokenStr) // extract token strings + { + // std::cout << tokenStr << std::endl; + processToken(tokenStr, linenum); + } + getline(fin, line); // attempt to read the next line, if any + } + fin.close(); +} + +void Dictionary::processToken(const string& token, int linenum) +{ + size_t index = bucketIndex(token); + this->tokenListBuckets[index].addSorted(token, linenum); + // char* cstr = (char *) &token; + // Token newToken = Token(cstr,linenum); + // this->tokenListBuckets[index].addSorted(newToken); +} + +void Dictionary::print(std::ostream& output) const +{ + char c = 'A'; + for (const TokenList &t : this->tokenListBuckets) + { + std::cout << "<<<< " << c << " >>>>" << std::endl; + std::cout << std::endl; + c++; + t.print(output); + std::cout << std::endl; + } +} + +size_t Dictionary::bucketIndex(const string& token) const +{ + size_t index = 26; // bucket index for tokens not beginning with a letter + if (isalpha(token[0])) + { + if(isupper(token[0])) index = token[0] - 'A'; + else index = token[0] - 'a'; + } + return index; +} \ No newline at end of file diff --git a/Dictionary.h b/Dictionary.h index e88e498..d01e4a6 100644 --- a/Dictionary.h +++ b/Dictionary.h @@ -15,13 +15,18 @@ class Dictionary public: Dictionary(const string& filename); - void processToken(const string& token, int linenum) ; - void print(ostream& out) const; Dictionary() = delete; // no default ctor ~Dictionary() = default; // default dtor Dictionary(const Dictionary& ) = default; // copy ctor - Dictionary( Dictionary&&) = default; // move ctor + Dictionary(Dictionary&&) = default; // move ctor Dictionary& operator=(const Dictionary&) = default; // copy assignment Dictionary& operator=( Dictionary&&) = default; // move assignment + + void processToken(const string& token, int linenum); + void print(std::ostream& out) const; + + string getFilename() const; + TokenList getTokenListBuckets() const; + size_t getBucketIndex(const string& token) const; }; #endif \ No newline at end of file diff --git a/DictionaryDriver b/DictionaryDriver new file mode 100755 index 0000000000000000000000000000000000000000..3446dc94963144436855a9373c1ecdcbbfaf4e04 GIT binary patch literal 123184 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
NbL>} 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 QGVbjygNdpG_yS7&FLh3KTL1t6 literal 0 HcmV?d00001 diff --git a/TokenDriver b/TokenDriver deleted file mode 100755 index a80c74f8d1cb13ad72c352abdcedafd94099a824..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60648 zcmeHv4SZZxweOyMHEDrKv0@Rf9ZC@@S|(|xw3c$G9|s27l+ZR$<%%cM$)p{ae2|%x zR;^4;`+J!V!Qe&U3Hl2#I}r&xsq3+L*XEcNRVeR+A6N43WDb)yGgPv?oPH!v-x`i~ zgge1hC~uJE9cBSU6Ykbkq~DfMNDprhg*)PUJh-_~-shJq{k+@=MCZw~1gn6qhhp*0 zNZS^UFO+xhMM~ZoEQDzLRVZ86yV|agv^DFIww87<7RnpGSjk(;`Vn0y!!Dof9s`ujB~4T7i3A{-! z1Gkc6OGp&x1zKKy^)mG`>#Xb1pdQ=Ny16~7cf>oVl{ccY3$j*{VP5E~VxCFht?SLf zcrX`HsNYCJ=~u}tMBC-%a;i|SzpuM&{aS6!WeR;Eh6?Hlnl9s`>P@(F6U&JC(A-O* zA=Mt$c=v(q$J+p7&q4SDC^GOvAtum437@&Rn;sJaQR4PdAsXfgF$>`a+;n}8?^?XS zjhpzVy9SO5v22ROQxNCDeG={qx?-IdL?fFoXxO(Dy-1Bym4AE!lLy9E3vVjySL~jilc0zm_(HUcW5vc$=)s+b(4;m+t z&;nuZd49q2s%6Dk-ehAItkqW^a?dlTYpirH@PB48k|FOx>PjAIAL_t~qP6w{NO^7v>bj__mPY zBB=9A?FJ)RLOAVL^Ie(DP{7)bl& zq|h`EW$=0SVY7E*wZalsI#qqhUhb2<)9fauy*x_IN%nH8s?R@4uC(#Wn^d3rOki1k z*1h{7sT5TIG{Kg$oU2WeYIY^M=Nk~#IO^U_^C(nk6urUt@%b{G353MIQS}0^KjU}z z9SNilKxgXe2f*d;={joMBRNs%TiezQD)ks_YYc^v78zw^w*Kt_9^a5Xr4Wzbz=CD_ zmPlQE-I6P9{KubV#SMiAEl434?gVDt{U?c_RcWZ7Hhzg2r)=zxNW-vf;e3;1TUgHY zvDpF@DZN%+f9W3gDt|=2XvL4nLVJCGFDs&Djb)?>{0^hxyHEPlorY13Dwz<$VNO?* zS(IP)Qq+rD*PulX`>O_H0#nyOvTT9zGyuv_4bc4^0{RkqJvZLfMtZp=H zSri7Aw9!okNt>&OT5>G(=lAv;e%WLfTr&KLW{^_QFQam1mai;x_tr^8rPEgMbQ#Ob zzN_#%qD{KSJ^%)38ptKJG{zo*$22GM^@brE2u{s^cXYGB}8b#vK*#uoDMSA826FAauIk>C{xKF zpJ@JL4ZPX}kAezhH4+lYw&H;c4S$VPZzF}ZpDO-Q^cdr-Aag_FBUHSam*o1xuJL}V zidkf`5wLVk1bTOl8nwtR8%k0yV1Cu3JtQOcY7gymx%Xf-D#oIS=PZLp6?`xafwFeC zsS8b%_8Dg&HL2Y#MWnR5&ly1e?g@{34`wsS2JA~|(x%-$R%u3nKmu;e(NfUO^#oq< zM74p`Hc&4Il1GuD4_>tgHj*$#v7+wTa|3FsG*9gu+$+g7?)}5iY#*}sL0Zqcl$J0) zPP!-ebmZ7&7!rq2=ON<_NV6*X1*H=TujDD&egc5H&&%MG<&Awx#%LqS#-EH;=fV;} zV*%B2=ZJ9@TnKc4q}hSg23e`(u^6rU42MZiJInX#FPO$ zRHd?vC(T@DwMUE#5#^pm){y*46G^`JjmgQ}0B-e%oIkw-Iba}iHoAuAgFOG)TWPw| zoCG;v*friKtI1u8`f0L$bRE=M(^LO=pnGSwuy5^`21Bk34s;>h55Oi=p2nUCh(WaX zU|_j6g$W3k3y|`=OFSwEG2ghy7xCe9_WSb5rQz5UJ|3ad?Jwi{&tCe+PFtX zH$rWWI$|uAH7Pc$<=UWoH|9V^I;6E8C?Uqqq%@dwvhhY(%=|&rQn*ODkJLe5+<*wH&(fA2wb_0T0>&dKSGs}5Y;vzOTN+Y&DCFM%L~?|6%A5bNK7sC~ zQ_m+@A9KEdX#;eqg<~kJAon*@Udlf=e}J{-3!Z#ujCx9kN{$&rUwZP&CW!W2eaJqZ z0gJ9|PveWIt7M1mzGy_L@`e81!jIN})TU53M(?+157~C4M_?|RA9|1(AdIokUI$)3 zcuoDKKGaMY4$&2R$u(es2(N}Vk;~~(spogGsg2@ksb(#{3+H20KR9@ltttp3HjG(T z1#{zB_jrR@zTzhZ4v-C?@DZp#Y|sn^5z_M*7fJ#tm<)hp&^S${4uTjk7OD~&a_e($ zKj^CP$6Nwod->HUp9Vk_m^S1y+%1C}PySKey;d~5vy(|ORTs6CQ9-%NH*q_j7eYZFtgR|YZ4 zOxo8k-Q#|$50*SwVdfvzgxlQiNL3zjv8sjR6ZMCGp&`9s{?k3)WZF-%k=8xZopc{S9jJ^E=~3<) zr*hB*KSerXLc@lHDdYtzX3#V(I2uf5lGxrFg`(KTqTyOPrvc*(#k4^^jV zMU^&Yy<|?4yAL{tg54%UHt!Hf69duWKlcDsVb9HnGea=YvXWhfR1!Q}u_FSo;w0bOsIy z7R;l8?jbTW^pQbhBg`Ntg?wF7dq75{v%#7WoTF^)~VyTa=T=^nYuOMmNhdX2w8OCSkQWF)--+6vjw4co5%e3<; zP7jn*zp;BLOFp%KRvI7XK&Xr1-pvzpjK)ii7HE^y-W;Qio3!>Oo`B~~s0+g=_IJ`Y zq#w>JEZ@J7PFx?FC>Z}l`&iS=PweA;Vdqr#Rz4=}?GzXq>}?qKZF~`X5O#ZeLwUPl zX(Hr_$40{niVdMezky+O?J z*BeNclb6qBGxu-z%U*!}+YKlj-SQWb3%f;XUy=83ez!FVnzJW5MYtja&**Dk8zWKCdq4C*eKO>;-_@og)wp9I- zv_*qGXC-R46jeX29487U$2l$?r+HfNFk0Gdp$uBVYr~W9c>-2bjL$GkpC-gctyIZ( zzvN0AA+^8F`?rk{oRI2e%|Y_!>#|R-pv^RNlGA0yu;cY9^mKHTQO3si z1f{320gK!r!2QfLv;+ zggUu1qq2`08mbDlKp!z;@1q?n;qIj~2zWbqcQN+&3TpUsGw%qEAt$SR2p=()bG|*C z4>^SCF-eB@0iBr5^c{5}b?^iAdFYi~b0s~=-I%2-K6P__`M3GGU zmeio`{dJYbby!@`nAz+50<6;bG|1fM<=x~ANkXr$iBc~nX1i5l68baac8RrZn?UuY zBLA-DgYZ+mU9Ue(2pGS@CZKZidFyX;J!GvxsSbby?fNL?km^1TQ!~D8k=sbWuM-LV zQrA^dWv{bRucFk1OqI3yva<1v5#=0KKa(|5{>pchTp;B9_X)sYvmf@q)9#O%>lOQW z_O9-Kz)PT-w*3!8Otb%y`fKfflsNkzXzyd*|2PFr=yJ2i+-eijnY!zr?V~N%V0OBa1~M@ogrZ)p92;-L5 zOh$^L?M7o)Uex6j)s`3aX^Q#>D=M|(ODF+axuKO&YL$`lT`%LI&M7u^He2faJEoIL z$=;p&Fj*Kier0W1kTzS+hrCz*%TzG6;#^hEcc7+mhm|?ybDQPd^Lmc?4QQjPy)DPO z;yH<`FHRypnTz-RM8@yjXM}7b99C z4DE9p2@hF0Qof@yerJ!ZeN!tAB2wXYvBe6R#x+VfW|v2d{kF<~SqWc7!YiyCDc@(6 z@KIy7P4loN{2A;isLG?Mje2Z_z{cq)lOxrETk3oAbhGU@W_)VJd{y3WV7|t!mXMTh zri_=_jGJ(LY9jkG6jSwSGr7$k*sHh`PgAEt6}Mm$7=eApXH;O+XheYK@8&5j#w>aK zEBCuOd>*wRhp`ke!vU5)-;`cuN*AW|*8!t+f?Kf*WZwX=&L7~kY~#cK>-p%fY3gU6 zj~+yXGavo`={#;emI=;$)LMUgocSmn+D+qc%=IlzoM^V7W;D6=KKmmpzxh3(wVuab zLH=hj$9x|5)X~50eDq~G3?KV^bS6f_>E@#^C|McfW(11oqu0UNE3*TvaSPVm-kt4y zygE03KB4oqEmkpoljmeKAtujxRz9DT&*$aSkk9{=&vE&DK|Ztc`LcYzDxa^(=Y)K| zA)jx`=U?PgTtf0oBxTUdCUv8uBOma6r$RU{hUIB6dI;bDH>#KKZX1hdVoSVQ0Q9}I!vK{3RPfVe(Y8X zt)$S66uO#1U!>5T6xvRqA5f@`LPsgoOre)3bQOhAtQc#cP!)Y1b_s>%Qs^RtChs`e zRaWh7mH)K>#>qQsTpvE8YP7_)@SjVbD{=j-1k;C9srzuL_-bj55Ra9X|E|VyzHsf9p!m z5Z@^|Qu2!#;*GLl*KcQtbj8X)%n&^@?u6PBkGGJsva>UYe~OF6JZ}4uC*V(EoDNMYIPiV*1}{fsNoB@%E!b z4B?%D&{4bx=!hC`4^E{g@NV$ne@HI^&wRw;P5*FNhj->xXHsjra zK6fMD)yssq6L0tc{BP%n#BQk?_{xQ=xH<#*>a{Pw&~*g?QSz(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4 zz(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4 zz(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(K%4z(L?|6@l6FE3Z6TG|gGH zNohFSuj^N>-xy!4>os+u_O7@luIv%zM~_2SxBpmG;1PJDbt#R4ckPl-_<`c z$(KvUw*^~8L7cv2`*yt}+! z1=rMswgx-(cxNyYkD>gUn(%dcq%E$KK3XIqu8hsKD_Y3EINaW%ZOf}mA( ztJbhKl*d>K+d$EaHwR;pklr4PcZP$l zmu=EFd381e+RhfkDmAG`;GJjowM4sOTUFT& z?>zgGShy|Txnp&WwqfI9ov`@iaSJgaXnN-oqA@K(g?HGqvZa_}x7*V!!&nR_7YoN> zB+Z*6aXkpj3$?e!BJe$WXE?sKv;BGnPQo>1eqSgW4t8qSQ0ccTmW}ac@D8n!wqQIg z?QKBD>!IyIeRFtAq)mq%g|&D7q*YCAyg1 z8jQ4wY?UZ!-KvMTheKWQu)Z}MB*(e%D)F%r>RBc0#nxyHokaTcLVq;1NogC_id!l~ z*|L?LoxvUJBC)vWbtwVjf4kO-mrH${+OLH+uT_Zh)#4#na3h9+@-^arlrQaoJ*^6c zu0@L^DwcGHW0B8>0pXqsQBtdkL#`T4{IXP(ZWF(9ZCJZe7k@0h0?*gVN=4uMg(y2N zza@T9dLo{4r1U*<0v3nTtlWwZz^s2LF{A0`lS6RtGzRAq=B{`DbNy;umGh5ZNHx4pHM}K5<|9QkZod z=0ZJXZ^dFTXps#O@udosaykm&X8L_uOII|CTz@Vv6^Rd`__A28-+VkW^cYxxNB=n}!iLbj6^zg`RmgA-WjGfoC-A#MrS{?d_kgcp{xDv_Q-qf) zkl~}0YdIeM_-UcC)#9r&$k6YpS|ff?RkJwQ+`KN*7GB@gx;fklSdXG3!o=^H0Tch> z3{kdC49!4ON5pe8Bw#PhAi(Z~PD3joZkzb6N*+_mw^dQ{H;|mTm?|Y7euPH+;I0w3 zRn~DM4OjZaPb)7BwYPQzJHzO#$oCW#j#j;-Q_V`q81`3EJ1hOD6C>(SC4gHEp@}tA z#u@+@B2R;)FIOFB+x&r0CUJcl9z*mPxfFt>Uf+|odYEbzpb{@f0$IsVtH?@zPVws~ zzMituBe9;yD*$@7fkIc}(WjFq>wABntHIOc$+)UL9&f+P+gCE;N)X{`7;$wp^t(C| zWgbs|nb*_d@p`6=CO;w&Xaa9_!i5ySCsE?fmQY@gH&IgU?Jvo=`duD> zziY$=;oyG@AyULZW%b*0LGR})g*XL2Xw|{LZ?&LGh!43EqQ6@G&ecVrDc!@ruk~3@ z_cQ$hr#Hb7fK9BLsrbn;5Un#k!1O;d?Loh$^e372Gd&A>NPU<-kLf<9TbLeV`d+5V zPmsL-V%qaTMbAD-$!lQx6HLQ%Nd9M-9%1_0lNG=B43)m0X+P7KoWk;${+~>DF#QPA z38phl_c6WLt@3A?-o>;Ru8Z{lHPa1D*PYoM zO#AtF)3QuAF@5r>ERX3`Onc!$NxvOTH!*!H(|t^v_B3>s;{P6}51p-O)1Leb6>ZrM z)0X`(ZP^dgmi>H0<+tpIY0G|?w(N&#%YK-)?1yQ~e$H3&E&E~GvLB```(fI$pO32i zmi;ho*$>l}{V;9W57UZQ4tQY13Z3OO$-mUYeLT?PZ8*(_TiH zHti+Dv}rHmLM6|%mujX>d+{)B+Dn3I(_V&{Hti+Dv}rHZOO<@nUc5}3_Tp#Sw3jBP zO?&BJ+O(GurcHavGHu#R^)gkSX)k?DoAxrqv}rF{rZ0RS{8gC{pI@%>U(WQ6Okd6P z5Yrt@k22lOw88YPOiwVqkLi;xQt}^W+QalunXY3x!}J=aUtxL^(-m`+zRgU}W%@>@ z&u98hrY|PCN{Eq!Dxa23ZaCth4=WmOSJETwU(t;u?eVDel}uw+D*g9Hro}u(Z)SRk z(_>6~IDHS(4IagRo5|1q{vM|LS)cDQEto#cvFg{;e}d@_PLDEOeUeK5BGY{{75x>a2Y9}-k7*Cnk1*Zf zR{SGO`&pmona-T0(o4`lq_1E+=P~VJx|Znhj1UneF*nMxbML| zi2DHU!?^!iWuqwJ5p)irmh#1`?OYmmA8F;B7a`Z(c`MlGEHMDke* zWza%4CsOV-+Q|G=>>T84i3m$xZu26yV@8s4@%DYS{1jXDbL_MuOWOiPtV&@UW3J+P zkyGV1E0kljs%(oY=CV~i$7iqpT5jaR4GhxWOe@;TuqB!sBep1?xvgQ3JI)Obn~3~P z7nzW&QsHJ?L9(^!RuEsuTW*EXyxUU{?KAh%3gb_ta=AL#_X!J1$lFz*Y^T!H*?K`tWyyMkQ2{U|RNYuUoF9pX)q(K@|DTK=&eBIM~c-gI28>qWqAwhBY8~6z958ISgic%W`G6)Biw4`a;OsCO)va?!=|Z??9h+FT ziqN*rJf~q3#z}Wauvs3A;!6-5HBWs+u4(kO!LoML5}!G2?rPB^P)44Yo1Z+;=LOJt z<5K#gZzHVs(-18+<}#-gGxbR&&2y;a!Y;G17GE^jQLqX_zX@)MaU~g|W$GIMd@V3d z?dn=0@>Gl(%Y^kEXt|^%7>S0P^N@YpGMD09Iu^$vGESFm<>o4KeWV%Rsi+AZBj>X| zW>Bp#O?7-RG-Ml1aHDqIkLyziv;e+>uqk+aUbwC~7!T%Erm&*#f~vKqstnhK=+-zy z!y$Dn+zdO9bjpurjtd8$jt>Spw2eMpTU{f?EYfgb~aC&QR*){9o8zX?c2hrcT2caehEe0u1|vBxX;w!;}sn6>K*MkQ^ygsD%bQ+$7RLK@L^L-kG8jMc{ilh zphZYQlJ{^y@a9^L z*NSY%Cs{RiAG2;5+hBW(X@wimUu_*^>hXJ;fw%S;2i~_G=X{;bm@nj;Th8}Sk@)r! zF*1hRH2XqoUG9THay!;UlRnd2yGh@$7Lh#5%$qh?jJ{%-mXd`dwHjU4)sb_&Y(s8k z1kXuxm14Jv&o7nNydr-lWQtHLvt!JD>FU+^7%UX-z*n)s&Czg8ohXc|^%X}gEsF9L zb1m@}an%;Z6qi@CxQMA{it?5eaV@DSiYnG%aj~9tUYNC -#include "Token.h" #include "TokenList.h" -#include "ArrayList.h" // default constructor TokenList::TokenList() : head{}, tail{}, theSize{} { - std::cout << "Tokenlist default constructor is called." << std::endl; + // std::cout << "Tokenlist default constructor is called." << std::endl; } // copy constructor TokenList::TokenList(const TokenList& list) { - std::cout << "Tokenlist copy constructor is called." << std::endl; + // std::cout << "Tokenlist copy constructor is called." << std::endl; this->theSize = list.size(); this->head = new TNode(list.front()); this->tail = new TNode(list.back()); @@ -35,7 +33,7 @@ TokenList::TokenList(const TokenList& list) // move constructor TokenList::TokenList(TokenList&& list) { - std::cout << "Tokenlist move constructor is called." << std::endl; + // std::cout << "Tokenlist move constructor is called." << std::endl; this->theSize = list.size(); this->head = std::move(list.getHead()); this->tail = std::move(list.getTail()); @@ -45,7 +43,7 @@ TokenList::TokenList(TokenList&& list) // copy assignment operator TokenList& TokenList::operator=(const TokenList& rhs) { - std::cout << "Tokenlist copy assignment operator is called." << std::endl; + // std::cout << "Tokenlist copy assignment operator is called." << std::endl; if (&rhs != this) { // delete old stuff @@ -84,7 +82,7 @@ TokenList& TokenList::operator=(const TokenList& rhs) // move assignment operator TokenList& TokenList::operator=(TokenList&& rhs) { - std::cout << "Tokenlist move assignment operator is called." << std::endl; + // std::cout << "Tokenlist move assignment operator is called." << std::endl; if (&rhs != this) { // delete old stuff @@ -110,7 +108,7 @@ TokenList& TokenList::operator=(TokenList&& rhs) // destructor TokenList::~TokenList() { - std::cout << "Tokenlist destructor is called." << std::endl; + // std::cout << "Tokenlist destructor is called." << std::endl; TokenList::TNode *oldNode = this->head; TokenList::TNode *tempNode; while (oldNode != this->tail) @@ -304,7 +302,7 @@ void TokenList::addSorted(const Token& aToken) { ArrayList list = aToken.getNumberList(); int line_number; - list.get(list.size() - 1, line_number); // never returns false here (why?) + list.get(list.size() - 1, line_number); addSorted(aToken.c_str(), line_number); } diff --git a/TokenListDriver b/TokenListDriver deleted file mode 100755 index b74d21e62c2f0de762ac022e5497936d2756a7d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81272 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 F{|`N9j935w diff --git a/input.txt b/input.txt new file mode 100644 index 0000000..1c9f0b9 --- /dev/null +++ b/input.txt @@ -0,0 +1,48 @@ +Top 12 Dr. Seuss Quotes + +Dr. Seuss, whose real name was Theodor Seuss Geisel, is famous for +his funny children's books filled imaginative characters, rhyme, and +use of trisyllabic meter. + +He was born in 1904, and began writing children's books in 1937. He +went on to write over 60 books and also wrote for magazines, +newspapers, and advertising companies. + +Some of his most famous works are The Cat in the Hat, Green Eggs and +Ham, and One Fish Two Fish Red Fish Blue Fish. + +Listed below are some of Dr. Seuss' most notable quotes. + +1. "Today you are You, that is truer than true. There is no one alive +who is Youer than You." + +2. "The more that you read, the more things you will know. The more +that you learn, the more places you'll go." + +3. "And will you succeed? Yes indeed, yes indeed! Ninety-eight and +three-quarters percent guaranteed!" + +4. "If you never did you should. These things are fun and fun is good" + +5. "My alphabet starts with this letter called yuzz. It's the letter I +use to spell yuzz-a-ma-tuzz. You'll be sort of surprised what +there is to be found once you go beyond 'Z' and start poking around!" + +6. "I like nonsense, it wakes up the brain cells." + +7. "I do not like green eggs and ham I do not like them sam I am." + +8. "Today is your day! Your mountain is waiting. So... get on your way." + +9. "Unless someone like you cares a whole awful lot, nothing is going +to get better. It's not." + +10. "Be who you are and say what you feel because those who mind +don't matter and those who matter don't mind." + +11. "Don't cry because it's over. Smile because it happened." + +12. "I have heard there are troubles of more than one kind. Some come +from ahead and some come from behind. But I've bought a big bat. +I'm all ready you see. Now my troubles are going to have troubles +with me!" diff --git a/test b/test deleted file mode 100755 index 70030233c4c6058673b9b717fdb7067cc7799bf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56096 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 -#include - -int main() -{ - char a = 'a'; - // this doesnt work - // const char *b = 'b'; - const char *b = "b"; // works - char *c; - c = &a; - - std::cout << "a: " << a << std::endl; - std::cout << "b: " << b << std::endl; - std::cout << "a: " << &a << std::endl; // cant print address of a variable - std::cout << "b: " << &b << std::endl; - std::cout << "c: " << c << std::endl; - std::cout << "c: " << *c << std::endl; - - return 0; -}; From 9c79783223fb8a48cd34cd7a162fa4121308bdf5 Mon Sep 17 00:00:00 2001 From: Dunya Date: Fri, 27 May 2022 01:56:17 -0400 Subject: [PATCH 20/24] Update README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index f94418f..f15d827 100644 --- a/README.md +++ b/README.md @@ -1 +1,13 @@ # advanced_programming_assignment1 + +A silly programming assignment in C++. 🤷🏻‍♀️ + +How to compile: +``` +g++ -std=c++11 ArrayList.cpp Token.cpp TokenList.cpp Dictionary.cpp DictionaryDriver.cpp -o DictionaryDriver +``` + +How to run: +``` +./DictionaryDriver +``` From a1070f507d6961e633b9875d6129f7d75017dfe4 Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Fri, 27 May 2022 02:00:12 -0400 Subject: [PATCH 21/24] create a main program --- DictionaryDriver | Bin 123184 -> 0 bytes main | Bin 0 -> 122152 bytes main.cpp | 13 ++ output.txt | 305 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 318 insertions(+) delete mode 100755 DictionaryDriver create mode 100755 main create mode 100644 main.cpp create mode 100644 output.txt diff --git a/DictionaryDriver b/DictionaryDriver deleted file mode 100755 index 3446dc94963144436855a9373c1ecdcbbfaf4e04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123184 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
NbL>} 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 QGVbjygNdpG_yS7&FLh3KTL1t6 diff --git a/main b/main new file mode 100755 index 0000000000000000000000000000000000000000..70234df05b2f9b395d3031b3214eaa7191030f78 GIT binary patch literal 122152 zcmeFa3w)eK)j$4hE|}8GF82zk%T0>hHl>BuqHdv!TWK)R1}jpMG)+mQmykR`?nK^SgbLPyMGiT1s^X%hq{^g(VaU5Tv<2VKQe*pfs?&mn2v7-=kocH2?6#pwL z%jbVQa#7@hPck+8&zB933lUE%8mO#X5?Q(=yNJ|JW~Vs@E=Dr{gGTwQtZc4rZ8iXc zG58KcXOMpJ*G(C~MVaCRVqUPavZ=Xcd6S!zi|^t)HNMA8CoOC%lo)(qnfz&dm36hN z8fqJnl8f)8yEVQdG8=z{O;jh0q3_a~n#$VNn%aiu%I50jx%fi;8s7~ZK>QKT!l#qn zXJutgQ*&eenoCVeF20>V)A&}Ie8S$pT-?C7c1=@eKyvYg?$`LN%2bDy#`{~W~ z$$YT=GQA$RpR83`xvILdY5nTuYgbh^G&h=lj>T8!GToO&7w2iUr+8)Mit1)hg63PM zKwW{Ruf!w~{#X6f`e@O@^UjSdSg1!6{W1Ma8bpBkH^b-wLOMl~oueHm7Gf0T7={oI zLecDr_?#GsX+6*9B+;2U7y6vd)3l6DN4fr$KIa(py*J@=y3Ti;$w({5fBqp${;x*- z7l_+*$;^4EE}wIIP8vZp%G>bn_RXADV!plh;3qFL@faK}N4D_FPVtt-OMA>c#|CuL4 zyk8tBd>L9mPtA!Zo>F=Wh^k*M<>z?H7q6HCE@qcsyuPWqcJ(P|nJOslI3L7+(lfNe z=cGXN2?p*16Rj*DDgT$}K%N764&*tI=RlqVc@E?`kmo?219=YQIgsZ-o&$Lf{M#I; zh{pdAZQmV?#@qHp6Olaw;x!ovi_bV(Qxc6w($Vb+Ju1Pf?K=Z3vcPdnen|4;Eossa zO|$`1B&EL0MiXVJxQ|Jy$Aa^VqBXwzG)d3R_xB{D1G@}KyFk){uE_7zRye*`mn02D zc9WPyWH(dh`TX4{3o78en30;Y-HC&{&~z%Ah?YcaT6V_|{s~IACw=kA?vb6ER!z%ojSNP2)w0h16jx3jL)Jct&{q@zDKM{tlk2fP5ul)&2%LRR%7YPC+yW)c!&$ zIP&d(WR2ae7Bpjbr-Aov?AWAC!|d^sxfKR`_kfZ}+NA`eGoWHOf!3S>HS%u9KY{ss zn>+4fJ@%~6fA@Cp{I>HYS~Rc3f5VR0b11Nb1zh8bQwNKhWpu&2uB&n62%$LmM*Iw<8A493v?GI zYDAGJ(3jFRQ}gB*`MYNcp`zV1ds@`IqB}JIc11>gBRB{M)d*m#nc}h*yxzJ<;yAVKo!AW#9$+D^41^BKJtb#>hQeeEv=zE|082x~bBy zCShUa5+vM8ltdE?Rn$j`1tYeoBaj=9+$ty%kz0@B`APeppudwR=fbr@D4%#_^9Yv_ z&Bn-Pg!m5wApzQaPawcx%#0@10eUGKe;O5fpd7oP^R;%16V92k@6b5gwtY;H%tplL$mwqM)G0CY~hgmQvl zIv=pkiD&sBU1V+J@BHO^lQQ(*e=M1=6Ybv&;IUC%|GX>(`Po5b4+5q}64y^r5jn$A9f?%>c*? zRYpahx|4|KMf&_5hcIg(k~WpK?l=YXXwJ5`^`riMQop6&zpdi&Xg6e!(hFhvI?>R) zgyclyTU&+u1L|%`t^nC4X_q=%dNNk5=0*Db9i`*YFc86!Ca5@)c@XD##Wj$a&8qo& zBx03^ZtKF+k;F8jh3_R)OAWY1Y!!5efWPF#5 z&ZvwU&2-AG2qg!8*@MXKQDxUr*8Gz*!r}jbwQsb1dGw=dqL#=p7i@VWZ)40|yPmoB z1W14#qK-hz=x;jl6OzNZh|rz0M<9)3wk?Q=dIar?8mLIeH?lZ7l1_9n=HK>2e8|w0 zrQZ!b(e^px+b4z|Yk$BD0S#wCG30h|Wly>2cn$O zZ&9#R)Fo(a^!zF`6ek|6P7^f5kBd`ArP>GCuC! zAvzu606HiZh+}Q__Q9-=p)7hhY*=nFHM^-QBEw>z=`OVm3!N*mcSG|z=JG`RuxoCG zQoK;0JD6GD+IN@R_OU>KRuZtCGJ(d2K>nbbC6dr4nn;}?0CKosLmR0>b#6a^K6Qd_ zp_~SfmTxnD=(iouG~(X&18AR00}T!+S=cmdZTUS}<#X|Q_Sa+_MIKWjBjE>X^3rMz zBd|S3v|)s8!IdV3<6_3$v;A=SN%|lp82`_sg8%N4_+a!nNB~#~J8P3MxhIkbul&qo zr9?QO%UXHN;FsB0EU3YXk4O`GHy=YhTVKdHjn6NRq04V?`)2$Dr&-h`co~vS+;gP(N0kQE&g+cZb;@Y(HMdB!b~a3yN|wq@GJ~IIyxV*4-JD?)bN{ zWZR(PRhzEJfbL^AOzXyL99Z-N{%uM0Gt7QQQt^ssu;?gtA@WcwrD}i_n%?7o2}BdK zCy5zt#ApTE9iu+7#6UvO>fc5$n4{a40n9FM^=mXZ85^?rK>RWFTeq1W z{b%%zkvBchH*60`=V4x9=KSC<+Mu_7ibTmSpCQ%GXRkbsw_k1FU1jAbUcr5psFU{X zXq9aYiAFg~+QAh32Wfg+GbQw)wevkpL(hmYV^kScT$0TA_SL^WcL_HH~FJ9iFaC|c8&>N@zNz$XKe8u^wU5EZY0X8<$v*M9}+ zyx)lVqB*XV52hYxnC72Z4<@vSOn$VOa_-eAu09H4ywV^jO&bQp!nb4$YpjNI)J5P$ zJo45EZyyds-og|8e+%?rAjj$_8GF&2S&e1u1JdNR_g?TYlkSzM<%C}B~9?s%P`C$>@-U(G?9m_MHN26W}{qmUh$kRPE;c_e2{u8-|RSSDe*Cjeh;}}+tgM6tx%*vP|bTHaEvPkAg zzZBuJ=kxl&IW3-2|AlIavZv@-Imy!XJ3&>pTk9h0k!8U;1eZ~wcoVzk zAo~l>;Xm{j=7e^&%J z$c(GMu{LD8`S;ns@F>=njKXr)N3DNFA5H8Zfg5IA{{rr7gfr_=w!h#G_!D%gG=PaRU#8(4snrWLghpSrVoC z)pC}y`&GE)cc6Yh)KZ_+A0ee!YzKj;ANwJV=bxYR;@N`gz3Q_X&t|D%@bm)DW)(z^ z7f)~0ZoTmm7uz1z4ZyZ28$u2I$0lpTcJXJ@-}JC5V?o*XO5b|anFUNJ>xp8U&{3^v z1e)*+jgB~gwpdWWJHeyTNg4-oq}0%exL}}l^oBX9jzq6Ujvy{Kaf^Bn6Zd0c`_2aO zTPXE2>;$tnXj%Jdx+%Sz4_DsIe2yj@O&JPJXrJY-4}ZoRXdnT$cEMQPd_5U~gE0t1i;9#c7jP)rlC%;NI5&&qSPFUZvOe`O zTJCHW8Ayb6B}a1|a$qSN0dSoA#rS-L;>du6N*rI%8bJyrF<$daM&v{d z(h;wC3NqQJt_0ghN>OU$psb?YPZ4(sLgEWRb}-fs#EkCZav8N@ReXik7BOVy@aJvZ ze`?|mW{g77_}X`e_I-X1t3kaZ90utDPFnSG?jj+3;uZY_djLt{T;P_G`P2zyZ#R@5 z-yC%FrSH5WC7K2Fg|Y=OtG}N0B#@z3+al^TSMOw&2W!u6*d1e|6f3&~X%_;H9>1q& z7c>W_vBFT`KUBuN`6d326)dE%?FT-SK&SrHM6M34G;lzfWF~DYO{0SGryb8^=2g2hF_MpF` z4^?$fyn{WsZ-eb8F=nvQOH6-k@ZW4U;q!={DR{HQb3OO zzv33(clFqS5;HcOj0|D=HNjX zwg2y3V$f`jc>)G~=W<~X2$8iB0|b#B2+sh04&s4mvF6$Qz4FY)`M>q~ZuUSU(f*OZB8sEZ5sc(a&+53?R`m+t6 z(AdZR{Lic7_Gf(wu0EYGmcWsdb9(Y|G$lrp+Y?^=jGu+Bqi5P^+Dn&)aFUCa!R}9j z+43bkgRz$acjsziQg*$93_>KH#{rADSSKM{X1-W;qA6werN&(N#4LxEn^6T``EJO_ z2kjNA<+d$sXVD*^T)H`p;AqBW`?6j&_X(=xwqBKn%8EyB5k;Md+%h^y`w3S>o`Ey@ zR%k295MyHOT&r{AE`hJ)7k!-eAv}n33bfcet*=9*TAJXJvR51+XL@d87Oa21c zD&lTXpigiynk{VE-319UU>>-$+KQVp)8LfHCW)$ZOn}l*Nl5i9Srj1&|)f! z3`F*j@DVI@WRaA`ReDyDB^Tiq7~Xq=Bk`F_3iv*fA+Y>Iqe2u8TNN-E9N7&!}P+LLp}7gDgtMtiP_&~5+)EJ zXXI0sOmrY#X0Mu~XUd(`X%@bngOpi1RHE$p_U*XNj^ht59MF%rdmf$pgugQhnzaDh z!wb*;)Y?DBpFXa?KT$lF6q>^=(>d83(~<9^AKw_raHP^KDNCuxpS9%4x;g{no}*Fh zek~yU(*7=RDy=$Rm#WgsDW65dTC^;G1JOkB_i3tT=;2*k&|xk8$JKSuiv+_`$>=a! zKa@2-AlG|YO|Lif2XlYWGNis&hnC=3#&jN{@&9eY!bgiQ=;F)u7fj|*=J*T7+3&j> zDG2ZXx%+BXJ~)3*WPc!fvh|-}z8iblv%l5+@r>^Rpm9%BxFaI7^Y`2K*!zuH_H`~l z4g9vw$6n?twD;~s%^;XiU8_xf=bp#S{&m|WV@ zYA&-u zhByy!@u9sv()K$%uQ(FMQl)x15@Re~I8*O0 zW?a32zIAn;3cS+BMv1!G<5gJ;K5~s%=d(YBl~z4hP2xL)wuWsnv6V^cah*LqlRf)F z)=q3?l6n)(Nkb1n13K#OC@mmgo9XNYLGewu2#K0CiEimJJJ}sTeSgP?g`!RZ(PG%! z+UwF;LgZWJu9(E5iEiPout#ck@}=XERl<5tOC#?YlQII*20Ax`473Hyuro%AWI!A? zb0Nh+GZ>whB;I$Be#ir3IEK&vC43%*rjQ~VI~jHPd=#2YNRy+>Q{ z?6$2Sb15l#6eF7{C`lDnNQ!r+Z9|}iacz8?SHsl7Ld=V{%*IYeU1BQH>%=DZAFUH9 z2CtmW{o_5hmtPXbd)c^!tjZcfL*vmvXJ}MMLLNuttuDhp-8*%xE1{;+U+{XNt@Hw0 z{XP!?bR~5tv7kAYAam3My0pmir;&-ddJ(Nu%vIWU_C|)X8|3tg((?%bJjASa&3wN^GTstLv9h;i)%}l)b^V z_IJ5mZ|wdSPM!_hw?IZ@SBs10$DBoU#S7}0v>jJ3v2@WIo`&scI2ylN%C_&KVeYUD zH>q+_44YfNUQ{utfeH8*~2TR z?GIsVG=L+?PmnO|l?`T`TgWc>0@e4zjPXB`_}mApfK3+)$L8Zzst~* z_^9B>vOlx#tC1e=jdJdNk-Gc#7aq2x;=fYIoSUJ|zimj3!ck*r^B5@E^pPKb|G4AK z(r+B^W&MT3fe!S?Bd_h-TdlCJ`xqN9{@zLi;|S|Htx+whm$1M%lFIs4QkQ#?cqH{K zAc2@t8rycaKVA}V+Xehcd5qH$xR=Y@W<437m;v) z#W-UXVg0?NK!P5_DXxFA$cKI(v-C;J1p5N9eyLZf2IqkAE~+H zH=v#b<0)0zjre8l3PI_c%CgcYfiAUfiAl3>G-OMIaZa5BiZvJM!@3@V4*dF>J*XR0 ze?&g$*n-p{gu{4OG3D>RoJuDfALRaqsMPK?qXKVY0ch}e6QKbTZT)e)Q2CdoSWMbB z!#nl}V(uE#1H$>9^k4zM*)dsETO=8;xZl3R%ec^Wp3sH&IBr8^W7+Q5L%yyuyawWZ zCs`b8@>;UG*JUT9fp7Y9FxAUQjYqB#dJ~ar+EYHNrH-e`zDhDiJcsbC%>K`NKjWHmff^* zKfZun(TI?)r3$KJ!%mKe9D63!%Q(NHIff~)iLczMyJ0!eKzHr!kQH@1->HIF9(S1+ z>Y+@D2x*(QzAQDJB;vJn&QJJfF(ReGjafh#9k$HKj;4ktTh-Fb|kX2zC& zjykJCUjXmGvg2q8g1+GWBj$!|?gzZNizK(CePn*L1`Xh19R7~LSfxKFLG2pvqEWV(Zzt&$6$1FL2I&Z4;yA1JzF)4Rs-o4;pir4pR zcEos^Y8N_L-F~VYq7OK$e|FM&=f$#-YHR?q`^Qy5COzJdl}!S=h{4#MOaJ)z_@$2= ze6+tvt?(&lz79^loKyPt-Gmbae%XTjydu0h~T)Hs+1jc7*5v@*p>e|w;(j_DX*TLrQ@V6hVMRoG&vOar$lEgX0QZLW8sIO{zw&?FY^nnk3=tv4yedj~*vRnNf#{-Wn zPWXaIyYlISpiDx6zhga1Y`_D`X&8Ys630UbFOh}zB<9KexB>MkxBq0=W_78CH|zF? z^)($+_O|!19(l#GJ?b;MY>zE_w8oo4=CHmQ$6b!$;I*hc@_Ecr8QMb3ZLY?$f?hMt zR-A`}pzd65E@932tf>#G*gsEiPW1F9P722zKtGYZWorh658j%O?>AA+Um|B@2WlE7 zLq;?k!?t0UC0%L;32@<4&Dq?8;EgaJW;}``1XA zo76xPph+6hpW8^>#U!FTSyCZyavP6t2wx^CEodAkxYGm=ri3*w?0ko+!fQEY0Zynm zzVt*(S$0$$WQ=9Yuqv1Y*?nk%e3*&oKDvn4bnG<4<;%#>Xn7Dp3R9d$gjZjLQ4s4o z)BuGYYEeE}qxIpZVfldG6mOT=X^ETx71kMu&j-&UDiN(}f3^hoUi=-sn(b07t|bsx zNainf-wK8;w1?Dd)IIiA~XOl7@L9$hFrR$Pe>Psw|d(*JZ=%9Bjp92t6!8&VV{uXCN*t zku-kHP53924ym|?hlJ9TFlDg+inl$gUWLV-XnPcP|1S`8O=crg%38M?Np$51{4_o{CY&ZTP$=;|e1Dde)z^to=WuE;l4J(3q}jC^xJ zm$LvWbwRw$J7|xiFosbNT0{16!2;ti*sxo=m>EK}0>SEyx80(?jQWYTTfpVjh>^>m z(Q5!m8Zh>98RA-d{zLL`J^Tb1d*p0Hik+jAO|dR@weEKphqQBv)}Or|_EP55A)4}$ z*CZc1K>h#+raiFW%RN8UC}T!XOG`2rvEFuzlDSSwNL&{hl0tA_mA*#WfBy+1*ftr7 z@GpusdR1o2R;`A1sk;Hn9LO#z-*)1gf1s!zS@^$|X}}^MXYz}B>SjFZ+b*Oh?h+{e zu)09V6GhgmBGkv|H2SAG_7t%e(vBr_=Pw;OftgtS;}tuBXi$xUdbG2Yy7SKqWsKF| z*rNdy%tG}LYnm@~VBt+fdZWeIxzS^QWq6n3PE9*9rKQCARqfA};PqmE$H!Sp%7+;P z&wef;w(v}qFK?A?i57C8D*%5Es&H$$FaVr<7+y;PYK9$PN>yi+NhdEP=BU%R9FQ172*iU9g0B!~d zL;UIZuKPHK=#o-Dj8Xv5C%F)~QPQ<1)6=}wPli6wX4m(i9xu=S0Epcs;6S!Q&lir< z&|Logww(P=EN=K4IgIkJ)dcqB<|aIlTvp<|M@2 zF$$n1H4`cAY20XgMZE1;q!6V=W(d~uO#I=lmVf%UMW8Lp{)y9;%tu4L;%elDd)>%e z`0PyP{rEt}c?!Y6jA%)#U!!=gMwn2(p2x9@OS>yymx!`}e9_qNhj(5}8$!q*>@K=D z*aq0<)nC@X?%CgVjEkS2vCEd>wfJoInrp!UFbCqhMlYzNPCp*`8zZR5 zoby4*uc909g&ub7@=#ZSRGp5hu91=@W9ED$;Ogf;izC2^9tSVx7>AbIzfAd`N%=7D zm(xdP`=80b8Tt4=*7i4i^g!h-5H7wT`;Tn{%y6ECKreSgv`T@Ej0K>=uJgk1{7Qr}ipi-~JdLV{yHk@e^uyF~S*AU=0oFu8(WM09V z;$F6Rxq}=~qhX{Q6A8$!)5wm^AgeRT@Zyd^HmE*i$q=akmV1E(Viy+Icv}7N$K&3& zDR=vCzjWE&+RBb4{T&bK7L)9DG||u+O-$Vd(;3Sw-`z>!=I^k&3-qJKWK>*kA&@`% zL_FetP)R%oM-z`hZ{GprO===h&jZ0oJxdU}k?27DtsveW#lrj*G}u?VXr#%3a4V9~ zJf&%R>61_ZG_-l2yP|LOi4n;p)|e)eZp?CF$B=pmr<2|j>9MmUs`ljd_xQrZM^P!j3>TKEf=!xWs*vv$gy}8p)A$4 zfw|CX$NCmvs%{ie;)4;aP8}aZuK2|g{2n5XjUMC6v_ZTgF*fxRNF~nK1PR0u*IYSP z8Ts^x)OhmwGZqs(>Y4g>%!cMVKVrES6l`Iwrn3kD(D%0P1EA< zF#H^zV7`CpBN=`U=gwD)C>9qXaSyxF|Koy9vJ^zM|U! zk!Kzzu2eA$GhdCBOWok856H6%_(qO0NX_7w>d}GuRh)pD?^&&OHnGM)Bqb9Rr^UDf zolm8l|^KOx)^HI5b2KQ5f;z*VyBy+?#n(O*swcA z*^Td6l$iSRIryR2#H2;McOSn?$(y>HQV8PR&)~Tr-Z{*)#3spVzb}R+QFZH}laKdqkVlV24@yB+qW{^@qbzTx$RroG#o(h zWh=OZC3UDyph`sjXEp|LRVJ{*IG@M1(yd3F7&lk(&nR z_c2Uk;epN}Hc#+$7X)Jc=BdstAUF;c&!s_yeiz@6-P&q82X<{CLD$N7)o4!mf85Ew zV#nT#Kn~6IBX?_H3!lWG=!9MBNc6%hp66 z^sUJP{+P@)^{Y8jM$lO*GJNir+~SjEZ!m_>^j^VtpG0TC=TD%lcd>W_VMm%blc$J&Wb3A8!X8A6i3(+_+Dojh_w1dCgdP{_P!yUch@;9}&czaHe~B)YCa z8|}}Ef44)Q=?FU7IakZI&u+m$PiN;0;8G!Q4UA`;j?4~70q%NWVj@wBdNx9x$Fjy* z$V}YD=-gdiGLbMk@?0Tk6@vLd$21Nh7zf*uX7HXLjwUV-M++~nf=--{%9s{tl(9wK z+9&u6bS>Vwf_aH<;d5e>M%WmRp71v-fQiom)uwV?Oy@6b<=5OD^*VbpuakNHjtoly zj*gseX>H%iCa|V0LZE?yF+D3mX}3R^?oGffqL_m<1>H6B1Rkca9TR;d0%^ow`I<%OKkWt*PedCKwkvz28$wuYfQQAqLSX zl$24V=z}b%@op{xsyG+%FjM_Hm2sg`SMI*6mBgAAIbl|jZdoJZ+ZQEd4O8vHz%!+! zmFlQSH5gcPmt-JTD6BLb)g$Z6OcHHP8@c{mYxG1JFDUtbN-&O0j>i%{o}{fq_G=<1 z5Zz-v{Fq3~rE%hu)f#3|yb;^7Mlj7`8A1Hc*}LPpHjkqlD-s?9mPv>vs}1 zL0Ed8h<82;F6x<+kT~=rwI1~1OtcNX=v{w8lt{WHXgZp$V3$6RSHCMo*Wq}%3@Q%0 zn=UnNCig8};)CgeYet>Hudk9Vou`68;OL5Wm;IGa+6_BMHBD;kqv1|1#)L#!OkIMC zuSH%2&$v(;bAY3*eIRmZj#YN=#g&X*1o z^{+`=mQ|ctk-y{`C;`sc*-W-P1>JHt?BQu47;U) zx>mg^FKTMNi~bU|e4a#8@icP_xf`lTN=Fh4TfsQ3c9*j$Z0uo*Ct-uO*@kq7!I5${ zaDy~p+l(@4gNxNBQ$4BA+T=oR|Ml@qLd*_KQI^0JHq|NUGKn7G#MycG9FU=ZF{ZzSxZ|R0N4Pu~L{%syYRxW-Qb$hJNHyEXZdCKRFN+==Q1PIv z8^2ZaG1%}TRdQO_WfxVj3)hxpMrBr#QS{#Q5hU}cK%!<{+|C?aE5QJ5#sJ;Uij;(G z)8Z>Q%QCb_aYD9P)0nlGqum5o@`WJ21vKo6qQCeJ8}w)E3~*$ToJR&_h&D}^K(9>k zyGj759=Z~?nZZw3M7twB(fER6 zOH>5jO#G@(d)uvr{!W->rYocvc88@Jb6wv5H}fF%ycV2KV5>sG`LeFpBgBXyWygMP0$?f~0PCYnK7BUU3p;U${eUl?vqGfI1&>%JI)m(&V5C zk9{RSfh7Zkq8~IxdvsBod@8X~GjeNiD5~ofpaSTv%3p*ciO8ewVI>tawzKXbmhoTH z|K#3}F#0;>?|4afJ4JGL{Eze%aR?zCme*@|m^!TeAr!>HXuRzy_0JO-eG1#8XApDU z&qrlYZNsRJs;j0*6_r9ME(h0|0*S6J&}a-@_aehBC)i(jITw|MU)%+n<4I|)3NaM`8(b=d!t*s(0@ zHA~!^AJTo=DTXDk29!$EkzO+LYy21kmI{ob!0#m^!BOGgEovL;>I)6GAjV!*Y0gOD zTlfmQERFB8soiCN_AZUw+o(-wg9p{MKmoR)D%f_jx&*a1R@~ebFl}p%-Y;K=(8Qc6 zugGUEOzhUM{+`~Sw5IKKZPq$V1G-g^RkKUoq2Vs?-3Ao9S(5SI0;%$@D>KNVc@cQF zF}EFc&k34^8_?#+GSjf=X1tCrYQz?6}@iRy_Nx|clFZ*SWPWwyq{(jWg`6Q;>uiq_S|8Vlo^v3*vI z&XSx8z&VV49GuiYyCjUg#56erO^&3|8rsD&0lFE3xIL^X0F#Lb3&06O5YH{q#CmY2 z0-@c2t<#9Nm=P;Bh#z+`eO_Y%7F=A?QfTZ0Yzw38&d>jwJxXo;gI;+_(~{GYLI>fQ z9Z(g(%lUJ*u1rk;cMB?em4Une_nv==?^mDT0-2KUXTaGX%>F)A5K_4ZjlyS$`O5F7 zV>I;ApN8luCHHFvNG_6TLu(B7yfdKdVIC`1QG?y}z8(U#>46df0E?H%f~hAO@^cRFR?XOkaA8d8_*A`r%1s)ccV?a|fEnf=G!=#?{PX;`VpAwt@_2HyBI zk2AXde-B^w{p$(ePxtUUfR!DFKF1Mb{vO?X&v|i%zphNBRFCN%stgb0ofWoC467IK%cskTo4U`F90x}n0?|Y3=TO`0?5Mmk(}v)ou2_M zEA}jr=ZG>Cnf&gEDZ_J%%(h}nhVL2q7k;A{E-BLy4Ig!k+~a!#twNP3D2|oIpOHuE zL);OA?|E4Co#iKNIcz16HV32*v6FJ4d4?9X?DH1y_afdVzVO8Op#S(weA=x_7akR{ zzw>5v&DhbP+}hC#@GU@eUb!1=?1C{4oLRUTVK*IOIAED9TwjG=rKDH*?$E$6mKm7t z-U@YCTI-^P=Qm(oMYz5J6^3<%VRa)a5cxoi)KL^B`Z!{ib($@|95Cv53|dQCeTB`B zFYog&T#Qd%RH4D?ixL$S3v?W7A-+wCp~Gt(kwF}9C3R2D8j0KO7`{Q=Nlz|HEW`9& zhPtJw+D~bM^|L5`A-lE;lJI(LX0-N2noQOgSgE&ptb?a$Op5FYC%dsfU=5yg+)DkLJuviLJNLh zMx-l1bjE2i%dP_~IQibvbrA;vRCz10r0Y!le&#V$ zK6{+7f77mT?6pz(kBeaP&OEA%@Nay-MzLvo>~Ev^hqvM6as=*1m^tB>M#YSlI4-k+iT>-m~%KZ>zI~P`E{2jB^RA(XpDsNh1ab>o z9x9uB#f=y2W^N}9TpR~tU1SFS)E{w%%q1kgp$DLucDDcF%=mB~4XHB)L-DfXSd<^x zC>!F?49pJ`8N#Ru%S~8i!a5T+n6Ooc8)6Lc7aiE(P^0ST9vx$9IuliyXetvO&P0bY z(ZNhKnThsiqJ5d@mQ1ua6WyGN_GF@6nP@CSZ)+ynkcrl1qE(sb(oD2G6OCq~Jig%{ zIzJ~9rH9a@(nVmR!Ax{|CK|{@OH6cNLzf$~M@;6nkG?~NyFa{U#IqEL%wy_90JO$L zf_lc}bVVLl7f$CLw#Qw^-WPNpY(|{GybQor!~H?NJ&r>Oqk84Nlw>sC6*E=T{=fx^ z9I{tx?nDK-D>tO?%8eYwl8{~e=)(wZBG@>n99BQal^lCT3>Y}E<(}YuPJjh*S5dcX zu1TU5O!t`FvnRrm{L;S}XZv0pY~Kqv=D<$^_TJaG>!IiOeg6)(fL;`{=c|z) zu5|;7T(uJva+KM9+x?gEZzQ6@_GgRvKBoOa>tzp0`zHTweJ}Gts7X!P#O>w&TuH_s z=%F8$&u8G9p~`T7zkVhXTr~?}L9YE?=AY5-yZyaP(|>%0Z=(Gb^qbcnroBZi2RqyN zd#bcv^XNleKKJ+M&tzw;3bg#NxM{n*JKw*YEq8cHqW%8m0n#okfA4U)_E^a6pU|Lf zN%>e0&Y)?Y?(6S?9~m2WKj9hgiS1+l&cOuqg-IXYry2A6-UVFo_-gxNG8Ucz(Zdt} zzW4PgKjHT;H7BDT3jMw7W0DFSn+rHDgD*-?$hskH(35dUhp*; z^aZ_wdkfe6^)F>!&-Qrf|L>50cWUtV38#iC#)<_+I?RfC?U!+MO@3&JMw|wNLH0Xv z__9(1D#asrO8G?OPW+}V&q?tEMvqM6Qric=_V*EUTZ;iXjA;2nlp1*j5E*V?u>A%o z+*qdMV^EkDxTTYrDIY@dy(AkBcpmTrI6p+26A<{UkaMdc=T`egsJqdQDg*M7SJ@(c zboS+398o@{4g`r^kq0+M9`tY9BcG<(&r38mBhHAdQ{WS_A5@1S+mHax-Hcy&Aqzp> zX7!lx6PFKoAckVPyG0Ox{duPUA`ivxFduvZGb9&Afn|oenfT#`bkuc-aaqgkz0B6@ zH7pAnBagYHi2c>BK~;=nF~9!WQ$>$@0c)vn%pCI>L|XzOEj|Id$nnyvl^kpAvy~^#J;%6n)JUeNBDS zTT~%a>o{#Irqq7u1iFx!PoxjZiTsHihAx`l~4C? zo2#axWpkTAt5uJCKGUAjKbW|WkT^_-Z%ar5@c(4Y{BfqUtq*>iwHfy43{>Z@jqp4{ zK88`ICeIJX=LhA=Hx0Kz9}P5}IDtMh^vL+ALCr5N-Fp2%dx&TF#qk!aI+EUqDIM9< zRg#tO`XA80%jBMBIG~l&nDvOtOS(*z{xK;FTav$Xm*s!S@aqVcF%xb;;l&EWr)+zK z<7sF#__wEcgHAnzyOj9iQ`dy}Cwnk@_|0Cr{IKVlRJ{un0sDYDT^hwcl;8fzzJPA`lNtH>jHt|i{k^r*xPs-l zf2{q=!vI&ls7^^PzatkWtzw^~)CEEzZsZKi*Imnemq9k_+=CVC3it(}2dMQ?*o$LW zUHhOU59@n!Da?zdV@eIFJ=?~qJgA z-lAfH2=@WyTO9r9Pam%0E0k3e&8JYdd{n>(E>2Fg zk@DOpfJ;(+LN4?23q@#zXG*HBWz6|;(8UK=2NVuj?(Sdus$+P7WKo9hDXKwxWqwSUcZ^Usxl%Dqcoam|<-%b9hw*bwxbj zH?>Fu_>AYv(VCYM2mj=lidXRA6daWd;F|?6jL;Y=O?E|Ikn!FadBN^#h1)UY>h}5} zH2nLb*}vlc8??tjO+K-H& zMZ34Mv>GiWxwAhgR<{&Y-@4tFNql4)(-X7(2-HnLC-l1QoAO9E_jEuUrL8jr)bULx zv0>BBSJBQ09MK>*JD1cceamwztEm@(#6Q`t=ic!b*;Ee_$%OhdtNb{>U!(K6zK*v( zde4_c@6zL-O)>NR$TWRam`o{|@0l-i<95e=UnZX^>?pyHzw;vq_%$m|2Yks!t9|ZE zz3X`>Bj2*-%5?4qdMru$zL4y{X|}`ndOVSMet+f|7pdh}(8afJ^SL~`ymvkip{xJr z&Y!}hcf9@aa~!F+u|ICa$~4jbSbhbWDzpYj$NoOVBv|6YHj2@TamDfN?T<%~`^LGB zGkRRFJijH+Tjlv(d2W&C59IkndEPG1K6&0D&pYLLw>hJfD>3Q}X&;OQZN}kWj^LcsxQJzYkf0E~J zdHz+N{9f7UaWBd96?wiU&pq;dQ=V_h^Plo`7O{MRJd5PHpFB(CxxYN8$a9)J1M)mj zo(IeGPY{s5ptbs9lM(b{1Y>+X<7;J&jx(`D+ZI9MH%Ggzm9YkHryJmHtWNZy%-HfeZ?B|SKB;~MXjqs(B zI{vK0$T^H%&lumas^fb%BQqJB2G_#K48~4n?EQ=_V(ehXu3>C{#`smi5r?rS8GG%Y zh)u#_=g4lxj%DmQ#?EAn?}pVaW9%`;u3&5@V_#EsQ_;jwt}pWWjh-j_VUxfbJiZGrz+1^V};@62?ZnLqX2?Q{O%qqy)>de8=Ns*h$|n3~i&nX->#-LPu@!Ip^a)agO3( z{O@8aheX@UEtj7 zJK$G^&U3zYpTh7It^fLd&aK6Rz8~-BT>G9W0B(BEL!8QIO5k9 zd==^6DLi&#vGZ)RT&-;Ko>G2Ly{Kg2inRo{)i9~Jr%h2MaH=nP4J|CCw2 z55bmRFzFhfVJPU_|H5m0SE5J9xV)GVINRknd2>-ghW~^E2hVZyIeu?KPrO-pc6YI} zqiE9Cik*9lry)L2d^G#R@>6EI<^L70Z$8;~oU;=5B@f@`^Tm9a&&qf9BZbaO1;t2s zvatATMZTvC%QO9&>MIURxz^L4Df}&w`jRW1%OU5|{`A0^Zu_IYgG4S4`hm~+%!zO_ zUF}10j#t(^2|6>J6P()B4bAI=OV(aiyJk^+Q?paEwq@0d;F`6~!L<#wYl8J_8d{oz zE9+O)emLlyiNBx|{3!mME1YVl(P=!U{X|4v+vBtZBtl}~AIZFbI^ z>$Wg^$$4v6)JB~17B`<(Sy@^-cX@SFeN83WZmeH(DW0{}s~6Usw-{M9b=8fP&5hOd z%}onyA`zs`tzNZiZB2Fa+D0ZsGFWD7EE>u3mX&WG!z@F`%Ds``Y4J2&o~)U$JrviY zh?7wV5(JKG7}J}d>Es`@i362T;EN>@!{PIl5a$JmF1r&C{1HyRA3CKUz)_B~0%70r zNJkh0!fOzwG0Sg37(5Yq2*bERy%S+zj^hj?>_eysLoe(>ScLDUqVd=z>HVby%B z(+JaO_+o@f5Z-_=@NviKK`EI*G910>>Fbn8Nfdx)1n14L!{8BF8xs zVH(1HC1L268yGe_&JPg=uXUXJ5e9l3=TU^QuR6{%2#0QRoZSeMUw51-KSTI!$2k&V z)vcftVfZ`1i?HW=jc-@TZP*CqnXkit|ZaTm%!r=Oh-S;RNH(D9|=l}I1t_=51TRUP8^!iOUNFvk}F{~L}% zd4!>(0UrZ?9P9Y1jzhT*I=&u^OY8)|9|BK41Uwjr`ak%LTXVus5m0=@05KZ1T65{2`N{!SMEC zNn0QMBz;v_j~HUOXxp)2ZoY+Wf6g}jvFSFPVfZ>^=nF5`blH3xHkkBe?fCh&TySM}e(2I{ znDgF;!j`Uh4qe(Zve*!s@sC}i>jj}NSbr(3NdDQ-mZPo0{Bm2)^l#9FX%ogwIHo;M z)843U$A;cKZ`}6lk(_?nGMi0*8Vr5CcvFb<4wCob_VeeJh z>E&J7a4fE2OV{5gpv&URhj|X@DttFU-fuQ=>P8KpdAAPFF=4q4XXy0MS{)`$*ki&5lVA0HlONP!*yLYi@T@T5 z8WXmf@G28tW5OFv82*aJ6We6)eM5)*E(PiDHRXO_!aGg4&4hy{eA0x^nDCD#Oq;Ok zhZ-Nh+d;fC+56-GoP*@FWvDrhX9Ld13j6r8?yIH3*+>%7txtr0wnR z6QRdiAI6GEY(lA|vOV0vu{xMF~X$z_j1;Y*qS5{th-s0xdDl1D%Pg`Ey zR9{nB-_+b#TfKT=&3TKFSW{QsSlQfIUEkcauqG0TEC@x`Ip;T~3VKyR&)ctEirTT* zKlHE1kNR?v%+@4m3YNF5oPdZ~P3zax5YuM!JM^QzEL!#v&FuQs%UfzA7o3Zpp1x{r zP4%kUh!Yz&#JxkDEh|^8y@IsOd54`ly{WbtU5}L4ta4&QZ&_BolMbHV+H`4c^BRpR z_)h6*ZE9#Cl5y<&Csn)Nb(DYt())Xl0{+tQ5D=zU{62F$K$Uf)m) zft*>t0)*dA8`$ofi%Yt3bqHFcL&UfNRKxB>#eAz4|oYHd?3xVU2dsud{H zvb=J6{hAfEjZP2rI2G|3^-a~Q8tSU+o%5UYgkVZjO?`d6W)3EsKCAoB_YYhO!!kWc1D;LkIj6e}Zy*-3Fsl);$ za#UT@T-#XLRC{?#?V1{_598~i3z%%Ww$@lXODdOyfP3*7mF4H6mFy`ot9H$bRqqU& z)2J1(5yvyI9)cAo&1Tc$(<{-5C8g}l>6K1XGRsU`)r3WE z9J4N~9m|uNB^n85KrHCx`8z_BJ&k~3+~N5bJg~HRctG0JWxQ?^ z_Qc#JYcH!^vk3KPFFB7h+-clm7T8>4WAAzbLZ2>@5y)66v&^Eqa<2wEYHo2Cm^*V& zywgbvqZ9Gun`09BZ_d!ucfp&p0W#p7@>)}OsvFIjBnmz~!ClAA-tnrye?K65jb z({UHWzroCm5tu{OzsbxTTHkeJ$L_hC9NIP&Yp#GvQh7mbQ_E_YDo)c3y}vwHo04XW zHMg$1sd8m?O>HxkPN-5$coYteTezjEcD%xKvI@IK>giOkYq_%k!k8~>dz-B$_fhwp z4kKwzeKU;!ED26i*Sm;wH58)L)bnm&Y^-gn|6FZEW8C~MV4T~~(o_e#zvi-tP}%z~ z;5@q&>-yr^mF)GFcLAT?xj9XJ?*gvs#TnX$v+)^2!L9-03Qh!@_BG9o>)FM{r&TUz z7gO&5&4QU)bk(?Z?bKWkreBV|HGUrq z7CW+C?*PTBCK}?HSJ`zl${D_`3C+>S*=7JXzoXiA`1-PH8@;E+KP2McKVAXb>%pu{ zSGS!8Cmmcvn3OA)*Ed&IL(|r*UDH&LJs`Fa&2^39c0$jG#;-q1D>6}y!{Zl$C0|?J z7{Mk0;+s{(u0s=U@NL(-3hk)7E(~;B8tu_pi<{@dNMBvQ23{FS@0WCVG^#7jR-m@B zwza0Vp}BtT8j_OC6j)w+Y5f}bZJKN9m@}Bkfr*|;AIhW~*0A(&CRNxa-7MtFRk^yl z>9R)b$(f{dQf42%vbug1Gt$hcZLM!6u!n%%l|$N#2+Aa4ZkK@ERT1hDi2FQ3n++t5 z^$O5bTYDL^wz$w*f_(xu*J6W2uwOvg>Jdy5TwS}mreQt7K?AN{yG}3<85lCd>|uhi z#%fkK5KI{mn_Pg7uhJ=Y3M!ogR#(@rah{#-6s)d8S8Hopu&t~E;czsZaFKIz0ayIu z^PCO7RZUpEvmD2JS5MHd&dWvcK{($&%=r!gQy2uJc3Rxz0}tG)||dc(&Ni z&MT8kLksF_C=1n%>z&bqoPzm{jn(UER6DzTu7T~mJk2RS+e!PN%AMaAE^zh~&fy|< z7T2(P=l4aYn?-V+^L&w0Ff-!3zpqaU}dUwepv8HJbzhO=)_KOnEpMT zK2*r`-yl78ii6BkkvZ3Syugt7w<%d9b{*;^aikzaVm#pNS6T`iKb^4Ffo2q zILo=Ca4r(drC&&Tq;R&=Q#1#&yBVWFeKt~b8VW?}FQ|9^T2$!tg&e0qR{V9&uELcq zt5%`bZ;+7;fxHwSu~Izx_~^wqYIQgMD&2S)-58pQjN~k2P~Tl$#2K1E{nTt$I34M= zs~d#8UlujMj2BaFqQMT0x1V&9lhDHHK$qepb_O0peDu!6qvykDVs2&}6Lz$JKMfU- zxgWNNPEX1I(%%06O)7OBp7ihR>i;_JKed&7?U4Vt&){)P|F`cYaDF^#+(mtyU7pve zVYSA-Z|Kv9I0bY`{A^N<^Zc~JqS%>~Ej)^nAHl@TabG(Bv;RJMu^e?+#zuJ8T~@z^ zhCAK4W^$?X6v#Sl}cM zEOl->5GxfI@klwQj`bV;=D;&hR2H)f&Nb`K9}k?1w8d*1n`>8adEJb)5$oDhevH>{ zKi97p{6cd_fFtq30q9H3M-__g(-Sba)H+Vj0jE2= z4|La>I|8yJ#9DzWeOCb0%0?_w==aqJ*ahP|2fjnDzi|+la|OugZ3RoCusMMD)&rKn z_(J4&B%T@bSHgPqvc_e{@B!xtHEu%cK*&ZbFs43-N9^->^zo6p(hg?qKr)~c<$Btj zA}6*1A3c}R{MvyW&2Ju9fI7f_Prd zXI~ee={TRs1Q9gB$gZiwh?#M`{-9NB*Iw4rkV$#@pdzQIn`KRr7Y?$<))+U&ILj~H zDmiX-Oy|E4>9r&y*28D&dOrJZU^8bszd5*cW<%rJn%br&F<3y%zu)9rP}MWv1x(JL z4x#hl-zCVo>QIctt>|`9x{uGEyU2pr&-hGkmBB4t-coZ}ZSz8$t+l=zO@8&T+3#>d zeEl#G3!*S;50JEK=Z?e70p7!0CFHDc=VAJU@4@LsMX~Md(~vy-{+scnJbQjGaXg(u z_ps*b>7~v!(>(`24*^5Zi0~l$OzJ1oa}SvALDA%Q3(!F9Ha=57lIQJwChwQ$!;dybmJRUI<2P>EJVVHJ_WmgpTUJ*eO-PK3^ah3^jz(zFuEA z7z~yV`5MZ5edP_YqF}JMC=_f6h62G5{>npDfj}@2s0s%|K}4!hIuP?ACmf6wgpviQ z91IQl0-;zzpRYU^?)44%LcP9V70Lt4L`VchDA-#FI)cCyM4dn=U6}I4e8FJK7wjoW z0@Dz{w6CWi6ddyP0cj{~2nx9rW!fnRae_Bpk}d#QC>|?F7gvR=!oZ&PnUcZs(9nKW zz+c!`4D!&SFvu*=APfe|LxE5gdH`(539%ob5o9C_(}lgo>4Kj9`zH4l^pt=L<$+K` zARGvTJ18Cyo`G4R^751q2+Bht_6fZz50wiqgMn}rn=DTkhr^&MT}UFxEi%h?qOT~} z>uU&?11*yo;4csifeoSFBC-La(GW=cP`SZy1q3+dy^fQHa%epQzqta{lM2EW;W*CS zfZy+nInGfU{?L&+KX{CWzhK~U1K(`m1_M8C;FN&_@6+|2V|D$H11A2Efh$dZ*uYmB zxXQry8Mw#5{QVcwn>6r31E&pKYvAB<6D%zTCjG3|wX4FBv##;9nZpIbOGS^3l3}(7;z4xZJ=m8Mwi~b>J)8 ziy8Q92JSWR&kWpWU_baG{V~5Ew7|e216Lb3X5bqQ?3|$K`?)P|;6E9-%D|JrN5K!b z4ajm988~fzpU28q!)ZF-%2SVltvn?SY~?9sU@K4MaG4Olm8S*+TlwiVu$3RWSXkc5 zPujp%euA@gzLlSH16%ot8Q99tkb$lIIB?Yvzm=aV10NXF{Ae(+m7kb_t^D*F*ngBR z-)CSeKS={y`3at(+q3dhWne2maPtT~R(|>nY~=?YAj!A#lQOWCA7_rvxAGG(u$7+% z16%p&F|d`NJ_B3%3C-2`to&3N*ve0jfj2^4s1MTfbotwj{FHxG!*7^;=WGohh%3>-GFmA}*{bpH2{FZ%3U4L@SwDg!@n;2s12!{8e-upR&4B3<8(f4PC}`1cvu zj(^g?cKnA7Y{x%sU@MPKnZ|GBA!J}H4`BmadFVB;m4}pptvopAX?#{5LI$?-P;Ou= z4^;-X@(?qyoxeQ>w)3~oz;^zo3~cAG^GV&loxcqRw)3~gz;^y74Q%Ic%D{I12Ff)) zJ72>Fw)3^Yz*c^f2Db7WJYUzh@*6g=mES4@Tlq~H*vfC<0$tzAZ`i<5=vm5R>O!6W zeFK*-)v%Svq=A29%NzIu(7UYfz<oj?0SX1*DCgMq86b^b3695e7yC+hO>r3ig31|Bl-Rs*LETzrx)A6~A@ zml?Rhz&`;@dXu#}|FDyF`QS-?{|u>-+P&c=NmX_U^}1E23}$E zgR6A;ZyGpk;NKd!%D{)6s`1ARywt!+1K()iw1J;AaA38@KQ*N5hYjpMO2a({w)45y zz;-@6Yjk}(pTh>W^SR2vc0TtQ*v{uZ1KatWG_ak|DFcTLeQ5(%7&x$2w|||1hYb8% z13L{me@3b9PnCf$H*nIxw;MQR;GY{faJjBuGSl$Gz!w`hY2cq2IA!4Xzz(3i1R8by zGYwp2;A+5}4?PC{s)3y*UH+E_4jOne>;RT8H}FCOHyHQ}2JSKNPYvALqVXvM4;lDm z*ag!56*|A(z_IljzR$qHD>Xb7>$;S0({RMVy;o`YDg&2yY4`yH$Ko3PJ7Dsor(45u ztm87D41B+VoojXeh=GF!z5?qs%QqN!tAS$%cIN8*J_Da^;NX`vzAgiY4E%_J8w`99 zj*y5yX5dd7IBDSP44g9X;|5L}_$>nmdUSiI!Y+{h8o18DNdy1Dz(WT9n}MC{bp7Mc z)b&FKju^Pgz%2&uGw>z@rwn|TfrHm;e19--*uc|1qVYEv_;dsJ8u)Sprw#ml0|#%= z_y!DIZs7O8?qPq2419)xgPU~uPZ_w}z}FkN>PDUa3j@c#s$pxt3>oY5?Lv|Y*4N?x*(7Rh!D&46GiO=iNx zly)X9AyE?AIwdVm8lZ6vqdaE9K+32?X-i0p(?Y|erAkB6mcW$n@BY5$+;h&oySlq8 zd-wy5kEPE&@5ep&cV54<@n<#s+}&z#mX!xHe zcad)x)bR4;IdYx+Bv{^$W%BoEzd|_jQSUC;24VjL$|MRsW`cTO^zQY?*BOv;1e&z3I;e$)-OWA)EfJ zPB!g*fo$4)?lBF|wD&yue#!4yxm^CUYX2B{g8U5mHu7`iJIUWB-$VW(`55_>NeeWi3Af;>TfmVB7}Jo!%Y zx5$g+3qHsCC0|4SOY#=-^W^KuE94satlgTQ+sGTqcalx{+(S0?^%!{z++VwXA-A}s z>DfVECf`NwdP41=BM*{g94-Ejl0QHmd{W(?ARi&WL_S8|_D=P`@hNqG5PZ@3x!nGB zXGG)0b-7&bV!Y1_qiTOK+1!tQ4SAXNKS4J4rT0e+dGbB#|M$sD?^S+@T;HR7;~5ek z;Za<`M0@Ld)@ zN*;yWE&N6D3f;d#mhZ0EUx~g~$}@-Wr2INS9)(;idaTkQXlJj(iil{`rI7oNlVr~M}K$hGRf zMqb2=F5!KEJWBr$lDk;H$H~WjM%{mboMU_WSMoCL&p21(&qI!p@NXiI4k_;^AK9sV zJ9&`tJz(6kzE4Dq`GL2n`xnXiS>;RCOMH+|$k&mNkl#bD)BmrLM;}uEA15z$DL+dd zr2m%;|DM_x&eQl7INqBh58kWxpCZc+BFX~ z3)H>Lqe*y=kh|D^zDus(toD@))jc+BMee^WydLGVr2HN7-A^h1*hOleBi~GZ%adw< zANj}=%Ks*OHr5MID6hL%`89Gc`LD^hknbQrO5RTXA7Nx{q@dxwZG-YC+xz<>#((&c z{NF|Ug=5Me2IKj<$N~O)DB#DH#cT9)GT?JAiTqppO##mZ{O19md#UgL=L5bs;BN%H z<#oRQTEO=Q{H1`;zs&c4L%{C~_;|pt2E6%lKfFr74+s2Wz?-h{{f`IyK)^2qyivb% zwmxA7DgY{wfT%%jF)2ISzwO zfw>bfvTg3`FyDarCzyYR`6kSZFyDb$fsw6)e*yC{%zwfx!MqCdJ(%yq`~c<&m?vSL zf_WN7WbprnIUBWf4$QeQB8Q&`b3V)kFc-pH1hWC=5}4P)Tn2MF%oQ+K!fb@O3Pxo1 z*TY-`^P@1=!n^^d3+9b5e~Y+Yf|0$1--USv<~5if!r*72ky!`7XTn?zb196(|0bCK zuY=a>peyGoY9Z(jP6cl81h|K!fYACAAA>ptTXn-IqT`AkZ@5i_x+c4UB~;xQojkM< z+aU+CyW4vZ9bfRCL>uJ2Cx=`w#W0MboCUA?PQozcJU|>|bgt7u-xgc{{Z!(C4KF?- z6`x*{kmBd=88_d?$$soSs#O+>_f!+?Jc={!JxobjbY|9%+h#fT8yyh!T{&5g-Fex! zJA@1V9{VVq*fQ9W@7t!Grtn=PPgeN$a!8}`v4f=B;247Mz&oy3J)^5c8McRj-@#uMMBMV@?o-&pXLnoCo(fZ4iTZ_*U&~!^56;oFCSfyeocI z#twMmvathSD_j$I&e6=quAFn7j-yOxB0_y|E&C6T>a-ewb0DZyul8t>jMQNJb^m*$=VzsPgJ%r{()LD_(xH~SAHk78sLxeUw$Kns# zRZ^o1)ZRebOPW&JP?;M_^XD?CaZ7QQrohc{X4M#Do~_d?>gW%8**Xo#j_*3DJsto1sbSaInhG{2H<|oLYNlKE zBx(X$_GD&&{BCfznXb$d)w?C*YVOVIb!*jQpwO*N?_rZ*O*Bt)q{7XKFz&sZ>TWZ) z0<`Wk^&)^af-$=PTlb36wo3oo@a^dNZ_9VA;JF+fE#*H(nPI zNAKSd5I+x<@g;167Tf$bf!MeGj%8ERm*Uat=S#7(iuqzYBa1ZG$fxdoReZrSlVM*k z9~{MEXr}%%5FazvBYn9y9!S*wwFRk{93-7Jy4^rsYD2O0q!G7pfq{h5*3AQQV@lhe z`F)8r_acz!S_1r*n+W6=E+2sQ!Un1nY2)flcjG+>O3^c4&`^GY{aRzU#PT&>?H?Bg)zNyE#_(rnIFH~ED64VUkeh#DB8$)zYj2#&B zG81OB7L`IrNiCYBG8DOD2CCVhKXbk^f%adWi!Kpps~mbnw@|$VHPC3RQ7~BNp3qBC zB30Yv17lOAcWpy^-MzQG8<#S;`8ic7DYlxD;l9b)xm$5POGA%Q`lFYT3y{e7WMwY8 zmqK30Zn=6z-$^azBBpMGVlG!|mFbSldbpY|4e!gBM7gna4rvAM6mqk4_)5iws|5sH z$QrQcIS~7X3&=f|2C&j9&1`5F?iw4}TZS%e_oZ&{ohd+ZG8Q<>^;sw~h3+`N-)gHB z56Im)<=X7b)LMilH6jU=@YXVw1te3##f@8Yjk14=-l(3*>RhCs(fLF)Ygp~oEISk1 zz`@9`*F6@xS?%T$JIrdA3VHi*77E)7ZXYu&3-rVfE?jBx47?5v0Obwd>L`;k2|q7JYc8mq}#EBC|vxvXV>1ce^Z`Qwbo%zGEAFD z{|jzDr^DSM$_?#_rz+8NN;j44HgO$|_L{o`2`LnJ#CxztSt?;xVPvOh=Z9zQcjEb_y+F5zKhC)#+|8dRe7#l5IU8s#<9lLCkow@znb=p{Xwq}#Iq@B&Djjy9OvU<1_jq^c;MHXhHqP&Y>91$6ZC^^hr_b!G+%u(-!eNn zSvrhf(0-_+rxR7V2*l~u+D&T|T77n2#va|1_+!YwmUV4n88|4HVe;gQjq=F+LK3ESR-G5kOr7Xs5(_Dv1ionsns);B?( zlo$|e1-TPx!&|4v4iAlBQbLA7Z8y4TLUEiUu8#6oz@?{l$^ZoyG=sLvtf0eZorZAt z=yuXT3YamE=OCO=HBeKqXjyPrlc^sJ$MFwRxRy1pGwqeTS=|O^oZ|h5%kdgqiZ6fK zJfob}Kq|`UJCJ`e`f4EQwC3A<`#Jb+e&b~*z-03jNGsVq1)@nNPpd7!X9}dj8hR$b ztq4Nd1I#S-WC}86e?umJjYOkto*T$PnLLL=4?B|l!I>&Mfi(DfrDBFQ@iE)Nn9&e8A4A`D&36f zqLM5LPtDFwl;;kO)no=s!dI=SW6Wus*4&!eHYsjX^yq0< zpK$AQr^BN4_+UlI28W3d$smf&f{52(_E?`yS6$F5vah<>Anoij z>Pj+%mWk{*EhtV$SgM#Y6)`F~lPSwzEhNRQEM0VoR&%7CCsLECZoKJveGeMW&L;~Z zZJNDlD-Sm76q-8j!Q?w8@ln!F8E48BJ^;8g&tF$=oUPPCP03m?C*E*F5CxWobL0&@ z;tXr;*0EoiFVD;(`G>smkjh6j%0igC=7N|jJ=GlH3Cr?EaOx?el{FBY;4G4wYC(9? z*+zRm z5Ftn7!aYVFq@dlU0?SwAFv--7k@j+fG<-)^Pvlp<&=L+FQOn}q%Lr1VQ>UbNu`z_4T~vNhjD4Nr3I zTuM8NKI%@>HJgl@4?Hj>Qv z)a$oxrKH%IhSa=aHrkQb-s`0oU3)DvQ& z$Od}DcWXZbl4@zrC`V^r z%l*EG9ZcH0gl9pI(`;)^M`=X~OImfyPSiHM#3pvLgqvCX-5l{&7Tr%3>~$&h^1}7m zIkP<`nbo+JVwR0Uc}LA2-{mM;|HF_aDFuw??K>kC)h9c;rsgoThvW>wa^}F$zGz39 z%n15v^(rvVlh;e7jWQ&fwq6!~!bN282PQ1Mh9i?i71(`to)o}f;_jm1yB_y!t*v^t zv^d{(B&rc8QOKyiXzIZ0@Y<`1f+(oaHYZ!K{dU(@-9{y2#uuHu?~qZ@QvHeRQzW-G z*=~y@pq2jL*l^o0E%7uB z!2D3HBeipAukp2VY`t;t9IiATwxx)W{+`NX51WPH6zSIOuK zDWUf!LN6v=75kE|lEL>S)6kbpY0^<45qKf_XlpW6eFF)P{mIY=k{%2BWU>myWN3x% zWa$*TlVwrpO%_I>FPVozUrJi~QsNj$#!<`{WTc5>VBt=}Xy+!Lv(q($x_0)SX;6FD zE~xEm5>#FWxQQ_l`W-#N6X!kdQCj<~2Su1|)iEfnRy^5a$>=F_0c0A?O2VV_U{E7< L2%{F!b(#BLx$q`s literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..589854d --- /dev/null +++ b/main.cpp @@ -0,0 +1,13 @@ +#include +#include "Dictionary.h" + +int main() +{ + const char *filename = "input.txt"; + + Dictionary dunyasDictionary{filename}; + + dunyasDictionary.print(std::cout); + std::cout << std::endl; + return 0; +} \ No newline at end of file diff --git a/output.txt b/output.txt new file mode 100644 index 0000000..eaacd68 --- /dev/null +++ b/output.txt @@ -0,0 +1,305 @@ +<<<< A >>>> + +a (2) 37 46 +advertising (1) 9 +ahead (1) 46 +alive (1) 16 +all (1) 47 +alphabet (1) 27 +also (1) 8 +am." (1) 33 +and (13) 4 7 8 9 11 12 22 25 29 33 40 41 46 +are (7) 11 14 16 25 40 45 47 +around!" (1) 29 +awful (1) 37 + +<<<< B >>>> + +Blue (1) 12 +But (1) 46 +bat. (1) 46 +be (2) 28 29 +because (3) 40 43 43 +began (1) 7 +behind. (1) 46 +below (1) 14 +better. (1) 38 +beyond (1) 29 +big (1) 46 +books (3) 4 7 8 +born (1) 7 +bought (1) 46 +brain (1) 31 + +<<<< C >>>> + +Cat (1) 11 +called (1) 27 +cares (1) 37 +cells." (1) 31 +characters, (1) 4 +children's (2) 4 7 +come (2) 45 46 +companies. (1) 9 +cry (1) 43 + +<<<< D >>>> + +Dr. (3) 1 3 14 +day! (1) 35 +did (1) 25 +do (2) 33 33 +don't (2) 41 41 + +<<<< E >>>> + +Eggs (1) 11 +eggs (1) 33 + +<<<< F >>>> + +Fish (3) 12 12 12 +Fish. (1) 12 +famous (2) 3 11 +feel (1) 40 +filled (1) 4 +for (2) 3 8 +found (1) 29 +from (2) 46 46 +fun (2) 25 25 +funny (1) 4 + +<<<< G >>>> + +Geisel, (1) 3 +Green (1) 11 +get (2) 35 38 +go (1) 29 +go." (1) 20 +going (2) 37 47 +good" (1) 25 +green (1) 33 +guaranteed!" (1) 23 + +<<<< H >>>> + +Ham, (1) 12 +Hat, (1) 11 +He (2) 7 7 +ham (1) 33 +happened."T@� (1) 43 +have (2) 45 47 +heard (1) 45 +his (2) 4 11 + +<<<< I >>>> + +I (3) 27 33 33 +I'm (1) 47 +I've (1) 46 +It's (2) 27 38 +imaginative (1) 4 +in (3) 7 7 11 +indeed! (1) 22 +indeed, (1) 22 +is (9) 3 16 16 17 25 29 35 35 37 +it (2) 31 43 +it's (1) 43 + +<<<< J >>>> + +empty TokenList + +<<<< K >>>> + +kind. (1) 45 +know. (1) 19 + +<<<< L >>>> + +Listed (1) 14 +learn, (1) 20 +letter (2) 27 27 +like (4) 31 33 33 37 +lot, (1) 37 + +<<<< M >>>> + +magazines,T@� (1) 8 +matter (2) 41 41 +me!" (1) 48 +meter. (1) 5 +mind (1) 40 +mind." (1) 41 +more (5) 19 19 19 20 45 +most (2) 11 14 +mountain (1) 35 +my (1) 47 + +<<<< N >>>> + +Ninety-eight (1) 22 +Now (1) 47 +name (1) 3 +never (1) 25 +newspapers, (1) 9 +no (1) 16 +nonsense, (1) 31 +not (2) 33 33 +not." (1) 38 +notable (1) 14 +nothing (1) 37 + +<<<< O >>>> + +One (1) 12 +of (5) 5 11 14 28 45 +on (2) 8 35 +once (1) 29 +one (2) 16 45 +over (1) 8 +over. (1) 43 + +<<<< P >>>> + +percent (1) 23 +places (1) 20 +poking (1) 29 + +<<<< Q >>>> + +Quotes (1) 1 +quotes. (1) 14 + +<<<< R >>>> + +Red (1) 12 +read, (1) 19 +ready (1) 47 +real (1) 3 +rhyme, (1) 4 + +<<<< S >>>> + +Seuss (2) 1 3 +Seuss' (1) 14 +Seuss, (1) 3 +Smile (1) 43 +So... (1) 35 +Some (2) 11 45 +sam (1) 33 +say (1) 40 +see. (1) 47 +should. (1) 25 +some (2) 14 46 +someone (1) 37 +sort (1) 28 +spell (1) 28 +start (1) 29 +starts (1) 27 +succeed?lT@� (1) 22 +surprised (1) 28 + +<<<< T >>>> + +The (2) 11 19 +Theodor (1) 3 +There (1) 16 +These (1) 25 +Top (1) 1 +Two (1) 12 +than (3) 16 17 45 +that (3) 16 19 20 +the (5) 11 19 20 27 31 +them (1) 33 +there (2) 29 45 +things (2) 19 25 +this (1) 27 +those (2) 40 41 +three-quarters (1) 23 +to (5) 8 28 29 38 47 +trisyllabic (1) 5 +troubles (1) 47 +troublesT@� (1) 45 +troublesT@� (1) 47 +true. (1) 16 +truer (1) 16 + +<<<< U >>>> + +up (1) 31 +use (2) 5 28 + +<<<< V >>>> + +empty TokenList + +<<<< W >>>> + +waiting. (1) 35 +wakes (1) 31 +was (2) 3 7 +way." (1) 35 +went (1) 8 +what (2) 28 40 +who (4) 17 40 40 41 +whole (1) 37 +whose (1) 3 +will (2) 19 22 +with (2) 27 48 +works (1) 11 +write (1) 8 +writing (1) 7 +wrote (1) 8 + +<<<< X >>>> + +empty TokenList + +<<<< Y >>>> + +Yes (1) 22 +You'll (1) 28 +You, (1) 16 +You." (1) 17 +Youer (1) 17 +Your (1) 35 +yes (1) 22 +you (12) 16 19 19 20 22 25 25 29 37 40 40 47 +you'll (1) 20 +your (2) 35 35 +yuzz-a-ma-tuzz. (1) 28 +yuzz. (1) 27 + +<<<< Z >>>> + +empty TokenList + +<<<< [ >>>> + +"And (1) 22 +"Be (1) 40 +"Don't (1) 43 +"I (3) 31 33 45 +"If (1) 25 +"My (1) 27 +"The (1) 19 +"Today (2) 16 35 +"Unless (1) 37 +'Z' (1) 29 +1. (1) 16 +10. (1) 40 +11. (1) 43 +12 (1) 1 +12. (1) 45 +1904, (1) 7 +1937. (1) 7 +2. (1) 19 +3. (1) 22 +4. (1) 25 +5. (1) 27 +6. (1) 31 +60 (1) 8 +7. (1) 33 +8. (1) 35 +9. (1) 37 From 7930acd38a0f200a25619b04eb657bec18a4773f Mon Sep 17 00:00:00 2001 From: Dunya Date: Fri, 27 May 2022 02:02:15 -0400 Subject: [PATCH 22/24] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f15d827..b8a4240 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ A silly programming assignment in C++. 🤷🏻‍♀️ How to compile: ``` -g++ -std=c++11 ArrayList.cpp Token.cpp TokenList.cpp Dictionary.cpp DictionaryDriver.cpp -o DictionaryDriver +g++ -std=c++11 ArrayList.cpp Token.cpp TokenList.cpp Dictionary.cpp main.cpp -o main ``` How to run: ``` -./DictionaryDriver +./main ``` From 3468837ee4dc3b2396f06e07c927e619b685c252 Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Fri, 27 May 2022 02:02:51 -0400 Subject: [PATCH 23/24] reorganize folder --- input.txt => input_file_A1.txt | 0 main | Bin 122152 -> 122152 bytes main.cpp | 2 +- output.txt => output_file_A1.txt | 0 .../ArrayListDriver.cpp | 0 .../DictionaryDriver.cpp | 0 TokenDriver.cpp => tests/TokenDriver.cpp | 0 .../TokenListDriver.cpp | 0 8 files changed, 1 insertion(+), 1 deletion(-) rename input.txt => input_file_A1.txt (100%) rename output.txt => output_file_A1.txt (100%) rename ArrayListDriver.cpp => tests/ArrayListDriver.cpp (100%) rename DictionaryDriver.cpp => tests/DictionaryDriver.cpp (100%) rename TokenDriver.cpp => tests/TokenDriver.cpp (100%) rename TokenListDriver.cpp => tests/TokenListDriver.cpp (100%) diff --git a/input.txt b/input_file_A1.txt similarity index 100% rename from input.txt rename to input_file_A1.txt diff --git a/main b/main index 70234df05b2f9b395d3031b3214eaa7191030f78..97e39b36bb5eb57a65a63bd89f2ab365c9deb131 100755 GIT binary patch delta 281 zcmZ3ni+#l|_6-tDj3tvLncM{}_AoFoGB7aw0%8!bm|VzYFKDtCB6@-eB5JbvAk%jy zfkn5v7Mc23$`O301DyCy@l~? z6622P=aLw&iJbny#K6Kb@h6D93?`d@ZQqg1xI*3$<^v{v1_pk%1_qFkARn1Q`In(S U%!cwOLiwAZeDCcGn;F|90VxtzIRF3v delta 282 zcmZ3ni+#l|_6-tDj5(7fncM{p_AoFoGB7aw0%8y_m|VzYFQ~H@B6@-eBC50bAk%jy zfqflDKMM;@?AA79nam0ojoN&IHF+DWUP(m>!}N={7=<@`?>WjmF@a;Uz=0i%29r-7 zIM3n?G=K8OLn4zm9Bg3hoNRdLI?HL8kiy{xmfsML`sNL60Rkw5EB6-0vq_8_rk_h< zye4w^2NMGeOXp7zc^XXq{<(ceGUEz)N0=9w_!$`Z*%}x?MuNO#2IYh71M#z={7xu; O6O`|~ePJ_Wdn5p_@>i<> diff --git a/main.cpp b/main.cpp index 589854d..8287d2a 100644 --- a/main.cpp +++ b/main.cpp @@ -3,7 +3,7 @@ int main() { - const char *filename = "input.txt"; + const char *filename = "input_file_A1.txt"; Dictionary dunyasDictionary{filename}; diff --git a/output.txt b/output_file_A1.txt similarity index 100% rename from output.txt rename to output_file_A1.txt diff --git a/ArrayListDriver.cpp b/tests/ArrayListDriver.cpp similarity index 100% rename from ArrayListDriver.cpp rename to tests/ArrayListDriver.cpp diff --git a/DictionaryDriver.cpp b/tests/DictionaryDriver.cpp similarity index 100% rename from DictionaryDriver.cpp rename to tests/DictionaryDriver.cpp diff --git a/TokenDriver.cpp b/tests/TokenDriver.cpp similarity index 100% rename from TokenDriver.cpp rename to tests/TokenDriver.cpp diff --git a/TokenListDriver.cpp b/tests/TokenListDriver.cpp similarity index 100% rename from TokenListDriver.cpp rename to tests/TokenListDriver.cpp From d460f56e390ee1b2be7085141e1ce0d1d077dd41 Mon Sep 17 00:00:00 2001 From: dunyaoguz Date: Fri, 27 May 2022 02:11:35 -0400 Subject: [PATCH 24/24] push all local changes --- main | Bin 122152 -> 122192 bytes main.cpp | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/main b/main index 97e39b36bb5eb57a65a63bd89f2ab365c9deb131..af9b5a77da78cc9f3981444bf291ccbcbee28a90 100755 GIT binary patch delta 14706 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 delta 14580 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