Compare commits
No commits in common. "dev" and "multiple_init_problem" have entirely different histories.
dev
...
multiple_i
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,3 +1,2 @@
|
||||
build
|
||||
.vscode
|
||||
example
|
||||
test/test
|
||||
test/*.txt
|
16
.vscode/c_cpp_properties.json
vendored
Normal file
16
.vscode/c_cpp_properties.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"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
Normal file
76
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,76 @@
|
||||
{
|
||||
"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
Normal file
28
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"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"
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
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,55 +329,6 @@ 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
|
||||
|
||||
```c++
|
||||
|
@ -1,4 +0,0 @@
|
||||
add_executable(asynco_test main.cpp)
|
||||
|
||||
# Linkaj test sa Asynco bibliotekom
|
||||
target_link_libraries(asynco_test asynco Boost::system)
|
1
test/compile.sh
Normal file
1
test/compile.sh
Normal file
@ -0,0 +1 @@
|
||||
g++ test.cpp ../src/* -o test
|
@ -1,10 +1,10 @@
|
||||
#define NUM_OF_RUNNERS 4
|
||||
// // #define NUM_OF_RUNNERS 2
|
||||
|
||||
#include "asynco.hpp"
|
||||
#include "trigger.hpp"
|
||||
#include "filesystem.hpp"
|
||||
#include "timers.hpp"
|
||||
#include "define.hpp"
|
||||
#include "../lib/asynco.hpp"
|
||||
#include "../lib/trigger.hpp"
|
||||
#include "../lib/filesystem.hpp"
|
||||
#include "../lib/timers.hpp"
|
||||
#include "../lib/define.hpp"
|
||||
|
||||
using namespace marcelb::asynco;
|
||||
using namespace triggers;
|
||||
@ -62,37 +62,6 @@ class myOwnClass : public trigger<int> {
|
||||
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 () {
|
||||
|
||||
@ -398,24 +367,6 @@ int main () {
|
||||
// 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");
|
Loading…
x
Reference in New Issue
Block a user