The UI is _finally_ responsive while the builder runs.
This commit is contained in:
parent
5ae24d9b0a
commit
7c9bea81b2
4 changed files with 35 additions and 35 deletions
2
Makefile
2
Makefile
|
@ -16,7 +16,7 @@ test:
|
|||
meson test -C builddir --suite turings_tarpit
|
||||
|
||||
# make an install for real maybe copy dll and .exe to dir and zip?
|
||||
install: build test
|
||||
install: build
|
||||
powershell "cp ./builddir/subprojects/libgit2-1.8.1/liblibgit2package.dll ."
|
||||
powershell "cp ./builddir/subprojects/efsw/libefsw.dll ."
|
||||
powershell "cp builddir/escape_turings_tarpit.exe ."
|
||||
|
|
42
builder.cpp
42
builder.cpp
|
@ -120,27 +120,45 @@ void Builder::waiting(BuildEvent ev) {
|
|||
game.start_round();
|
||||
gui.building();
|
||||
gui.output(format("CHANGES! Running build {}", build_cmd));
|
||||
build_fut = std::async([&]() {
|
||||
return start_command(build_cmd);
|
||||
});
|
||||
state(STARTING);
|
||||
state(FORKING);
|
||||
}
|
||||
}
|
||||
|
||||
void Builder::starting(BuildEvent ev) {
|
||||
std::future_status status = build_fut.wait_for(0ms);
|
||||
void Builder::forking(BuildEvent ev) {
|
||||
if(build_fut.valid()) {
|
||||
std::future_status status = build_fut.wait_for(0ms);
|
||||
|
||||
if(status == std::future_status::ready) {
|
||||
build_out = build_fut.get();
|
||||
state(READING);
|
||||
if(status == std::future_status::ready) {
|
||||
build_out = build_fut.get();
|
||||
state(READING);
|
||||
} else {
|
||||
state(FORKING);
|
||||
}
|
||||
} else {
|
||||
state(STARTING);
|
||||
build_fut = std::async([&]() {
|
||||
return start_command(build_cmd);
|
||||
});
|
||||
|
||||
state(FORKING);
|
||||
}
|
||||
}
|
||||
|
||||
void Builder::reading(BuildEvent ev) {
|
||||
line = read_line(build_out, build_done);
|
||||
state(BUILDING);
|
||||
// BUG: too much copy-pasta so turn this into a class?
|
||||
if(read_fut.valid()) {
|
||||
std::future_status status = read_fut.wait_for(0ms);
|
||||
|
||||
if(status == std::future_status::ready) {
|
||||
line = read_fut.get();
|
||||
state(BUILDING);
|
||||
} else {
|
||||
state(READING);
|
||||
}
|
||||
} else {
|
||||
read_fut = std::async([&]() {
|
||||
return read_line(build_out, build_done);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void Builder::done(BuildEvent ev) {
|
||||
|
|
|
@ -20,7 +20,7 @@ struct MatchResult {
|
|||
};
|
||||
|
||||
enum BuildState {
|
||||
START, WAITING, BUILDING, DONE, STARTING, READING,
|
||||
START, WAITING, BUILDING, DONE, FORKING, READING,
|
||||
EXIT, ERROR
|
||||
};
|
||||
|
||||
|
@ -41,6 +41,7 @@ class Builder : DeadSimpleFSM<BuildState, BuildEvent> {
|
|||
bool build_done = false;
|
||||
string line = "";
|
||||
std::future<FILE *> build_fut;
|
||||
std::future<string> read_fut;
|
||||
git_repository* repo = nullptr;
|
||||
|
||||
public:
|
||||
|
@ -60,7 +61,7 @@ class Builder : DeadSimpleFSM<BuildState, BuildEvent> {
|
|||
FSM_STATE(START, start, ev);
|
||||
FSM_STATE(WAITING, waiting, ev);
|
||||
FSM_STATE(DONE, done, ev);
|
||||
FSM_STATE(STARTING, starting, ev);
|
||||
FSM_STATE(FORKING, forking, ev);
|
||||
FSM_STATE(READING, reading, ev);
|
||||
FSM_STATE(EXIT, exit, ev);
|
||||
FSM_STATE(ERROR, exit, ev);
|
||||
|
@ -74,7 +75,7 @@ class Builder : DeadSimpleFSM<BuildState, BuildEvent> {
|
|||
void start(BuildEvent ev);
|
||||
void waiting(BuildEvent ev);
|
||||
void done(BuildEvent ev);
|
||||
void starting(BuildEvent ev);
|
||||
void forking(BuildEvent ev);
|
||||
void reading(BuildEvent ev);
|
||||
void error(BuildEvent ev);
|
||||
void exit(BuildEvent ev);
|
||||
|
|
|
@ -40,22 +40,3 @@ class GameEngine {
|
|||
|
||||
void reset();
|
||||
};
|
||||
|
||||
class Brainfucker {
|
||||
|
||||
public:
|
||||
size_t dp = 0;
|
||||
size_t ip = 0;
|
||||
std::stringstream out;
|
||||
std::array<int, 100> data = {};
|
||||
string code = {};
|
||||
|
||||
Brainfucker();
|
||||
|
||||
void run(int count);
|
||||
void set_code(string &code);
|
||||
void reset();
|
||||
void jump_backward();
|
||||
void jump_forward();
|
||||
string to_string();
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue