From a6fb61db10a93801065d34d19fb6d7166511e58d Mon Sep 17 00:00:00 2001 From: Syndamia Date: Thu, 31 Mar 2022 09:37:42 +0300 Subject: Made naming and slight formatting adjustments --- .../Solutions Sem. 03/ex4/Bytex.cpp | 6 +- .../Solutions Sem. 03/ex4/Bytex.h | 4 +- .../Solutions Sem. 03/ex4/File.cpp | 102 --------------------- .../Solutions Sem. 03/ex4/File.h | 27 ------ .../Solutions Sem. 03/ex4/HexEditor.cpp | 101 ++++++++++++++++++++ .../Solutions Sem. 03/ex4/HexEditor.h | 29 ++++++ .../Solutions Sem. 03/ex4/source.cpp | 30 +++--- 7 files changed, 152 insertions(+), 147 deletions(-) delete mode 100644 Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/File.cpp delete mode 100644 Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/File.h create mode 100644 Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/HexEditor.cpp create mode 100644 Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/HexEditor.h (limited to 'Year 1/Object-oriented Programming') diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/Bytex.cpp b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/Bytex.cpp index 42a03c6..bc2bee6 100644 --- a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/Bytex.cpp +++ b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/Bytex.cpp @@ -1,6 +1,8 @@ #include "Bytex.h" -char Bytex::digitToHexChar(unsigned int digit) { +/* Private functions */ + +char Bytex::digitToHexChar(int digit) { if (digit < 10) return '0' + digit; return 'A' + digit - 10; @@ -22,6 +24,8 @@ void Bytex::hexValToByte() { byteVal = hexCharToNum(hexVal[0]) * 16 + hexCharToNum(hexVal[1]); } +/* Public functions */ + Bytex::Bytex() : Bytex('\0') {} diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/Bytex.h b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/Bytex.h index fc39e7a..67f3c57 100644 --- a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/Bytex.h +++ b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/Bytex.h @@ -1,8 +1,8 @@ class Bytex { - char hexVal[2]; char byteVal; + char hexVal[2]; // Normal bytes are up to 255, which is FF in Hex - char digitToHexChar(unsigned int digit); + char digitToHexChar(int digit); int hexCharToNum(char hexChar); void byteValToHex(); void hexValToByte(); diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/File.cpp b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/File.cpp deleted file mode 100644 index f553bbe..0000000 --- a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/File.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include "File.h" - -/* Helper functions */ - -size_t fileSize(std::ifstream& file) { - int currIndex = file.tellg(); - file.seekg(0, std::ios::end); - - size_t size = file.tellg(); - file.seekg(currIndex, std::ios::beg); - - return size; -} - -/* Private File functions */ - -void File::resizeBuffer() { - size_t newLen = (length == 0) ? 8 : length << 1; - - Bytex* temp = new Bytex[newLen]; - for (int i = 0; i < length; i++) - temp[i] = fileBuffer[i]; - - if (length != 0) delete[] fileBuffer; - fileBuffer = temp; - length = newLen; -} - -char File::bytexToReadableChar(Bytex bytex) const { - char b = bytex.getByte(); - if ((b >= 'A' && b <= 'Z') || (b >= 'a' && b <= 'z')) - return bytex.getByte(); - return '.'; -} - -/* Public File functions */ - -File::File(const char* filePath) { - std::ifstream inFile(filePath); - if (!inFile.is_open()) { - std::cout << "Error opening file" << std::endl; - return; - } - - size_t size = fileSize(inFile); - length = count = 0; - - for (int i = 0; i < size; i++) - add(inFile.get()); - - inFile.close(); - - size_t pathLen = strlen(filePath) + 1; - originalFilePath = new char[pathLen]; - for (int i = 0; i < pathLen; i++) - originalFilePath[i] = filePath[i]; -} - -File::~File() { - delete[] fileBuffer; - delete[] originalFilePath; -} - -void File::viewFile() const { - char buffer[2]; - - for (size_t i = 0; i < count; i++) { - fileBuffer[i].getHex(buffer); - std::cout << buffer << " "; - } - std::cout << std::endl; - - for (size_t i = 0; i < count; i++) - std::cout << bytexToReadableChar(fileBuffer[i]) << " "; - std::cout << std::endl; -} - -void File::change(int index, Bytex bytex) { - fileBuffer[index] = bytex; -} - -void File::add(Bytex bytex) { - if (count == length) - resizeBuffer(); - - fileBuffer[count++] = bytex; -} - -void File::remove() { - fileBuffer[count--] = '\0'; -} - -void File::save() const { - saveAs(originalFilePath); -} - -void File::saveAs(const char* filePath) const { - std::ofstream outFile(filePath); - for (int i = 0; i < count; i++) - outFile.put(fileBuffer[i].getByte()); - outFile.close(); -} diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/File.h b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/File.h deleted file mode 100644 index 753e734..0000000 --- a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/File.h +++ /dev/null @@ -1,27 +0,0 @@ -#include -#include -#include -#include "Bytex.h" - -class File { - Bytex* fileBuffer; - size_t count; - size_t length; - - char* originalFilePath; // There are no actual restrictions on path lengths in Linux - - char bytexToReadableChar(Bytex bytex) const; - - void resizeBuffer(); - -public: - File(const char* filePath); - ~File(); - - void viewFile() const; - void change(int index, Bytex bytex); - void add(Bytex bytex); - void remove(); - void save() const; - void saveAs(const char* filePath) const; -}; diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/HexEditor.cpp b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/HexEditor.cpp new file mode 100644 index 0000000..63979bc --- /dev/null +++ b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/HexEditor.cpp @@ -0,0 +1,101 @@ +#include "HexEditor.h" + +/* Helper functions */ + +size_t fileSize(std::ifstream& file) { + size_t currIndex = file.tellg(); + file.seekg(0, std::ios::end); + + size_t size = file.tellg(); + file.seekg(currIndex, std::ios::beg); + + return size; +} + +/* Private functions */ + +void HexEditor::resizeBuffer() { + size_t newLen = (length == 0) ? 8 : length << 1; + + Bytex* temp = new Bytex[newLen]; + for (size_t i = 0; i < length; i++) + temp[i] = fileBuffer[i]; + + if (length != 0) delete[] fileBuffer; + fileBuffer = temp; + length = newLen; +} + +char HexEditor::bytexToReadableChar(const Bytex& bytex) const { + char b = bytex.getByte(); + if ((b >= 'A' && b <= 'Z') || (b >= 'a' && b <= 'z')) + return b; + return '.'; +} + +/* Public functions */ + +HexEditor::HexEditor(const char* filePath) { + std::ifstream inFile(filePath); + if (!inFile.is_open()) { + std::cout << "Error opening file" << std::endl; + return; + } + + size_t size = fileSize(inFile); + length = count = 0; + + for (size_t i = 0; i < size; i++) + add(inFile.get()); + + inFile.close(); + + size_t pathLen = strlen(filePath) + 1; + originalFilePath = new char[pathLen]; + strcpy(originalFilePath, filePath); +} + +HexEditor::~HexEditor() { + delete[] fileBuffer; + delete[] originalFilePath; +} + +void HexEditor::change(size_t index, const Bytex& bytex) { + fileBuffer[index] = bytex; +} + +void HexEditor::add(const Bytex& bytex) { + if (count == length) + resizeBuffer(); + + fileBuffer[count++] = bytex; +} + +void HexEditor::remove() { + fileBuffer[count--] = Bytex('\0'); +} + +void HexEditor::viewFile() const { + char buffer[2]; + + for (size_t i = 0; i < count; i++) { + fileBuffer[i].getHex(buffer); + std::cout << buffer << " "; + } + std::cout << std::endl; + + for (size_t i = 0; i < count; i++) + std::cout << bytexToReadableChar(fileBuffer[i]) << " "; + std::cout << std::endl; +} + +void HexEditor::save() const { + saveAs(originalFilePath); +} + +void HexEditor::saveAs(const char* filePath) const { + std::ofstream outFile(filePath); + for (size_t i = 0; i < count; i++) + outFile.put(fileBuffer[i].getByte()); + outFile.close(); +} diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/HexEditor.h b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/HexEditor.h new file mode 100644 index 0000000..aa56041 --- /dev/null +++ b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/HexEditor.h @@ -0,0 +1,29 @@ +#include +#include +#include +#pragma warning(disable:4996) + +#include "Bytex.h" + +class HexEditor { + Bytex* fileBuffer; + size_t count; + size_t length; + + char* originalFilePath; // There are no actual restrictions on path lengths in Linux + + char bytexToReadableChar(const Bytex& bytex) const; + void resizeBuffer(); + +public: + HexEditor(const char* filePath); + ~HexEditor(); + + void change(size_t index, const Bytex& bytex); + void add(const Bytex& bytex); + void remove(); + + void viewFile() const; + void save() const; + void saveAs(const char* filePath) const; +}; diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/source.cpp b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/source.cpp index 90baaee..60ea3e2 100644 --- a/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/source.cpp +++ b/Year 1/Object-oriented Programming/Solutions Sem. 03/ex4/source.cpp @@ -1,4 +1,4 @@ -#include "File.h" +#include "HexEditor.h" void createFile() { int x = 1816466293; @@ -9,21 +9,21 @@ void createFile() { int main() { createFile(); - File myFile("myData.dat"); - myFile.viewFile(); - myFile.change(1, "68"); // 68x0 h (value in hex) - myFile.change(2, 68); // 68 D (value in decimal) - myFile.viewFile(); - myFile.remove(); - myFile.viewFile(); - myFile.save(); + HexEditor hexEdit("myData.dat"); + hexEdit.viewFile(); + hexEdit.change(1, "68"); // 68x0 h (value in hex) + hexEdit.change(2, 68); // 68 D (value in decimal) + hexEdit.viewFile(); + hexEdit.remove(); + hexEdit.viewFile(); + hexEdit.save(); - File myFileCopy("myData.dat"); + HexEditor hexEditCopy("myData.dat"); - myFile.add(46); // 46 . (value in decimal) - myFile.add("15"); // 15x0 (value in hex) - myFile.change(0, "4B"); // 4Bx0 K (value in hex) + hexEdit.add(46); // 46 . (value in decimal) + hexEdit.add("15"); // 15x0 (value in hex) + hexEdit.change(0, "4B"); // 4Bx0 K (value in hex) - myFileCopy.viewFile(); - myFile.viewFile(); + hexEditCopy.viewFile(); + hexEdit.viewFile(); } -- cgit v1.3.1-23-gd82d