Skip to content

Curve/ereignis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


A thread-safe C++20 Event Library


Description

Ereignis is a library that implements an easy to use Event/Callback mechanism that allows for lazy-evaluation of the the results returned by fire.

Installation

Note
This library requires a C++20 capable compiler. In case you need support for C++17 checkout version 1.2

  • With FetchContent

    include(FetchContent)
    
    FetchContent_Declare(ereignis GIT_REPOSITORY "https://github.com/Curve/ereignis")
    FetchContent_MakeAvailable(ereignis)
    
    target_link_libraries(<target> ereignis)
  • As Git-Submodule

    $ git clone https://github.com/Curve/ereignis
    add_subdirectory(ereignis)
    target_link_libraries(<target> ereignis)

Usage examples

  • Basic callback

    #include <ereignis/manager.hpp>
    
    using ereignis::event;
    
    ereignis::manager<
      event<0, void(int)>
    > manager;
    
    manager.at<0>().add([](int i) { std::cout << i << std::endl; });
    manager.at<0>().fire(1337);
  • Result iteration

    #include <ereignis/manager.hpp>
    
    enum class window_event
    {
      close
    };
    
    using ereignis::event;
    
    ereignis::manager<
      event<window_event::close, bool()>
    > manager;
    
    manager.at<window_event::close>().add([]() -> bool { return true; });
    
    manager.at<window_event::close>().add([]() -> bool 
    { 
      std::cout << "Reached!" << std::endl; 
      return false; 
    });
    
    // Lets fire all callbacks until we get `true`.
    
    for (const auto& result : manager.at<window_event::close>().fire())
    {
      if (result)
      {
        return;
      }
    }
    
    // 'Reached!' will never be printed.