<commit_before>#pragma once

#include <core/math/vec2.h>

namespace fd {
namespace core {
namespace event {

enum class EventType {
	Unknown,
	InputMouse,
	InputKeyboard,
	Window,
};

enum class EventAction {
	Unknown,
	Pressed,
	Released,
	Hold,
	Resize,
	Move,
	MinimizeMaximize,
	Focus
};

class Event {
public:
	EventType type;

	Event* event;

	Event(EventType type) : type(type), event(this) {}
};


// Window events
class WindowEvent : public Event {
public:
	EventAction action;

	WindowEvent(EventAction action) : Event(EventType::Window), action(action) { }
};

class WindowEventResize : public WindowEvent {
public:
	math::vec2i size;

	WindowEventResize(const math::vec2i& size) : WindowEvent(EventAction::Resize), size(size) { }
};

class WindowEventMove : public WindowEvent {
public:
	math::vec2i position;

	WindowEventMove(const math::vec2i& position) : WindowEvent(EventAction::Move), position(position) { }
};

class WindowEventFocus : public WindowEvent {
public:
	bool focus;

	WindowEventFocus(bool value) : WindowEvent(EventAction::Focus), focus(focus) { }
};

class WindowEventVisibility : public WindowEvent {
public:
	bool visible;

	WindowEventVisibility(bool visible) : WindowEvent(EventAction::MinimizeMaximize), visible(visible) { }
};


// Keyboard events
class KeyboardEvent : public Event {
public:
	EventAction action;

	uint32 key;

	KeyboardEvent(EventAction action, uint32 key) : Event(EventType::InputKeyboard), action(action), key(key) { }
};


}
}
}

<commit_msg>MouseEvent<commit_after>#pragma once

#include <core/math/vec2.h>

namespace fd {
namespace core {
namespace event {

enum class EventType {
	Unknown,
	InputMouse,
	InputKeyboard,
	Window,
};

enum class EventAction {
	Unknown,
	Pressed,
	Released,
	Hold,
	Resize,
	Move,
	MinimizeMaximize,
	Focus
};

class Event {
public:
	EventType type;

	Event* event;

	Event(EventType type) : type(type), event(this) {}
};


// Window events
class WindowEvent : public Event {
public:
	EventAction action;

	WindowEvent(EventAction action) : Event(EventType::Window), action(action) { }
};

class WindowEventResize : public WindowEvent {
public:
	math::vec2i size;

	WindowEventResize(const math::vec2i& size) : WindowEvent(EventAction::Resize), size(size) { }
};

class WindowEventMove : public WindowEvent {
public:
	math::vec2i position;

	WindowEventMove(const math::vec2i& position) : WindowEvent(EventAction::Move), position(position) { }
};

class WindowEventFocus : public WindowEvent {
public:
	bool focus;

	WindowEventFocus(bool value) : WindowEvent(EventAction::Focus), focus(focus) { }
};

class WindowEventVisibility : public WindowEvent {
public:
	bool visible;

	WindowEventVisibility(bool visible) : WindowEvent(EventAction::MinimizeMaximize), visible(visible) { }
};


// Keyboard events
class KeyboardEvent : public Event {
public:
	EventAction action;

	uint32 key;

	KeyboardEvent(EventAction action, uint32 key) : Event(EventType::InputKeyboard), action(action), key(key) { }
};

//Nouse events
class MouseEvent : public Event {
public:
	EventAction action;

	math::vec2i absolute;
	math::vec2i relative;

	uint32 button;

	MouseEvent(EventAction action, math::vec2i absolute, math::vec2i relative, uint32 button) : Event(EventType::InputMouse), action(action), absolute(absolute), relative(relative), button(button) { }
};

}
}
}


{'fraction_non_alphanumeric': 0.1123055162659123, 'fraction_numerical': 0.007355021216407355, 'mean_word_length': 4.132075471698113, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '502504', 'n_tokens_mistral': 1157, 'n_tokens_neox': 1110, 'n_words': 260}