From 6307d2869e4a5b30695a4259747fff9130faadb8 Mon Sep 17 00:00:00 2001 From: Hayodea Hakol Date: Sun, 5 Jan 2025 14:19:53 -0400 Subject: [PATCH] DeviceManager: Initial class with DeviceSpecParser Hopefully by the end of tonight we should be done with the dev spec parser. --- Makefile.am | 2 +- configure.ac | 1 + hcore/Makefile.am | 1 + hcore/deviceManager/Makefile.am | 4 ++ hcore/deviceManager/deviceManager.cpp | 35 ++++++++++++++ hcore/deviceManager/deviceSpecParser.cpp | 46 +++++++++++++++++++ hcore/include/deviceManager/deviceManager.h | 26 +++++++++++ .../include/deviceManager/deviceSpecParser.h | 12 +++++ main.cpp | 3 +- 9 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 hcore/deviceManager/Makefile.am create mode 100644 hcore/deviceManager/deviceManager.cpp create mode 100644 hcore/deviceManager/deviceSpecParser.cpp create mode 100644 hcore/include/deviceManager/deviceManager.h create mode 100644 hcore/include/deviceManager/deviceSpecParser.h diff --git a/Makefile.am b/Makefile.am index b1d4687..a59ef62 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,4 +4,4 @@ AM_CPPFLAGS+= -I"$(top_srcdir)/hcore/include" bin_PROGRAMS = harikoff harikoff_SOURCES = main.cpp -harikoff_LDADD = hcore/libhcore.a +harikoff_LDADD = hcore/libhcore.a hcore/deviceManager/libdeviceManager.a diff --git a/configure.ac b/configure.ac index e8a8a4b..d062525 100644 --- a/configure.ac +++ b/configure.ac @@ -42,6 +42,7 @@ AC_SUBST([AM_CPPFLAGS]) AC_CONFIG_HEADERS([include/config.h]) AC_CONFIG_FILES([ Makefile hcore/Makefile + hcore/deviceManager/Makefile ]) AC_CONFIG_COMMANDS_POST([ diff --git a/hcore/Makefile.am b/hcore/Makefile.am index 5822241..d87b30c 100644 --- a/hcore/Makefile.am +++ b/hcore/Makefile.am @@ -1,3 +1,4 @@ +SUBDIRS = deviceManager AM_CPPFLAGS+= -I"$(top_srcdir)/hcore/include" noinst_LIBRARIES = libhcore.a diff --git a/hcore/deviceManager/Makefile.am b/hcore/deviceManager/Makefile.am new file mode 100644 index 0000000..bc5f355 --- /dev/null +++ b/hcore/deviceManager/Makefile.am @@ -0,0 +1,4 @@ +AM_CPPFLAGS+= -I"$(top_srcdir)/hcore/include" + +noinst_LIBRARIES = libdeviceManager.a +libdeviceManager_a_SOURCES = deviceManager.cpp deviceSpecParser.cpp diff --git a/hcore/deviceManager/deviceManager.cpp b/hcore/deviceManager/deviceManager.cpp new file mode 100644 index 0000000..6e72332 --- /dev/null +++ b/hcore/deviceManager/deviceManager.cpp @@ -0,0 +1,35 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void DeviceManager::handleDeviceSpecifiers(const OptionParser& options) +{ + std::vector deviceStrings; + deviceStrings.insert(deviceStrings.end(), options.extro.begin(), + options.extro.end()); + deviceStrings.insert(deviceStrings.end(), options.intero.begin(), + options.intero.end()); + deviceStrings.insert(deviceStrings.end(), options.actuator.begin(), + options.actuator.end()); + + for (const auto& file : options.deviceSpecFiles) { + std::vector fileDeviceStrings = readDeviceFile(file); + deviceStrings.insert(deviceStrings.end(), fileDeviceStrings.begin(), + fileDeviceStrings.end()); + } + + std::vector> deviceSpecifiers = + parseDeviceSpecifiers(deviceStrings); + + // Use deviceSpecifiers with the device manager + for (const auto& specifier : deviceSpecifiers) { + std::cout << "Device: " << specifier.first << ", Specifier: " + << specifier.second << std::endl; + } +} diff --git a/hcore/deviceManager/deviceSpecParser.cpp b/hcore/deviceManager/deviceSpecParser.cpp new file mode 100644 index 0000000..c4fcd8b --- /dev/null +++ b/hcore/deviceManager/deviceSpecParser.cpp @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +std::vector readDeviceFile(const std::string& filename) +{ + std::vector deviceStrings; +std::cerr <<"Here in readDeviceFile" << std::endl; + std::ifstream file(filename); +std::cerr <<"Here in readDeviceFile after opening ifstream" << std::endl; + if (!file.is_open()) { + throw std::runtime_error("Could not open device file: " + filename); + } + + std::string line; + while (std::getline(file, line)) { + if (!line.empty()) { + deviceStrings.push_back(line); + } + } + + return deviceStrings; +} + +std::vector> parseDeviceSpecifiers( + const std::vector& deviceStrings) +{ + std::vector> deviceSpecifiers; + for (const auto& deviceString : deviceStrings) { + auto pos = deviceString.find(':'); + if (pos != std::string::npos) { + std::string deviceName = deviceString.substr(0, pos); + std::string deviceSpec = deviceString.substr(pos + 1); + deviceSpecifiers.emplace_back(deviceName, deviceSpec); + } else { + throw std::invalid_argument("Invalid device specifier: " + + deviceString); + } + } + return deviceSpecifiers; +} diff --git a/hcore/include/deviceManager/deviceManager.h b/hcore/include/deviceManager/deviceManager.h new file mode 100644 index 0000000..aed1bbe --- /dev/null +++ b/hcore/include/deviceManager/deviceManager.h @@ -0,0 +1,26 @@ +#ifndef DEVICEMANAGER_H +#define DEVICEMANAGER_H + +#include +#include +#include + +class DeviceManager +{ +public: + static DeviceManager& getInstance() + { + static DeviceManager instance; + return instance; + } + + void handleDeviceSpecifiers(const OptionParser& options); + +private: + DeviceManager() = default; + ~DeviceManager() = default; + DeviceManager(const DeviceManager&) = delete; + DeviceManager& operator=(const DeviceManager&) = delete; +}; + +#endif // DEVICEMANAGER_H diff --git a/hcore/include/deviceManager/deviceSpecParser.h b/hcore/include/deviceManager/deviceSpecParser.h new file mode 100644 index 0000000..1b3a27b --- /dev/null +++ b/hcore/include/deviceManager/deviceSpecParser.h @@ -0,0 +1,12 @@ +#ifndef DEVICESPECPARSER_H +#define DEVICESPECPARSER_H + +#include +#include +#include + +std::vector readDeviceFile(const std::string& filename); +std::vector> parseDeviceSpecifiers( + const std::vector& deviceStrings); + +#endif // DEVICESPECPARSER_H diff --git a/main.cpp b/main.cpp index 7e6a776..d4c8d12 100644 --- a/main.cpp +++ b/main.cpp @@ -2,7 +2,7 @@ #include #include #include -#include "deviceManager/deviceManager.h" +#include int main(int argc, char **argv) { @@ -26,6 +26,7 @@ try { } options.dumpOptions(); + DeviceManager::getInstance().handleDeviceSpecifiers(options); } catch (...) { std::cerr << "Unknown exception occurred" << std::endl;