Converting to better_enums to support gcc 8

This commit is contained in:
Ian Roddis
2021-08-27 12:06:36 -03:00
parent 7fa47c1c4a
commit 307e0c0559
9 changed files with 59 additions and 54 deletions

View File

@@ -10,7 +10,7 @@ find_package(Threads REQUIRED)
include(cmake/rapidjson.cmake)
include(cmake/pistache.cmake)
include(cmake/MagicEnum.cmake)
include(cmake/better-enums.cmake)
include(cmake/argparse.cmake)
include(cmake/Catch2.cmake)

View File

@@ -41,7 +41,7 @@ Building
- git
- cmake >= 3.14
- gcc >= 9
- gcc >= 8
```
git clone https://gitlab.com/iroddis/daggy

View File

@@ -1,10 +1,10 @@
include(ExternalProject)
project(magicEnum)
project(better-enums)
ExternalProject_Add(${PROJECT_NAME}-external
GIT_REPOSITORY https://github.com/Neargye/magic_enum.git
GIT_TAG "v0.7.3"
GIT_REPOSITORY https://github.com/aantron/better-enums.git
GIT_TAG "0.11.3"
GIT_SHALLOW TRUE
SOURCE_DIR ${THIRD_PARTY_DIR}/${PROJECT_NAME}
BUILD_COMMAND ""
@@ -12,4 +12,4 @@ ExternalProject_Add(${PROJECT_NAME}-external
CONFIGURE_COMMAND "")
add_library(${PROJECT_NAME} INTERFACE)
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}-external)
target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE ${THIRD_PARTY_DIR}/${PROJECT_NAME}/include)
target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE ${THIRD_PARTY_DIR}/${PROJECT_NAME})

View File

@@ -3,4 +3,4 @@ project(daggy)
file(GLOB_RECURSE SOURCES src/*.cpp)
add_library(${PROJECT_NAME} STATIC ${SOURCES})
target_include_directories(${PROJECT_NAME} PUBLIC include)
target_link_libraries(${PROJECT_NAME} pistache pthread rapidjson magicEnum)
target_link_libraries(${PROJECT_NAME} pistache pthread rapidjson better-enums)

View File

@@ -7,6 +7,8 @@
#include <variant>
#include <vector>
#include <enum.h>
namespace daggy {
// Commands and parameters
using ParameterValue = std::variant<std::string, std::vector<std::string>>;
@@ -18,18 +20,17 @@ namespace daggy {
using TimePoint = std::chrono::time_point<Clock>;
// DAG Runs
using DAGDefID = int16_t;
using DAGRunID = size_t;
using TaskID = size_t;
enum class RunState : uint32_t {
QUEUED = 0,
RUNNING = 1,
RETRY = 1 << 1,
ERRORED = 1 << 2,
KILLED = 1 << 3,
COMPLETED = 1 << 4
};
BETTER_ENUM(RunState, uint32_t,
QUEUED = 1,
RUNNING = 1 << 1,
RETRY = 1 << 2,
ERRORED = 1 << 3,
KILLED = 1 << 4,
COMPLETED = 1 << 5
);
struct Task {
std::string name;
@@ -56,3 +57,5 @@ namespace daggy {
std::string errorLog; // stderr from command
};
}
BETTER_ENUMS_DECLARE_STD_HASH(daggy::RunState)

View File

@@ -53,7 +53,7 @@ namespace daggy {
void DAG::resetRunning() {
for (auto &v: vertices_) {
if (v.state != RunState::RUNNING) continue;
if (v.state != +RunState::RUNNING) continue;
v.state = RunState::QUEUED;
}
}
@@ -64,7 +64,7 @@ namespace daggy {
bool DAG::allVisited() const {
for (const auto &v: vertices_) {
if (v.state != RunState::COMPLETED) return false;
if (v.state != +RunState::COMPLETED) return false;
}
return true;
}
@@ -73,7 +73,7 @@ namespace daggy {
for (size_t i = 0; i < vertices_.size(); ++i) {
auto &v = vertices_[i];
if (v.state != RunState::QUEUED) continue;
if (v.state != +RunState::QUEUED) continue;
if (v.depCount != 0) continue;
v.state = RunState::RUNNING;
return i;

View File

@@ -1,7 +1,8 @@
#include <magic_enum.hpp>
#include <iomanip>
#include <enum.h>
#include <daggy/Server.hpp>
#include <daggy/Serialization.hpp>
#include <daggy/Utilities.hpp>
@@ -163,7 +164,7 @@ namespace daggy {
} else {
ss << ", ";
}
ss << std::quoted(magic_enum::enum_name(state)) << ':' << count;
ss << std::quoted(state._to_string()) << ':' << count;
}
ss << '}' // end of taskCounts
<< '}'; // end of item
@@ -191,7 +192,7 @@ namespace daggy {
first = true;
for (const auto &state: run.taskRunStates) {
if (first) { first = false; } else { ss << ','; }
ss << std::quoted(magic_enum::enum_name(state));
ss << std::quoted(state._to_string());
}
ss << "],";
@@ -223,7 +224,7 @@ namespace daggy {
for (const auto &change: run.dagStateChanges) {
if (first) { first = false; } else { ss << ','; }
ss << '{'
<< R"("newState": )" << std::quoted(magic_enum::enum_name(change.newState)) << ','
<< R"("newState": )" << std::quoted(change.newState._to_string()) << ','
<< R"("time": )" << std::quoted(timePointToString(change.time))
<< '}';
}

View File

@@ -1,6 +1,7 @@
#include <fstream>
#include <iomanip>
#include <magic_enum.hpp>
#include <enum.h>
#include <daggy/loggers/dag_run/FileSystemLogger.hpp>
#include <daggy/Serialization.hpp>
@@ -66,7 +67,7 @@ namespace daggy {
void FileSystemLogger::updateDAGRunState(DAGRunID dagRunID, RunState state) {
std::ofstream ofh(getRunRoot(dagRunID) / "states.csv", std::ios::binary | std::ios::app);
ofh << std::quoted(timePointToString(Clock::now())) << ',' << magic_enum::enum_name(state) << '\n';
ofh << std::quoted(timePointToString(Clock::now())) << ',' << state._to_string() << '\n';
ofh.flush();
ofh.close();
}
@@ -109,7 +110,7 @@ namespace daggy {
void FileSystemLogger::updateTaskState(DAGRunID dagRunID, const std::string &taskName, RunState state) {
std::ofstream ofh(getRunRoot(dagRunID) / taskName / "states.csv", std::ios::binary | std::ios::app);
ofh << std::quoted(timePointToString(Clock::now())) << ',' << magic_enum::enum_name(state) << '\n';
ofh << std::quoted(timePointToString(Clock::now())) << ',' << state._to_string() << '\n';
ofh.flush();
ofh.close();
}
@@ -151,7 +152,7 @@ namespace daggy {
record.dagStateChanges.emplace_back(DAGUpdateRecord{
.time = stringToTimePoint(time),
.newState = magic_enum::enum_cast<RunState>(state).value()
.newState = RunState::_from_string(state.c_str())
});
}
ifh.close();
@@ -168,7 +169,7 @@ namespace daggy {
while (std::getline(ifh, line)) { continue; }
std::stringstream ss{line};
while (std::getline(ss, token, ',')) { continue; }
RunState taskState = magic_enum::enum_cast<RunState>(token).value();
RunState taskState = RunState::_from_string(token.c_str());
record.taskRunStates.emplace_back(taskState);
ifh.close();
}

View File

@@ -1,7 +1,7 @@
#include <iterator>
#include <algorithm>
#include <magic_enum.hpp>
#include <enum.h>
#include <daggy/loggers/dag_run/OStreamLogger.hpp>
@@ -34,7 +34,7 @@ namespace daggy {
void OStreamLogger::updateDAGRunState(DAGRunID dagRunID, RunState state) {
std::lock_guard<std::mutex> lock(guard_);
os_ << "DAG State Change(" << dagRunID << "): " << magic_enum::enum_name(state) << std::endl;
os_ << "DAG State Change(" << dagRunID << "): " << state._to_string() << std::endl;
dagRuns_[dagRunID].dagStateChanges.push_back({Clock::now(), state});
}
@@ -65,7 +65,7 @@ namespace daggy {
dagRun.taskRunStates[taskID] = state;
os_ << "Task State Change (" << dagRunID << '/' << taskName << " [task_id: " << taskID << "]): "
<< magic_enum::enum_name(state)
<< state._to_string()
<< std::endl;
}
@@ -84,7 +84,7 @@ namespace daggy {
run.dagStateChanges.back().time)
};
std::vector<RunState> states(run.tasks.size());
std::vector<RunState> states(run.tasks.size(), RunState::QUEUED);
for (const auto &taskUpdate: run.taskStateChanges) {
states[taskUpdate.taskID] = taskUpdate.newState;
}