summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSiddarth Suresh <155843085+SiddarthSuresh98@users.noreply.github.com>2025-03-02 20:35:40 -0500
committerGitHub <noreply@github.com>2025-03-02 20:35:40 -0500
commitb88f24b680be34b3669f33214758c76439d7b777 (patch)
treeb9815d43d79b631939cd531512b470829ba16436 /src
parent3fbe74a1067a6e94d62a53d4df834ff425c2c64a (diff)
parenta9af4fd3243e470ff33d50968f998bf78c152717 (diff)
Merge pull request #8 from bdunahu/bdunahu
Added logger class, tests, arg parsing and cleanup
Diffstat (limited to 'src')
-rw-r--r--src/fact/fact.cc7
-rw-r--r--src/logger/logger.cc79
-rw-r--r--src/main.cc56
-rw-r--r--src/repl/repl.py10
-rw-r--r--src/rv.cc33
5 files changed, 135 insertions, 50 deletions
diff --git a/src/fact/fact.cc b/src/fact/fact.cc
deleted file mode 100644
index 026ad94..0000000
--- a/src/fact/fact.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "fact.h"
-
-unsigned int
-factorial(unsigned int number)
-{
- return number <= 1 ? number : factorial(number-1)*number;
-}
diff --git a/src/logger/logger.cc b/src/logger/logger.cc
new file mode 100644
index 0000000..fb5052a
--- /dev/null
+++ b/src/logger/logger.cc
@@ -0,0 +1,79 @@
+#include "logger.h"
+#include <ctime>
+#include <fstream>
+#include <iostream>
+#include <sstream>
+using namespace std;
+
+Logger::Logger(const string &filename)
+{
+ if (!filename.empty()) {
+ logFile.open(filename, ios::app);
+ if (!logFile.is_open()) {
+ cerr << "Error opening log file." << endl;
+ }
+ }
+}
+
+Logger::~Logger() { logFile.close(); }
+
+void Logger::setLevel(LogLevel level) { this->level = level; }
+
+void Logger::log(LogLevel level, const string &message)
+{
+ if (levelToInt(level) > levelToInt(this->level)) {
+ return;
+ }
+
+ time_t now = time(0);
+ tm *timeinfo = localtime(&now);
+ char timestamp[20];
+ strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S", timeinfo);
+
+ ostringstream logEntry;
+ logEntry << "[" << timestamp << "] " << levelToString(level) << ": "
+ << message << endl;
+
+ cout << logEntry.str();
+
+ if (logFile.is_open()) {
+ logFile << logEntry.str();
+ logFile.flush();
+ }
+}
+
+string Logger::levelToString(LogLevel level)
+{
+ switch (level) {
+ case DEBUG:
+ return "DEBUG";
+ case INFO:
+ return "INFO";
+ case WARNING:
+ return "WARNING";
+ case ERROR:
+ return "ERROR";
+ case CRITICAL:
+ return "CRITICAL";
+ default:
+ return "UNKNOWN";
+ }
+}
+
+int Logger::levelToInt(LogLevel level)
+{
+ switch (level) {
+ case DEBUG:
+ return 5;
+ case INFO:
+ return 4;
+ case WARNING:
+ return 3;
+ case ERROR:
+ return 2;
+ case CRITICAL:
+ return 1;
+ default:
+ return 0;
+ }
+}
diff --git a/src/main.cc b/src/main.cc
new file mode 100644
index 0000000..6871fb9
--- /dev/null
+++ b/src/main.cc
@@ -0,0 +1,56 @@
+#include "logger.h"
+#include <getopt.h>
+#include <iostream>
+
+void err()
+{
+ std::cerr << "Usage:\n\trisc_vector [OPTIONS]\nOptions:\n\t--debug,\t-d: "
+ "turn on verbose output\n\t--no-python,\t-p: run without GUI\n"
+ << std::endl;
+}
+
+void parseArguments(int argc, char **argv, Logger &logger, bool &python)
+{
+ struct option long_options[] = {
+ {"debug", no_argument, 0, 'd'},
+ {"no-python", no_argument, 0, 'p'},
+ {0, 0, 0, 0}};
+
+ python = true;
+
+ int opt;
+
+ while ((opt = getopt_long(argc, argv, "d:p", long_options, NULL)) != -1) {
+ switch (opt) {
+ case 'd':
+ logger.setLevel(DEBUG);
+ logger.log(DEBUG, "DEBUG output enabled.");
+ break;
+ case 'p':
+ logger.log(INFO, "Python will NOT be started!");
+ python = false;
+ break;
+ default:
+ err();
+ exit(EXIT_FAILURE);
+ }
+ }
+}
+
+int main(int argc, char **argv)
+{
+
+ Logger logger("vector.log");
+ logger.log(INFO, "Initializing...");
+
+ bool python = true;
+ parseArguments(argc, argv, logger, python);
+
+ if (python) {
+ // fork off python here
+ ;
+ logger.log(INFO, "Python started.");
+ }
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/repl/repl.py b/src/repl/repl.py
deleted file mode 100644
index d78986d..0000000
--- a/src/repl/repl.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from code import InteractiveConsole
-
-def start(user):
- header =f"Press C-d to close."
- footer = f"See you later, {user}!"
-
- scope_vars = {"cache_size": 12}
-
- InteractiveConsole(locals=scope_vars).interact(header, "")
- return footer
diff --git a/src/rv.cc b/src/rv.cc
deleted file mode 100644
index 02d95e2..0000000
--- a/src/rv.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <Python.h>
-#include <iostream>
-
-int main() {
- Py_Initialize();
- PyRun_SimpleString("import sys; sys.path.append('src/')");
- PyObject *pName = PyUnicode_DecodeFSDefault("repl.repl");
- PyObject *pModule = PyImport_Import(pName);
- Py_DECREF(pName);
-
- if (pModule != nullptr) {
- PyObject *pFunc = PyObject_GetAttrString(pModule, "start");
- if (pFunc && PyCallable_Check(pFunc)) {
- PyObject *pArgs = PyTuple_Pack(1, PyUnicode_FromString("World"));
- PyObject *pValue = PyObject_CallObject(pFunc, pArgs);
- Py_DECREF(pArgs);
- if (pValue != nullptr) {
- std::cout << PyUnicode_AsUTF8(pValue) << std::endl;
- Py_DECREF(pValue);
- } else {
- PyErr_Print();
- std::cerr << "Call failed" << std::endl;
- }
- Py_DECREF(pFunc);
- }
- Py_DECREF(pModule);
- } else {
- PyErr_Print();
- std::cerr << "Failed to load \"hello\"" << std::endl;
- }
- Py_Finalize();
- return 0;
-}