Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1853318016 | ||
|
eb8cdee237 |
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,3 +1,3 @@
|
|||||||
test/test
|
build
|
||||||
test/*.txt
|
.vscode
|
||||||
example
|
example
|
16
.vscode/c_cpp_properties.json
vendored
16
.vscode/c_cpp_properties.json
vendored
@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "Linux",
|
|
||||||
"includePath": [
|
|
||||||
"${workspaceFolder}/**"
|
|
||||||
],
|
|
||||||
"defines": [],
|
|
||||||
"compilerPath": "/usr/bin/gcc",
|
|
||||||
"cStandard": "c17",
|
|
||||||
"cppStandard": "gnu++17",
|
|
||||||
"intelliSenseMode": "linux-gcc-x64"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"version": 4
|
|
||||||
}
|
|
76
.vscode/settings.json
vendored
76
.vscode/settings.json
vendored
@ -1,76 +0,0 @@
|
|||||||
{
|
|
||||||
"files.associations": {
|
|
||||||
"iostream": "cpp",
|
|
||||||
"functional": "cpp",
|
|
||||||
"thread": "cpp",
|
|
||||||
"chrono": "cpp",
|
|
||||||
"ostream": "cpp",
|
|
||||||
"condition_variable": "cpp",
|
|
||||||
"array": "cpp",
|
|
||||||
"atomic": "cpp",
|
|
||||||
"cwchar": "cpp",
|
|
||||||
"deque": "cpp",
|
|
||||||
"unordered_map": "cpp",
|
|
||||||
"vector": "cpp",
|
|
||||||
"exception": "cpp",
|
|
||||||
"initializer_list": "cpp",
|
|
||||||
"iosfwd": "cpp",
|
|
||||||
"mutex": "cpp",
|
|
||||||
"new": "cpp",
|
|
||||||
"ratio": "cpp",
|
|
||||||
"stdexcept": "cpp",
|
|
||||||
"tuple": "cpp",
|
|
||||||
"type_traits": "cpp",
|
|
||||||
"utility": "cpp",
|
|
||||||
"future": "cpp",
|
|
||||||
"*.ipp": "cpp",
|
|
||||||
"bitset": "cpp",
|
|
||||||
"algorithm": "cpp",
|
|
||||||
"string": "cpp",
|
|
||||||
"string_view": "cpp",
|
|
||||||
"fstream": "cpp",
|
|
||||||
"cctype": "cpp",
|
|
||||||
"clocale": "cpp",
|
|
||||||
"cmath": "cpp",
|
|
||||||
"csignal": "cpp",
|
|
||||||
"cstdarg": "cpp",
|
|
||||||
"cstddef": "cpp",
|
|
||||||
"cstdio": "cpp",
|
|
||||||
"cstdlib": "cpp",
|
|
||||||
"cstring": "cpp",
|
|
||||||
"ctime": "cpp",
|
|
||||||
"cwctype": "cpp",
|
|
||||||
"any": "cpp",
|
|
||||||
"bit": "cpp",
|
|
||||||
"*.tcc": "cpp",
|
|
||||||
"codecvt": "cpp",
|
|
||||||
"compare": "cpp",
|
|
||||||
"complex": "cpp",
|
|
||||||
"concepts": "cpp",
|
|
||||||
"cstdint": "cpp",
|
|
||||||
"list": "cpp",
|
|
||||||
"map": "cpp",
|
|
||||||
"set": "cpp",
|
|
||||||
"iterator": "cpp",
|
|
||||||
"memory": "cpp",
|
|
||||||
"memory_resource": "cpp",
|
|
||||||
"numeric": "cpp",
|
|
||||||
"optional": "cpp",
|
|
||||||
"random": "cpp",
|
|
||||||
"system_error": "cpp",
|
|
||||||
"iomanip": "cpp",
|
|
||||||
"istream": "cpp",
|
|
||||||
"limits": "cpp",
|
|
||||||
"numbers": "cpp",
|
|
||||||
"semaphore": "cpp",
|
|
||||||
"sstream": "cpp",
|
|
||||||
"stop_token": "cpp",
|
|
||||||
"streambuf": "cpp",
|
|
||||||
"cinttypes": "cpp",
|
|
||||||
"typeindex": "cpp",
|
|
||||||
"typeinfo": "cpp",
|
|
||||||
"variant": "cpp",
|
|
||||||
"coroutine": "cpp",
|
|
||||||
"source_location": "cpp"
|
|
||||||
}
|
|
||||||
}
|
|
28
.vscode/tasks.json
vendored
28
.vscode/tasks.json
vendored
@ -1,28 +0,0 @@
|
|||||||
{
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"type": "cppbuild",
|
|
||||||
"label": "C/C++: gcc build active file",
|
|
||||||
"command": "/usr/bin/g++",
|
|
||||||
"args": [
|
|
||||||
"-fdiagnostics-color=always",
|
|
||||||
"-g",
|
|
||||||
"${file}",
|
|
||||||
"-o",
|
|
||||||
"${fileDirname}/${fileBasenameNoExtension}"
|
|
||||||
],
|
|
||||||
"options": {
|
|
||||||
"cwd": "${fileDirname}"
|
|
||||||
},
|
|
||||||
"problemMatcher": [
|
|
||||||
"$gcc"
|
|
||||||
],
|
|
||||||
"group": {
|
|
||||||
"kind": "build",
|
|
||||||
"isDefault": true
|
|
||||||
},
|
|
||||||
"detail": "Task generated by Debugger."
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"version": "2.0.0"
|
|
||||||
}
|
|
31
CMakeLists.txt
Normal file
31
CMakeLists.txt
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
|
||||||
|
project(Asynco)
|
||||||
|
|
||||||
|
# Postavi verziju projekta
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
# Pronađi Boost biblioteku (ako nije uobičajeni direktorijum, postavi put)
|
||||||
|
find_package(Boost REQUIRED COMPONENTS system)
|
||||||
|
|
||||||
|
# Dodaj direktorijume sa zaglavljima
|
||||||
|
include_directories(lib)
|
||||||
|
|
||||||
|
# Dodaj biblioteku
|
||||||
|
add_library(asynco STATIC
|
||||||
|
src/engine.cpp
|
||||||
|
src/timers.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# Linkaj Asynco biblioteku sa Boost-om
|
||||||
|
target_link_libraries(asynco Boost::system)
|
||||||
|
|
||||||
|
# Dodaj testove
|
||||||
|
add_subdirectory(test)
|
||||||
|
|
||||||
|
|
||||||
|
# Instaliraj biblioteku
|
||||||
|
# install(TARGETS asynco DESTINATION lib)
|
||||||
|
# install(FILES lib/asynco.hpp lib/define.hpp lib/engine.hpp lib/filesystem.hpp lib/timers.hpp lib/trigger.hpp DESTINATION include/asynco)
|
||||||
|
#
|
49
README.md
49
README.md
@ -329,6 +329,55 @@ myclass.on("constructed", [] (int i) {
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Implementing a class with multiple triggers of different types
|
||||||
|
|
||||||
|
```c++
|
||||||
|
|
||||||
|
class ClassWithTriggers {
|
||||||
|
trigger<int> emitter1;
|
||||||
|
trigger<string> emitter2;
|
||||||
|
|
||||||
|
public:
|
||||||
|
template<typename... T>
|
||||||
|
void on(const string& key, function<void(T...)> callback) {
|
||||||
|
if constexpr (sizeof...(T) == 1 && is_same_v<tuple_element_t<0, tuple<T...>>, int>) {
|
||||||
|
emitter1.on(key, callback);
|
||||||
|
}
|
||||||
|
else if constexpr (sizeof...(T) == 1 && is_same_v<tuple_element_t<0, tuple<T...>>, string>) {
|
||||||
|
emitter2.on(key, callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
void tick(const string& key, Args&&... args) {
|
||||||
|
if constexpr (sizeof...(Args) == 1 && is_same_v<tuple_element_t<0, tuple<Args...>>, int>) {
|
||||||
|
emitter1.tick(key, forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
else if constexpr (sizeof...(Args) == 1 && is_same_v<tuple_element_t<0, tuple<Args...>>, string>) {
|
||||||
|
emitter2.tick(key, forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
static_assert(sizeof...(Args) == 0, "Unsupported number or types of arguments");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ClassWithTriggers mt;
|
||||||
|
|
||||||
|
mt.on<int>("int", function<void(int)>([&](int i) {
|
||||||
|
cout << "Emit int " << i << endl;
|
||||||
|
}));
|
||||||
|
|
||||||
|
mt.on<string>("string", function<void(string)>([&](string s) {
|
||||||
|
cout << "Emit string " << s << endl;
|
||||||
|
}));
|
||||||
|
|
||||||
|
mt.tick("int", 5);
|
||||||
|
mt.tick("string", string("Hello world"));
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
Asynchronous file IO
|
Asynchronous file IO
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
|
4
test/CMakeLists.txt
Normal file
4
test/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
add_executable(asynco_test main.cpp)
|
||||||
|
|
||||||
|
# Linkaj test sa Asynco bibliotekom
|
||||||
|
target_link_libraries(asynco_test asynco Boost::system)
|
@ -1 +0,0 @@
|
|||||||
g++ test.cpp ../src/* -o test
|
|
@ -1,10 +1,10 @@
|
|||||||
// // #define NUM_OF_RUNNERS 2
|
#define NUM_OF_RUNNERS 4
|
||||||
|
|
||||||
#include "../lib/asynco.hpp"
|
#include "asynco.hpp"
|
||||||
#include "../lib/trigger.hpp"
|
#include "trigger.hpp"
|
||||||
#include "../lib/filesystem.hpp"
|
#include "filesystem.hpp"
|
||||||
#include "../lib/timers.hpp"
|
#include "timers.hpp"
|
||||||
#include "../lib/define.hpp"
|
#include "define.hpp"
|
||||||
|
|
||||||
using namespace marcelb::asynco;
|
using namespace marcelb::asynco;
|
||||||
using namespace triggers;
|
using namespace triggers;
|
||||||
@ -62,6 +62,37 @@ class myOwnClass : public trigger<int> {
|
|||||||
myOwnClass() : trigger() {};
|
myOwnClass() : trigger() {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ----------------- MULTIPLE TRIGGERS IN ONE CLASS ------------------
|
||||||
|
|
||||||
|
class ClassWithTriggers {
|
||||||
|
trigger<int> emitter1;
|
||||||
|
trigger<string> emitter2;
|
||||||
|
|
||||||
|
public:
|
||||||
|
template<typename... T>
|
||||||
|
void on(const string& key, function<void(T...)> callback) {
|
||||||
|
if constexpr (sizeof...(T) == 1 && is_same_v<tuple_element_t<0, tuple<T...>>, int>) {
|
||||||
|
emitter1.on(key, callback);
|
||||||
|
}
|
||||||
|
else if constexpr (sizeof...(T) == 1 && is_same_v<tuple_element_t<0, tuple<T...>>, string>) {
|
||||||
|
emitter2.on(key, callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
void tick(const string& key, Args&&... args) {
|
||||||
|
if constexpr (sizeof...(Args) == 1 && is_same_v<tuple_element_t<0, tuple<Args...>>, int>) {
|
||||||
|
emitter1.tick(key, forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
else if constexpr (sizeof...(Args) == 1 && is_same_v<tuple_element_t<0, tuple<Args...>>, string>) {
|
||||||
|
emitter2.tick(key, forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
static_assert(sizeof...(Args) == 0, "Unsupported number or types of arguments");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
int main () {
|
int main () {
|
||||||
|
|
||||||
@ -367,6 +398,24 @@ int main () {
|
|||||||
// cout << "Constructed " << i << endl;
|
// cout << "Constructed " << i << endl;
|
||||||
// });
|
// });
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// *
|
||||||
|
// * Use class with multiple triggers
|
||||||
|
// *
|
||||||
|
// */
|
||||||
|
|
||||||
|
ClassWithTriggers mt;
|
||||||
|
|
||||||
|
mt.on<int>("int", function<void(int)>([&](int i) {
|
||||||
|
cout << "Emit int " << i << endl;
|
||||||
|
}));
|
||||||
|
|
||||||
|
mt.on<string>("string", function<void(string)>([&](string s) {
|
||||||
|
cout << "Emit string " << s << endl;
|
||||||
|
}));
|
||||||
|
|
||||||
|
mt.tick("int", 5);
|
||||||
|
mt.tick("string", string("Hello world"));
|
||||||
|
|
||||||
|
|
||||||
// auto status = fs::read("test1.txt");
|
// auto status = fs::read("test1.txt");
|
Loading…
x
Reference in New Issue
Block a user