Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -173,4 +173,5 @@ Temporary Items
# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option)
.cache/
build/

.html/
.latex/
52 changes: 52 additions & 0 deletions include/concrete_states.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#pragma once
#include <print>
#include "./state.hpp"

class UserInputState : public State {
public:
void enter() override;
void handle() override;
void exit() override;
};

class ElfParserState : public State {
public:
void enter() override;
void handle() override;
void exit() override;
};

class CallgraphState : public State {
public:
void enter() override;
void handle() override;
void exit() override;
};

class AbiParserState : public State {
public:
void enter() override;
void handle() override;
void exit() override;
};

class ValidatorState : public State {
public:
void enter() override;
void handle() override;
void exit() override;
};

class OutputState : public State {
public:
void enter() override;
void handle() override;
void exit() override;
};

class ErrorState : public State {
public:
void enter() override;
void handle() override;
void exit() override;
};
17 changes: 17 additions & 0 deletions include/state.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once
#include "./state_context.hpp"

class StateContext;

class State {
protected:
StateContext *context;
public:
virtual void enter() = 0;
virtual void handle() = 0;
virtual void exit() = 0;

void set_context(StateContext *context);

virtual ~State() = 0;
};
17 changes: 17 additions & 0 deletions include/state_context.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once
#include "./state.hpp"

class State;

class StateContext {
public:
StateContext(State *state);
~StateContext();
State* get_current_state();
void run_state();
void transition_state(State* new_state);
private:
State* current_state;
int total_state;
};

100 changes: 100 additions & 0 deletions src/concrete_states.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#include "../include/concrete_state.hpp"
#include "../include/state.hpp"
#include "../include/state_context.hpp"

//User Input
void UserInputState::enter() {
print("Enter User Input State\n");
}

void UserInputState::handle() {
print("Handle User Input State\n");
}

void UserInputState::exit() {
print("Exit User Input State\n-------------\n");
this->contect->transition_state(new ElfParserState);
}

//Elf Parser
void ElfParserState::enter() {
print("Enter Elf Parser State\n");
}

void ElfParserState::handle() {
print("Handle Elf Parser State\n");
}

void ElfParserState::exit() {
print("Exit Elf Parser State\n-------------\n");
this->context->transition_state(new CallgraphState);
}

//Callgraph
void CallgraphState::enter() {
print("Enter Callgraph State\n");
}

void CallgraphState::handle() {
print("Handle Callgraph State\n");
}

void CallgraphState::exit() {
print("Exit Callgraph State\n-------------\n");
this->context->transition_state(new AbiParserState);
}

//Abi Parser
void AbiParserState::enter() {
print("Enter ABI Parser State\n");
}

void AbiParserState::handle() {
print("Handle ABI Parser State\n");
}

void AbiParserState::exit() {
print("Exit ABI Parser State\n-------------\n");
this->context->transition_state(new ValidatorState);
}

//Validator
void ValidatorState::enter() {
print("Enter Validator State\n")
}

void ValidatorState::handle() {
print("Handle Validator State\n");
}

void ValidatorState::exit() {
print("Exit Validator State\n-------------\n");
this->context->transition_state(new OutputState);
}

//Output
void OutputState::enter() {
print("Enter Output State\n");
}

void OutputState::handle() {
print("Handle Output State\n");
}

void OutputState::exit() {
print("Exit Output State\n-------------\n");
this->context->transition_state(new OutputState);
}

//Error
void ErrorState::enter() {
print("Enter Error State\n")
}

void ErrorState::handle() {
print("Handle Error State\n");
}

void ErrorState::exit() {
print("Exit Error State\n-------------\n")
}
14 changes: 14 additions & 0 deletions src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
#include <print>

#include "state.hpp"
#include "state_context.hpp"
#include "concrete_states.hpp"

void state_init() {
UserInputState inital_state;
StateContext *context = new StateContext(&inital_state);
context->run_state();
delete context;
}

int main()
{
std::println("yeet: {}", __cplusplus);

state_init();

return 0;
}
5 changes: 5 additions & 0 deletions src/state.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#include "../include/state.hpp"

void State::set_context(StateContext *context) {
this->context = context
}
26 changes: 26 additions & 0 deletions src/state_context.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include "../include/state.hpp"
#include "../include/concrete_state.hpp"de
#include "../include/state_context.hpp";

StateContext::StateContext(State *state){
this->transition_state(state);
}

StateContext::~StateContext() {
delete current_state
}

void StateContext::transition_state(State* new_state) {
print("Transitioning\n");
if(this->current_state != nullptr) {
delete this->current_state;
}
this->current_state = new_state;
this->current_state->set_context(this);
}

void StateContext::run_state() {
self->current_state->enter();
self->current_state->handle();
self->current_state->exit();
}