57 lines
1.4 KiB
C++
57 lines
1.4 KiB
C++
#include <iostream>
|
|
#include <fstream>
|
|
#include <stdexcept>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <sstream>
|
|
#include <memory>
|
|
#include <cstdio>
|
|
#include <deviceManager/deviceManager.h>
|
|
#include "deviceSpecp.hh"
|
|
#include "deviceSpecl.hh"
|
|
|
|
std::string DeviceManager::readDeviceFile(const std::string& filename)
|
|
{
|
|
std::ifstream file(filename);
|
|
if (!file.is_open()) {
|
|
throw std::runtime_error("Could not open file: " + filename);
|
|
}
|
|
|
|
std::string content(
|
|
(std::istreambuf_iterator<char>(file)),
|
|
std::istreambuf_iterator<char>());
|
|
|
|
return std::move(content);
|
|
}
|
|
|
|
void DeviceManager::collateAllDeviceSpecs(const OptionParser& options)
|
|
{
|
|
allDeviceSpecs = options.deviceSpecs;
|
|
|
|
for (const auto& file : options.deviceSpecFiles)
|
|
{
|
|
std::string fileContent = readDeviceFile(file);
|
|
if (!allDeviceSpecs.empty()) {
|
|
allDeviceSpecs += "||";
|
|
}
|
|
allDeviceSpecs += fileContent;
|
|
}
|
|
}
|
|
|
|
void DeviceManager::parseAllDeviceSpecs(void)
|
|
{
|
|
std::unique_ptr<FILE, decltype(&fclose)> input(
|
|
fmemopen((void*)allDeviceSpecs.c_str(),
|
|
allDeviceSpecs.size(), "r"),
|
|
&fclose);
|
|
|
|
if (!input) {
|
|
throw std::runtime_error("Failed to open memory as file");
|
|
}
|
|
|
|
deviceSpeclin = input.get();
|
|
if (deviceSpecpparse()) {
|
|
throw std::runtime_error("Failed to parse device specs");
|
|
}
|
|
}
|