100 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#pragma once
 | 
						|
 | 
						|
#include <any>
 | 
						|
#include <bitwise/operations.hpp>
 | 
						|
#include <memory/scope.hpp>
 | 
						|
#include <renderer/frontend/messenger.hpp>
 | 
						|
 | 
						|
namespace lt::renderer {
 | 
						|
 | 
						|
enum class MessageSeverity : uint8_t
 | 
						|
{
 | 
						|
	none = 0u,
 | 
						|
 | 
						|
	verbose = bitwise::bit(0u),
 | 
						|
	info = bitwise::bit(1u),
 | 
						|
	warning = bitwise::bit(2u),
 | 
						|
	error = bitwise::bit(3u),
 | 
						|
 | 
						|
	all = verbose | info | warning | error,
 | 
						|
};
 | 
						|
 | 
						|
enum class MessageType : uint8_t
 | 
						|
{
 | 
						|
	none = 0u,
 | 
						|
	general = bitwise::bit(0u),
 | 
						|
	validation = bitwise::bit(1u),
 | 
						|
	performance = bitwise::bit(2u),
 | 
						|
 | 
						|
	all = general | validation | performance,
 | 
						|
};
 | 
						|
 | 
						|
struct MessageData
 | 
						|
{
 | 
						|
	std::string message;
 | 
						|
};
 | 
						|
 | 
						|
using Callback_T = std::function<void(
 | 
						|
    MessageSeverity message_severity,
 | 
						|
    MessageType message_type,
 | 
						|
    MessageData data,
 | 
						|
    std::any &user_data
 | 
						|
)>;
 | 
						|
 | 
						|
class MessengerComponent
 | 
						|
{
 | 
						|
public:
 | 
						|
	friend class System;
 | 
						|
 | 
						|
	struct CreateInfo
 | 
						|
	{
 | 
						|
		MessageSeverity severities;
 | 
						|
 | 
						|
		MessageType types;
 | 
						|
 | 
						|
		Callback_T callback;
 | 
						|
 | 
						|
		std::any user_data;
 | 
						|
	};
 | 
						|
 | 
						|
	[[nodiscard]] auto get_severities() const -> MessageSeverity
 | 
						|
	{
 | 
						|
		return m_severities;
 | 
						|
	}
 | 
						|
 | 
						|
	[[nodiscard]] auto get_types() const -> MessageType
 | 
						|
	{
 | 
						|
		return m_types;
 | 
						|
	}
 | 
						|
 | 
						|
	[[nodiscard]] auto get_callback() const -> const Callback_T &
 | 
						|
	{
 | 
						|
		return m_callback;
 | 
						|
	}
 | 
						|
 | 
						|
	[[nodiscard]] auto get_user_data() -> std::any &
 | 
						|
	{
 | 
						|
		return m_user_data;
 | 
						|
	}
 | 
						|
 | 
						|
private:
 | 
						|
	MessengerComponent(CreateInfo info)
 | 
						|
	    : m_severities(info.severities)
 | 
						|
	    , m_types(info.types)
 | 
						|
	    , m_callback(std::move(info.callback))
 | 
						|
	    , m_user_data(std::move(info.user_data))
 | 
						|
	{
 | 
						|
	}
 | 
						|
 | 
						|
	MessageSeverity m_severities;
 | 
						|
 | 
						|
	MessageType m_types;
 | 
						|
 | 
						|
	Callback_T m_callback;
 | 
						|
 | 
						|
	std::any m_user_data;
 | 
						|
 | 
						|
	memory::Scope<IMessenger> m_implementation;
 | 
						|
};
 | 
						|
 | 
						|
} // namespace lt::renderer
 |