diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/_config_8hpp.html b/_config_8hpp.html new file mode 100644 index 0000000..9ac68d1 --- /dev/null +++ b/_config_8hpp.html @@ -0,0 +1,93 @@ + + + + + + + +SA_Event: Include/SA/Event/Config.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Config.hpp File Reference
+
+
+ +

Evente specific config file. +More...

+ +

Go to the source code of this file.

+

Detailed Description

+

Evente specific config file.

+
+ + + + diff --git a/_config_8hpp_source.html b/_config_8hpp_source.html new file mode 100644 index 0000000..238ea4f --- /dev/null +++ b/_config_8hpp_source.html @@ -0,0 +1,99 @@ + + + + + + + +SA_Event: Include/SA/Event/Config.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Config.hpp
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
2
+
3#pragma once
+
4
+
5#ifndef SAPPHIRE_EVENT_CONFIG_GUARD
+
6#define SAPPHIRE_EVENT_CONFIG_GUARD
+
7
+
27#endif // GUARD
+
+ + + + diff --git a/_debug_8hpp.html b/_debug_8hpp.html new file mode 100644 index 0000000..898a8f1 --- /dev/null +++ b/_debug_8hpp.html @@ -0,0 +1,94 @@ + + + + + + + +SA_Event: Include/SA/Event/Debug.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Debug.hpp File Reference
+
+
+ +

Event specific Debug file. +More...

+
#include <SA/Collections/Debug>
+
+

Go to the source code of this file.

+

Detailed Description

+

Event specific Debug file.

+
+ + + + diff --git a/_debug_8hpp_source.html b/_debug_8hpp_source.html new file mode 100644 index 0000000..77cb444 --- /dev/null +++ b/_debug_8hpp_source.html @@ -0,0 +1,120 @@ + + + + + + + +SA_Event: Include/SA/Event/Debug.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Debug.hpp
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
2
+
3#pragma once
+
4
+
5#ifndef SAPPHIRE_EVENT_DEBUG_GUARD
+
6#define SAPPHIRE_EVENT_DEBUG_GUARD
+
7
+
18#if SA_LOGGER_IMPL || defined(DOXYGEN)
+
19
+
20 // Add Sapphire Logger if implementation linked
+
21 #include <SA/Collections/Debug>
+
22
+
23#else
+
24
+
25 // Define empty logger macro.
+
26
+
27 #define SA_LOG(...) {}
+
28
+
29 #define SA_WARN(...) {}
+
30
+
31 #define SA_ERROR(...) {}
+
32
+
33
+
34 #define SA_ASSERT(...) {}
+
35
+
36#endif
+
37
+
38
+
41#endif // GUARD
+
+ + + + diff --git a/_event_8hpp.html b/_event_8hpp.html new file mode 100644 index 0000000..21d3e78 --- /dev/null +++ b/_event_8hpp.html @@ -0,0 +1,117 @@ + + + + + + + +SA_Event: Include/SA/Event/Event.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Classes
+
Event.hpp File Reference
+
+
+ +

Definition of Sapphire Event type. +More...

+
#include <vector>
+#include <SA/Event/FunctionMemberData.hpp>
+#include <SA/Event/Event.inl>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + +

+Classes

struct  SA::Intl::FuncHandle< R, Args >
 Handle struct for a function. More...
 
struct  SA::Intl::FuncHandle< void, Args... >
 Handle struct for a function with void return type. More...
 
struct  SA::Intl::FuncMemberHandle< R, Args >
 Handle struct for a member function. More...
 
struct  SA::Intl::FuncMemberHandle< void, Args... >
 Handle struct for a member function with void return type. More...
 
class  SA::Event< R(Args...)>
 Sapphire Event class. More...
 
+

Detailed Description

+

Definition of Sapphire Event type.

+
+ + + + diff --git a/_event_8hpp_source.html b/_event_8hpp_source.html new file mode 100644 index 0000000..cc043d9 --- /dev/null +++ b/_event_8hpp_source.html @@ -0,0 +1,237 @@ + + + + + + + +SA_Event: Include/SA/Event/Event.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Event.hpp
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
2
+
3#pragma once
+
4
+
5#ifndef SAPPHIRE_EVENT_EVENT_GUARD
+
6#define SAPPHIRE_EVENT_EVENT_GUARD
+
7
+
8#include <vector>
+
9
+ +
11
+
22namespace SA
+
23{
+
24 namespace Intl
+
25 {
+
32 template <typename R, typename... Args>
+
+ +
34 {
+
36 R(*func)(Args...) = nullptr;
+
37
+
39 R* result = nullptr;
+
40 };
+
+
41
+
49 template <typename... Args>
+
+
50 struct FuncHandle<void, Args...>
+
51 {
+
53 void(*func)(Args...) = nullptr;
+
54 };
+
+
55
+
62 template <typename R, typename... Args>
+
+ +
64 {
+ +
67
+
69 R(*func)(void*, Args...) = nullptr;
+
70
+
72 R* result = nullptr;
+
73 };
+
+
74
+
82 template <typename... Args>
+
+
83 struct FuncMemberHandle<void, Args...>
+
84 {
+ +
87
+
89 void(*func)(void*, Args...) = nullptr;
+
90 };
+
+
91 }
+
92
+
93
+
100 template <typename R, typename... Args>
+
101 class Event;
+
102
+
111 template <typename R, typename... Args>
+
+
112 class Event<R(Args...)>
+
113 {
+
115 using FuncHandle = Intl::FuncHandle<R, Args...>;
+
116
+
118 using FuncMemberHandle = Intl::FuncMemberHandle<R, Args...>;
+
119
+
121 std::vector<FuncHandle> mFunctions;
+
122
+
124 std::vector<FuncMemberHandle> mMemberFunctions;
+
125
+
126 public:
+
128 Event() = default;
+
129
+
131 Event(Event&& _other) = default;
+
132
+
134 Event(const Event&) = delete;
+
135
+ +
138
+
139
+
145 bool IsEmpty() const noexcept;
+
146
+
150 void Clear();
+
151
+
152
+
161 void Add(R(*_func)(Args...), R* _result = nullptr);
+
162
+
174 template <typename C>
+
175 void Add(C* _caller, R(C::* _func)(Args...), R* _result = nullptr);
+
176
+
177
+
187 bool Remove(R(*_func)(Args...));
+
188
+
199 template <typename C>
+
200 bool Remove(const C* _caller, R(C::* _func)(Args...));
+
201
+
202
+
212 bool RRemove(R(*_func)(Args...));
+
213
+
224 template <typename C>
+
225 bool RRemove(const C* _caller, R(C::* _func)(Args...));
+
226
+
227
+
235 void Execute(const Args&... _args);
+
236
+
245 void Execute(std::vector<R>& _results, const Args&... _args);
+
246
+
247
+
253 Event& operator=(Event&& _other);
+
254
+
260 Event& operator=(const Event&) = delete;
+
261
+
262
+
272 Event& operator+=(R(*_func)(Args...));
+
273
+
283 Event& operator-=(R(*_func)(Args...));
+
284
+
285
+
293 void operator()(const Args&... _args);
+
294
+
304 void operator()(std::vector<R>& _results, const Args&... _args);
+
305 };
+
+
306}
+
307
+
308#include <SA/Event/Event.inl>
+
309
+
310
+
318#endif // GUARD
+
Internal Definition of Sapphire FunctionMemberData type.
+
Event(const Event &)=delete
Deleted copy constructor.
+
bool IsEmpty() const noexcept
Check whether this event is empty (no function registered).
+
Event(Event &&_other)=default
Default Move constructor.
+
~Event()
Destructor (auto clean).
+
Event()=default
Default constructor.
+
Sapphire Event default (undefined) declaration.
Definition Event.hpp:101
+
Handle struct for a function.
Definition Event.hpp:34
+
R * result
result ptr handle.
Definition Event.hpp:39
+
R(* func)(Args...)
Function ptr handle.
Definition Event.hpp:36
+
Base struct of member function data.
Definition FunctionMemberData.hpp:32
+
Handle struct for a member function.
Definition Event.hpp:64
+
R(* func)(void *, Args...)
Interface function ptr handle.
Definition Event.hpp:69
+
R * result
result ptr handle.
Definition Event.hpp:72
+
FuncMemberDataBase * data
Abstract member data (used by function interface).
Definition Event.hpp:66
+
+ + + + diff --git a/_event_tests_8cpp-example.html b/_event_tests_8cpp-example.html new file mode 100644 index 0000000..6a05911 --- /dev/null +++ b/_event_tests_8cpp-example.html @@ -0,0 +1,316 @@ + + + + + + + +SA_Event: EventTests.cpp + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
EventTests.cpp
+
+
+

Examples and Unitary Tests for Event.

+
// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
+
#include <cstring>
+
+
#include <gtest/gtest.h>
+
+ +
using namespace SA;
+
+
namespace SA::UT::EventTest
+
{
+
//{ Variables
+
+
int gFoo = 0;
+
+
int RFoo(int i)
+
{
+
return gFoo += i;
+
}
+
+
+
void Foo(int i)
+
{
+
RFoo(i);
+
}
+
+
+
struct A
+
{
+
static int sBar;
+
+
static int RBar(int i)
+
{
+
return sBar += 2 * i;
+
}
+
static void Bar(int i)
+
{
+
RBar(i);
+
}
+
};
+
+
int A::sBar = 0;
+
+
+
struct B
+
{
+
int pim = 0;
+
+
int RPim(int i)
+
{
+
return pim += i;
+
}
+
void Pim(int i)
+
{
+
RPim(i);
+
}
+
};
+
+
+
int gLambda = 0;
+
auto rlambda = [](int _i) { return gLambda += 3 * _i; };
+
auto lambda = [](int _i) { rlambda(_i); };
+
+
//}
+
+
TEST(Exception, Empty)
+
{
+
Event<void(int)> e;
+
+
EXPECT_TRUE(e.IsEmpty());
+
+
e += Foo;
+
EXPECT_FALSE(e.IsEmpty());
+
+
e -= Foo;
+
EXPECT_TRUE(e.IsEmpty());
+
+
e.Add(Foo);
+
EXPECT_FALSE(e.IsEmpty());
+
+
e.Remove(Foo);
+
EXPECT_TRUE(e.IsEmpty());
+
+
e.Add(Foo);
+
e.RRemove(Foo);
+
EXPECT_TRUE(e.IsEmpty());
+
}
+
+
TEST(Exception, Clear)
+
{
+
Event<void(int)> e;
+
+
e.Clear();
+
+
EXPECT_TRUE(e.IsEmpty());
+
+
e += Foo;
+
+
e.Clear();
+
EXPECT_TRUE(e.IsEmpty());
+
+
B b;
+
e.Add(&b, &B::Pim);
+
+
e.Clear();
+
EXPECT_TRUE(e.IsEmpty());
+
+
e += Foo;
+
e.Add(&b, &B::Pim);
+
+
e.Clear();
+
EXPECT_TRUE(e.IsEmpty());
+
}
+
+
TEST(Exception, Execute)
+
{
+
gFoo = 0;
+
A::sBar = 0;
+
gLambda = 0;
+
+
Event<void(int)> e;
+
+
e += Foo;
+
e += &A::Bar;
+
e += lambda;
+
+
e.Execute(4);
+
+
EXPECT_EQ(gFoo, 4);
+
EXPECT_EQ(A::sBar, 8);
+
EXPECT_EQ(gLambda, 12);
+
+
+
e += Foo;
+
e -= lambda;
+
+
B b1;
+
e.Add(&b1, &B::Pim);
+
+
e(7);
+
EXPECT_EQ(gFoo, 18);
+
EXPECT_EQ(A::sBar, 22);
+
EXPECT_EQ(gLambda, 12);
+
EXPECT_EQ(b1.pim, 7);
+
+
+
EXPECT_TRUE(e.RRemove(Foo));
+
EXPECT_TRUE(e.Remove(&b1, &B::Pim));
+
+
e(2);
+
EXPECT_EQ(gFoo, 20);
+
EXPECT_EQ(A::sBar, 26);
+
EXPECT_EQ(gLambda, 12);
+
EXPECT_EQ(b1.pim, 7);
+
+
EXPECT_TRUE(e.RRemove(Foo));
+
EXPECT_TRUE(e.RRemove(A::Bar));
+
EXPECT_FALSE(e.Remove(Foo));
+
EXPECT_FALSE(e.Remove(A::Bar));
+
+
e(1);
+
EXPECT_EQ(gFoo, 20);
+
EXPECT_EQ(A::sBar, 26);
+
+
e += Foo;
+
e.Clear();
+
EXPECT_EQ(gFoo, 20);
+
}
+
+
TEST(Exception, ExecuteR)
+
{
+
gFoo = 0;
+
A::sBar = 0;
+
gLambda = 0;
+
+
Event<int(int)> e;
+
std::vector<int> res;
+
+
e += RFoo;
+
e += &A::RBar;
+
e += rlambda;
+
+
e.Execute(res, 4);
+
+
EXPECT_EQ(gFoo, 4);
+
EXPECT_EQ(A::sBar, 8);
+
EXPECT_EQ(gLambda, 12);
+
+
int exp_res1[]{ 4, 8, 12 };
+
EXPECT_TRUE(std::memcmp(res.data(), exp_res1, sizeof(exp_res1)) == 0);
+
+
+
+
e += RFoo;
+
e -= rlambda;
+
+
B b1;
+
e.Add(&b1, &B::RPim);
+
+
e(res, 7);
+
EXPECT_EQ(gFoo, 18);
+
EXPECT_EQ(A::sBar, 22);
+
EXPECT_EQ(gLambda, 12);
+
EXPECT_EQ(b1.pim, 7);
+
+
int exp_res2[]{ 4, 8, 12, 11, 22, 18, 7 }; // Append result at the end.
+
EXPECT_TRUE(std::memcmp(res.data(), exp_res2, sizeof(exp_res2)) == 0);
+
+
EXPECT_TRUE(e.RRemove(RFoo));
+
EXPECT_TRUE(e.Remove(&b1, &B::RPim));
+
+
e.Execute(2);
+
EXPECT_EQ(gFoo, 20);
+
EXPECT_EQ(A::sBar, 26);
+
EXPECT_EQ(gLambda, 12);
+
EXPECT_EQ(b1.pim, 7);
+
+
EXPECT_TRUE(e.RRemove(RFoo));
+
EXPECT_TRUE(e.RRemove(A::RBar));
+
EXPECT_FALSE(e.Remove(RFoo));
+
EXPECT_FALSE(e.Remove(A::RBar));
+
+
e(1);
+
EXPECT_EQ(gFoo, 20);
+
EXPECT_EQ(A::sBar, 26);
+
+
e += RFoo;
+
e.Clear();
+
EXPECT_EQ(gFoo, 20);
+
}
+
}
+
Definition of Sapphire Event type.
+
Sapphire Event default (undefined) declaration.
Definition Event.hpp:101
+
+ + + + diff --git a/_function_8hpp.html b/_function_8hpp.html new file mode 100644 index 0000000..43c0ced --- /dev/null +++ b/_function_8hpp.html @@ -0,0 +1,105 @@ + + + + + + + +SA_Event: Include/SA/Event/Function.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Classes
+
Function.hpp File Reference
+
+
+ +

Definition of Sapphire Function type. +More...

+
#include <cstddef>
+#include <SA/Event/FunctionMemberData.hpp>
+#include <SA/Event/Function.inl>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  SA::Function< R, Args >
 Function type implementation. More...
 
+

Detailed Description

+

Definition of Sapphire Function type.

+
+ + + + diff --git a/_function_8hpp_source.html b/_function_8hpp_source.html new file mode 100644 index 0000000..78652df --- /dev/null +++ b/_function_8hpp_source.html @@ -0,0 +1,220 @@ + + + + + + + +SA_Event: Include/SA/Event/Function.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Function.hpp
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
2
+
3#pragma once
+
4
+
5#ifndef SAPPHIRE_EVENT_FUNCTION_GUARD
+
6#define SAPPHIRE_EVENT_FUNCTION_GUARD
+
7
+
8#include <cstddef>
+
9
+ +
11
+
22namespace SA
+
23{
+
30 template <typename R, typename... Args>
+
+ +
32 {
+
34 Intl::FuncMemberDataBase* mMemberData = nullptr;
+
35
+
36 union
+
37 {
+
39 R(*mSFunc)(Args...) = nullptr;
+
40
+
42 R(*mIntlFunc)(void*, Args...);
+
43 };
+
44
+
45 public:
+
46
+
47//{ Constructors
+
48
+
50 Function() = default;
+
51
+
57 Function(R(*_func)(Args...)) noexcept;
+
58
+
66 template <typename C>
+
67 Function(C* _caller, R(C::*_func)(Args...));
+
68
+
69
+
76 Function(Function&& _other) noexcept;
+
77
+
84 Function(const Function& _other) noexcept;
+
85
+ +
88
+
89//}
+
90
+
91//{ Equals
+
92
+
98 bool IsEmpty() const noexcept;
+
99
+
105 operator bool() const;
+
106
+
107
+
115 bool Equals(const Function& _other) const;
+
116
+
124 bool operator==(const Function& _rhs) const;
+
125
+
126
+
134 bool operator!=(const Function& _rhs) const;
+
135
+
136//}
+
137
+
138//{ Set
+
139
+
146 void Set(R(*_func)(Args...));
+
147
+
156 template <typename C>
+
157 void Set(C* _caller, R(C::* _func)(Args...));
+
158
+
159
+
168 Function& operator=(Function&& _rhs) noexcept;
+
169
+
178 Function& operator=(const Function& _rhs) noexcept;
+
179
+
180
+
189 Function& operator=(R(*_func)(Args...)) noexcept;
+
190
+
191 //template <typename C>
+
192 //Function& operator=(C* _caller, R(C::* _func)(Args...));
+
193
+
194//}
+
195
+
196//{ Clear
+
197
+
202 void Clear();
+
203
+
210 Function& operator=(std::nullptr_t);
+
211
+
212//}
+
213
+
214//{ Execute
+
215
+
223 R Execute(Args... _args) const;
+
224
+
225
+
233 R operator()(Args... _args) const;
+
234
+
235//}
+
236 };
+
+
237
+
238
+
240
+
247 template <typename R, typename... Args>
+
248 class Function<R(Args...)> : public Function<R, Args...>
+
249 {
+
250 public:
+
251 using Function<R, Args...>::Function;
+
252 using Function<R, Args...>::operator=;
+
253 };
+
254
+
256}
+
257
+
258#include <SA/Event/Function.inl>
+
259
+
260
+
268#endif // GUARD
+
Internal Definition of Sapphire FunctionMemberData type.
+
Function type implementation.
Definition Function.hpp:32
+
R Execute(Args... _args) const
Execute bound function with args.
+
void Set(R(*_func)(Args...))
Set (assignation) new static function to bind. Free previous allocated memory.
+
R(* mIntlFunc)(void *, Args...)
Internal interface function ptr (handle for member function call).
Definition Function.hpp:42
+
bool Equals(const Function &_other) const
Compare 2 function handle.
+
R(* mSFunc)(Args...)
Static function ptr.
Definition Function.hpp:39
+
Function(R(*_func)(Args...)) noexcept
+
Function()=default
Default constructor.
+
void Clear()
Clear bound function. Free allocated memory.
+
bool IsEmpty() const noexcept
Check whether this function handle is empty (no function bound).
+
Base struct of member function data.
Definition FunctionMemberData.hpp:32
+
+ + + + diff --git a/_function_member_data_8hpp.html b/_function_member_data_8hpp.html new file mode 100644 index 0000000..5636a5e --- /dev/null +++ b/_function_member_data_8hpp.html @@ -0,0 +1,108 @@ + + + + + + + +SA_Event: Include/SA/Event/FunctionMemberData.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Classes
+
FunctionMemberData.hpp File Reference
+
+
+ +

Internal Definition of Sapphire FunctionMemberData type. +More...

+
#include <cstdint>
+#include <SA/Event/Debug.hpp>
+#include <SA/Event/FunctionMemberData.inl>
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

struct  SA::Intl::FuncMemberDataBase
 Base struct of member function data. More...
 
struct  SA::Intl::FuncMemberData< C, R, Args >
 Data struct for typed member function. More...
 
+

Detailed Description

+

Internal Definition of Sapphire FunctionMemberData type.

+
+ + + + diff --git a/_function_member_data_8hpp_source.html b/_function_member_data_8hpp_source.html new file mode 100644 index 0000000..2e11880 --- /dev/null +++ b/_function_member_data_8hpp_source.html @@ -0,0 +1,152 @@ + + + + + + + +SA_Event: Include/SA/Event/FunctionMemberData.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
FunctionMemberData.hpp
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
2
+
3#pragma once
+
4
+
5#ifndef SAPPHIRE_EVENT_FUNCTION_MEMBER_DATA_GUARD
+
6#define SAPPHIRE_EVENT_FUNCTION_MEMBER_DATA_GUARD
+
7
+
8#include <cstdint>
+
9
+
10#include <SA/Event/Debug.hpp>
+
11
+
22namespace SA
+
23{
+
24 namespace Intl
+
25 {
+
+ +
32 {
+
37 virtual ~FuncMemberDataBase() = default;
+
38
+
44 virtual FuncMemberDataBase* Duplicate() const = 0;
+
45
+
53 virtual bool Compare(const FuncMemberDataBase* _other) const = 0;
+
54 };
+
+
55
+
63 template <typename C, typename R, typename... Args>
+
+ +
65 {
+
67 C* caller = nullptr;
+
68
+
70 R(C::* func)(Args...) = nullptr;
+
71
+
78 FuncMemberData(C* _caller, R(C::* _func)(Args...));
+
79
+
80 FuncMemberDataBase* Duplicate() const override final;
+
81 bool Compare(const FuncMemberDataBase* _other) const override final;
+
82
+
92 static R InterfaceCall(void* _data, Args... _args);
+
93 };
+
+
94 }
+
95}
+
96
+
97#include <SA/Event/FunctionMemberData.inl>
+
98
+
99
+
102#endif // GUARD
+
Event specific Debug file.
+
Base struct of member function data.
Definition FunctionMemberData.hpp:32
+
virtual bool Compare(const FuncMemberDataBase *_other) const =0
Compare child data class
+
virtual FuncMemberDataBase * Duplicate() const =0
Duplicate child data (used for copy operations).
+
virtual ~FuncMemberDataBase()=default
default virtual destructor. Ensure correct child class destruction on delete.
+
Data struct for typed member function.
Definition FunctionMemberData.hpp:65
+
FuncMemberData(C *_caller, R(C::*_func)(Args...))
Default value constructor.
+
R(C::* func)(Args...)
Function ptr handle.
Definition FunctionMemberData.hpp:70
+
bool Compare(const FuncMemberDataBase *_other) const override final
Compare child data class
+
FuncMemberDataBase * Duplicate() const override final
Duplicate child data (used for copy operations).
+
C * caller
Caller ptr handle.
Definition FunctionMemberData.hpp:67
+
static R InterfaceCall(void *_data, Args... _args)
Interface methods requiered for function handle. Ensure correct child type call.
+
+ + + + diff --git a/_function_tests_8cpp-example.html b/_function_tests_8cpp-example.html new file mode 100644 index 0000000..e0530b8 --- /dev/null +++ b/_function_tests_8cpp-example.html @@ -0,0 +1,270 @@ + + + + + + + +SA_Event: FunctionTests.cpp + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
FunctionTests.cpp
+
+
+

Examples and Unitary Tests for Function.

+
// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
+
#include <gtest/gtest.h>
+
+ +
using namespace SA;
+
+
namespace SA::UT::FunctionTest
+
{
+
//{ Variables
+
+
int Foo(int _i)
+
{
+
return _i * 2;
+
}
+
+
class A
+
{
+
public:
+
int Bar(int _i)
+
{
+
return _i * 3;
+
}
+
};
+
+
//}
+
+
TEST(Function, ValueConstructors)
+
{
+
Function<int(int)> f1;
+
EXPECT_TRUE(f1.IsEmpty());
+
+
Function f2 = Foo;
+
EXPECT_FALSE(f2.IsEmpty());
+
EXPECT_EQ(f2(2), 4);
+
+
A a;
+
Function f3(&a, &A::Bar);
+
EXPECT_FALSE(f3.IsEmpty());
+
EXPECT_EQ(f3(2), 6);
+
}
+
+
TEST(Function, MoveConstructors)
+
{
+
// Static function move.
+
Function f1 = Foo;
+
const Function f2 = std::move(f1);
+
EXPECT_TRUE(f1.IsEmpty());
+
EXPECT_FALSE(f2.IsEmpty());
+
EXPECT_EQ(f2(2), 4);
+
+
// Member function move.
+
A a;
+
Function f3(&a, &A::Bar);
+
const Function f4 = std::move(f3);
+
EXPECT_TRUE(f3.IsEmpty());
+
EXPECT_FALSE(f4.IsEmpty());
+
EXPECT_EQ(f4(2), 6);
+
}
+
+
TEST(Function, CopyConstructors)
+
{
+
// Static function copy.
+
const Function f1 = Foo;
+
const Function f2 = f1;
+
EXPECT_EQ(f2(2), 4);
+
+
// Member function copy.
+
A a;
+
const Function f3(&a, &A::Bar);
+
const Function f4 = f3;
+
EXPECT_EQ(f4(2), 6);
+
}
+
+
TEST(Function, Equals)
+
{
+
A a1;
+
A a2;
+
const Function f1 = Foo;
+
const Function f2(&a1, &A::Bar);
+
const Function f3(&a2, &A::Bar);
+
+
EXPECT_TRUE(f1.Equals(f1));
+
EXPECT_FALSE(f1.Equals(f2));
+
EXPECT_FALSE(f2.Equals(f3));
+
+
EXPECT_EQ(f1, f1);
+
EXPECT_EQ(f2, f2);
+
EXPECT_TRUE(f1 == f1);
+
EXPECT_FALSE(f1 == f2);
+
EXPECT_FALSE(f2 == f3);
+
+
EXPECT_NE(f1, f2);
+
EXPECT_NE(f2, f3);
+
EXPECT_FALSE(f1 != f1);
+
EXPECT_TRUE(f1 != f2);
+
EXPECT_TRUE(f2 != f3);
+
+
+
Function f4 = Foo;
+
EXPECT_FALSE(f4.IsEmpty());
+
+
f4.Clear();
+
EXPECT_TRUE(f4.IsEmpty());
+
}
+
+
TEST(Function, Set)
+
{
+
Function<int(int)> f1;
+
+
EXPECT_TRUE(f1.IsEmpty());
+
+
f1.Set(&Foo);
+
EXPECT_FALSE(f1.IsEmpty());
+
EXPECT_EQ(f1(3), 6);
+
+
A a1;
+
f1.Set(&a1, &A::Bar);
+
EXPECT_FALSE(f1.IsEmpty());
+
+
EXPECT_EQ(f1(3), 9);
+
}
+
+
TEST(Function, Clear)
+
{
+
Function<int(int)> f1;
+
+
EXPECT_TRUE(f1.IsEmpty());
+
+
f1.Set(&Foo);
+
EXPECT_FALSE(f1.IsEmpty());
+
+
f1.Clear();
+
EXPECT_TRUE(f1.IsEmpty());
+
+
+
f1.Set(&Foo);
+
EXPECT_FALSE(f1.IsEmpty());
+
+
f1 = nullptr;
+
EXPECT_TRUE(f1.IsEmpty());
+
}
+
+
TEST(Function, MoveOperators)
+
{
+
// Static function move.
+
Function f1 = Foo;
+
Function<int(int)> f2;
+
f2 = std::move(f1);
+
EXPECT_TRUE(f1.IsEmpty());
+
EXPECT_FALSE(f2.IsEmpty());
+
EXPECT_EQ(f2(2), 4);
+
+
// Member function move.
+
A a;
+
Function f3(&a, &A::Bar);
+
Function<int(int)> f4;
+
f4 = std::move(f3);
+
EXPECT_TRUE(f3.IsEmpty());
+
EXPECT_FALSE(f4.IsEmpty());
+
EXPECT_EQ(f4(2), 6);
+
}
+
+
TEST(Function, CopyOperators)
+
{
+
// Static function copy.
+
const Function f1 = Foo;
+
Function<int(int)> f2;
+
f2 = f1;
+
EXPECT_FALSE(f1.IsEmpty());
+
EXPECT_EQ(f2(2), 4);
+
+
// Member function copy.
+
A a;
+
const Function f3(&a, &A::Bar);
+
Function<int(int)> f4;
+
f4 = f3;
+
EXPECT_FALSE(f1.IsEmpty());
+
EXPECT_EQ(f4(2), 6);
+
}
+
}
+
Definition of Sapphire Function type.
+
Function type implementation.
Definition Function.hpp:32
+
void Set(R(*_func)(Args...))
Set (assignation) new static function to bind. Free previous allocated memory.
+
bool Equals(const Function &_other) const
Compare 2 function handle.
+
void Clear()
Clear bound function. Free allocated memory.
+
bool IsEmpty() const noexcept
Check whether this function handle is empty (no function bound).
+
+ + + + diff --git a/_owned_event_8hpp.html b/_owned_event_8hpp.html new file mode 100644 index 0000000..d07bc7f --- /dev/null +++ b/_owned_event_8hpp.html @@ -0,0 +1,103 @@ + + + + + + + +SA_Event: Include/SA/Event/OwnedEvent.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Classes
+
OwnedEvent.hpp File Reference
+
+
+ +

Definition of Sapphire Owned-Event type. +More...

+
#include <SA/Event/Event.hpp>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  SA::OwnedEvent< OwnerT, R(Args...)>
 Sapphire Owned-Event class. More...
 
+

Detailed Description

+

Definition of Sapphire Owned-Event type.

+
+ + + + diff --git a/_owned_event_8hpp_source.html b/_owned_event_8hpp_source.html new file mode 100644 index 0000000..1ad68b3 --- /dev/null +++ b/_owned_event_8hpp_source.html @@ -0,0 +1,133 @@ + + + + + + + +SA_Event: Include/SA/Event/OwnedEvent.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OwnedEvent.hpp
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
2
+
3#pragma once
+
4
+
5#ifndef SAPPHIRE_OWNED_EVENT_EVENT_GUARD
+
6#define SAPPHIRE_OWNED_EVENT_EVENT_GUARD
+
7
+
8#include <SA/Event/Event.hpp>
+
9
+
20namespace SA
+
21{
+
29 template <typename OwnerT, typename R, typename... Args>
+ +
31
+
42 template <typename OwnerT, typename R, typename... Args>
+
+
43 class OwnedEvent<OwnerT, R(Args...)> : private Event<R(Args...)>
+
44 {
+
45 // Only OwnerT can call Execute.
+
46 friend OwnerT;
+
47
+
48 using Event<R(Args...)>::Execute;
+
49 using Event<R(Args...)>::operator();
+
50
+
51 public:
+
52 using Event<R(Args...)>::Event;
+
53 using Event<R(Args...)>::IsEmpty;
+
54 using Event<R(Args...)>::Clear;
+
55 using Event<R(Args...)>::Add;
+
56 using Event<R(Args...)>::Remove;
+
57 using Event<R(Args...)>::RRemove;
+
58 using Event<R(Args...)>::operator=;
+
59 using Event<R(Args...)>::operator+=;
+
60 using Event<R(Args...)>::operator-=;
+
61 };
+
+
62}
+
63
+
72#endif // GUARD
+
Definition of Sapphire Event type.
+
Sapphire Event default (undefined) declaration.
Definition Event.hpp:101
+
Sapphire Owned-Event default (undefined) declaration.
Definition OwnedEvent.hpp:30
+
+ + + + diff --git a/_owned_event_tests_8cpp-example.html b/_owned_event_tests_8cpp-example.html new file mode 100644 index 0000000..8ae36c2 --- /dev/null +++ b/_owned_event_tests_8cpp-example.html @@ -0,0 +1,362 @@ + + + + + + + +SA_Event: OwnedEventTests.cpp + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
OwnedEventTests.cpp
+
+
+

Examples and Unitary Tests for OwnedEvent.

+
// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
+
#include <cstring>
+
+
#include <gtest/gtest.h>
+
+ +
using namespace SA;
+
+
namespace SA::UT::OwnedEventTest
+
{
+
//{ Variables
+
+
int gFoo = 0;
+
+
int RFoo(int i)
+
{
+
return gFoo += i;
+
}
+
+
+
void Foo(int i)
+
{
+
RFoo(i);
+
}
+
+
+
struct A
+
{
+
static int sBar;
+
+
static int RBar(int i)
+
{
+
return sBar += 2 * i;
+
}
+
static void Bar(int i)
+
{
+
RBar(i);
+
}
+
};
+
+
int A::sBar = 0;
+
+
+
struct B
+
{
+
int pim = 0;
+
+
int RPim(int i)
+
{
+
return pim += i;
+
}
+
void Pim(int i)
+
{
+
RPim(i);
+
}
+
};
+
+
+
int gLambda = 0;
+
auto rlambda = [](int _i) { return gLambda += 3 * _i; };
+
auto lambda = [](int _i) { rlambda(_i); };
+
+
class EventOwner
+
{
+
public:
+
OwnedEvent<EventOwner, void(int)> e;
+
+
void Do(int _param)
+
{
+
e.Execute(_param);
+
}
+
+
void operator()(int _param)
+
{
+
e(_param);
+
}
+
};
+
+
class EventOwnerR
+
{
+
public:
+
OwnedEvent<EventOwnerR, int(int)> e;
+
+
void Do(int _param)
+
{
+
e.Execute(_param);
+
}
+
+
void Do(std::vector<int>& _results, int _param)
+
{
+
e.Execute(_results, _param);
+
}
+
+
void operator()(int _param)
+
{
+
e.Execute(_param);
+
}
+
+
void operator()(std::vector<int>& _results, int _param)
+
{
+
e.Execute(_results, _param);
+
}
+
};
+
+
//}
+
+
TEST(Exception, Empty)
+
{
+
EventOwner owner;
+
+
EXPECT_TRUE(owner.e.IsEmpty());
+
+
owner.e += Foo;
+
EXPECT_FALSE(owner.e.IsEmpty());
+
+
owner.e -= Foo;
+
EXPECT_TRUE(owner.e.IsEmpty());
+
+
owner.e.Add(Foo);
+
EXPECT_FALSE(owner.e.IsEmpty());
+
+
owner.e.Remove(Foo);
+
EXPECT_TRUE(owner.e.IsEmpty());
+
+
owner.e.Add(Foo);
+
owner.e.RRemove(Foo);
+
EXPECT_TRUE(owner.e.IsEmpty());
+
}
+
+
TEST(Exception, Clear)
+
{
+
EventOwner owner;
+
+
owner.e.Clear();
+
+
EXPECT_TRUE(owner.e.IsEmpty());
+
+
owner.e += Foo;
+
+
owner.e.Clear();
+
EXPECT_TRUE(owner.e.IsEmpty());
+
+
B b;
+
owner.e.Add(&b, &B::Pim);
+
+
owner.e.Clear();
+
EXPECT_TRUE(owner.e.IsEmpty());
+
+
owner.e += Foo;
+
owner.e.Add(&b, &B::Pim);
+
+
owner.e.Clear();
+
EXPECT_TRUE(owner.e.IsEmpty());
+
}
+
+
TEST(Exception, Execute)
+
{
+
gFoo = 0;
+
A::sBar = 0;
+
gLambda = 0;
+
+
EventOwner owner;
+
// owner.e.Execute(1); // must not compile.
+
// owner.e(1); // must not compile.
+
+
owner.e += Foo;
+
owner.e += &A::Bar;
+
owner.e += lambda;
+
+
owner.Do(4);
+
+
EXPECT_EQ(gFoo, 4);
+
EXPECT_EQ(A::sBar, 8);
+
EXPECT_EQ(gLambda, 12);
+
+
+
owner.e += Foo;
+
owner.e -= lambda;
+
+
B b1;
+
owner.e.Add(&b1, &B::Pim);
+
+
owner(7);
+
EXPECT_EQ(gFoo, 18);
+
EXPECT_EQ(A::sBar, 22);
+
EXPECT_EQ(gLambda, 12);
+
EXPECT_EQ(b1.pim, 7);
+
+
+
EXPECT_TRUE(owner.e.RRemove(Foo));
+
EXPECT_TRUE(owner.e.Remove(&b1, &B::Pim));
+
+
owner(2);
+
EXPECT_EQ(gFoo, 20);
+
EXPECT_EQ(A::sBar, 26);
+
EXPECT_EQ(gLambda, 12);
+
EXPECT_EQ(b1.pim, 7);
+
+
EXPECT_TRUE(owner.e.RRemove(Foo));
+
EXPECT_TRUE(owner.e.RRemove(A::Bar));
+
EXPECT_FALSE(owner.e.Remove(Foo));
+
EXPECT_FALSE(owner.e.Remove(A::Bar));
+
+
owner(1);
+
EXPECT_EQ(gFoo, 20);
+
EXPECT_EQ(A::sBar, 26);
+
+
owner.e += Foo;
+
owner.e.Clear();
+
EXPECT_EQ(gFoo, 20);
+
}
+
+
TEST(Exception, ExecuteR)
+
{
+
gFoo = 0;
+
A::sBar = 0;
+
gLambda = 0;
+
+
EventOwnerR owner;
+
std::vector<int> res;
+
// owner.e.Execute(res, 1); // must not compile.
+
// owner.e(res, 1); // must not compile.
+
+
owner.e += RFoo;
+
owner.e += &A::RBar;
+
owner.e += rlambda;
+
+
owner.Do(res, 4);
+
+
EXPECT_EQ(gFoo, 4);
+
EXPECT_EQ(A::sBar, 8);
+
EXPECT_EQ(gLambda, 12);
+
+
int exp_res1[]{ 4, 8, 12 };
+
EXPECT_TRUE(std::memcmp(res.data(), exp_res1, sizeof(exp_res1)) == 0);
+
+
+
+
owner.e += RFoo;
+
owner.e -= rlambda;
+
+
B b1;
+
owner.e.Add(&b1, &B::RPim);
+
+
owner(res, 7);
+
EXPECT_EQ(gFoo, 18);
+
EXPECT_EQ(A::sBar, 22);
+
EXPECT_EQ(gLambda, 12);
+
EXPECT_EQ(b1.pim, 7);
+
+
int exp_res2[]{ 4, 8, 12, 11, 22, 18, 7 }; // Append result at the end.
+
EXPECT_TRUE(std::memcmp(res.data(), exp_res2, sizeof(exp_res2)) == 0);
+
+
EXPECT_TRUE(owner.e.RRemove(RFoo));
+
EXPECT_TRUE(owner.e.Remove(&b1, &B::RPim));
+
+
owner.Do(2);
+
EXPECT_EQ(gFoo, 20);
+
EXPECT_EQ(A::sBar, 26);
+
EXPECT_EQ(gLambda, 12);
+
EXPECT_EQ(b1.pim, 7);
+
+
EXPECT_TRUE(owner.e.RRemove(RFoo));
+
EXPECT_TRUE(owner.e.RRemove(A::RBar));
+
EXPECT_FALSE(owner.e.Remove(RFoo));
+
EXPECT_FALSE(owner.e.Remove(A::RBar));
+
+
owner(1);
+
EXPECT_EQ(gFoo, 20);
+
EXPECT_EQ(A::sBar, 26);
+
+
owner.e += RFoo;
+
owner.e.Clear();
+
EXPECT_EQ(gFoo, 20);
+
}
+
}
+
Definition of Sapphire Owned-Event type.
+
Sapphire Owned-Event default (undefined) declaration.
Definition OwnedEvent.hpp:30
+
+ + + + diff --git a/_packed_function_8hpp.html b/_packed_function_8hpp.html new file mode 100644 index 0000000..151be64 --- /dev/null +++ b/_packed_function_8hpp.html @@ -0,0 +1,105 @@ + + + + + + + +SA_Event: Include/SA/Event/PackedFunction.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Classes
+
PackedFunction.hpp File Reference
+
+
+ +

Definition of Sapphire Packed Function type. +More...

+
#include <tuple>
+#include <SA/Event/Function.hpp>
+#include <SA/Event/PackedFunction.inl>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  SA::PackedFunction< R, Args >
 Packed Function type implementation. More...
 
+

Detailed Description

+

Definition of Sapphire Packed Function type.

+
+ + + + diff --git a/_packed_function_8hpp_source.html b/_packed_function_8hpp_source.html new file mode 100644 index 0000000..82b4676 --- /dev/null +++ b/_packed_function_8hpp_source.html @@ -0,0 +1,205 @@ + + + + + + + +SA_Event: Include/SA/Event/PackedFunction.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PackedFunction.hpp
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
2
+
3#pragma once
+
4
+
5#ifndef SAPPHIRE_EVENT_PACKED_FUNCTION_GUARD
+
6#define SAPPHIRE_EVENT_PACKED_FUNCTION_GUARD
+
7
+
8#include <tuple>
+
9
+
10#include <SA/Event/Function.hpp>
+
11
+
22namespace SA
+
23{
+
30 template <typename R, typename... Args>
+
+
31 class PackedFunction : private Function<R, Args...>
+
32 {
+
33 std::tuple<Args...> mArgs;
+
34
+
35 public:
+
36
+
37 //{ Constructors
+
38
+
40 PackedFunction() = default;
+
41
+
48 PackedFunction(R(*_func)(Args...), Args... _args) noexcept;
+
49
+
58 template <typename C>
+
59 PackedFunction(C* _caller, R(C::* _func)(Args...), Args... _args);
+
60
+
61
+
68 PackedFunction(PackedFunction&& _other) noexcept;
+
69
+
76 PackedFunction(const PackedFunction& _other) noexcept;
+
77
+
78 //}
+
79
+
80 //{ Equals
+
81
+
82 using Function<R, Args...>::IsEmpty;
+
83 using Function<R, Args...>::operator bool;
+
84
+
85
+
93 bool Equals(const PackedFunction& _other) const;
+
94
+
102 bool operator==(const PackedFunction& _rhs) const;
+
103
+
104
+
112 bool operator!=(const PackedFunction& _rhs) const;
+
113
+
114 //}
+
115
+
116 //{ Set
+
117
+
118 using Function<R, Args...>::Clear;
+
119
+
127 void Set(R(*_func)(Args...), Args... _args);
+
128
+
138 template <typename C>
+
139 void Set(C* _caller, R(C::* _func)(Args...), Args... _args);
+
140
+
141
+ +
151
+ +
161
+
162 //}
+
163
+
164 //{ Execute
+
165
+
171 R Execute() const;
+
172
+
173
+
179 R operator()() const;
+
180
+
181 //}
+
182 };
+
+
183
+
184
+
186
+
193 template <typename R, typename... Args>
+
194 class PackedFunction<R(Args...)> : public PackedFunction<R, Args...>
+
195 {
+
196 public:
+
197 using PackedFunction<R, Args...>::PackedFunction;
+
198 using PackedFunction<R, Args...>::operator=;
+
199 };
+
200
+
202}
+
203
+
204#include <SA/Event/PackedFunction.inl>
+
205
+
206
+
214#endif // GUARD
+
Definition of Sapphire Function type.
+
Function type implementation.
Definition Function.hpp:32
+
void Clear()
Clear bound function. Free allocated memory.
+
bool IsEmpty() const noexcept
Check whether this function handle is empty (no function bound).
+
Packed Function type implementation.
Definition PackedFunction.hpp:32
+
bool operator==(const PackedFunction &_rhs) const
Compare 2 function handle equality.
+
R Execute() const
Execute bound function with packed args.
+
bool operator!=(const PackedFunction &_rhs) const
Compare 2 function handle inequality.
+
void Set(C *_caller, R(C::*_func)(Args...), Args... _args)
Set (assignation) new member function to bind. Free previous allocated memory.
+
PackedFunction()=default
Default constructor.
+
PackedFunction(R(*_func)(Args...), Args... _args) noexcept
+
PackedFunction & operator=(PackedFunction &&_rhs) noexcept
Move operator Steal function handle (no additional memory allocation).
+
void Set(R(*_func)(Args...), Args... _args)
Set (assignation) new static function to bind. Free previous allocated memory.
+
PackedFunction(const PackedFunction &_other) noexcept
+
PackedFunction(C *_caller, R(C::*_func)(Args...), Args... _args)
+
PackedFunction(PackedFunction &&_other) noexcept
+
bool Equals(const PackedFunction &_other) const
Compare 2 function handle.
+
R operator()() const
Execute bound function with packed args operator.
+
PackedFunction & operator=(const PackedFunction &_rhs) noexcept
Copy operator Additional memory allocation on member function copy.
+
+ + + + diff --git a/_packed_function_tests_8cpp-example.html b/_packed_function_tests_8cpp-example.html new file mode 100644 index 0000000..8be7257 --- /dev/null +++ b/_packed_function_tests_8cpp-example.html @@ -0,0 +1,235 @@ + + + + + + + +SA_Event: PackedFunctionTests.cpp + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
PackedFunctionTests.cpp
+
+
+

Examples and Unitary Tests for PackedFunction.

+
// Copyright (c) 2023 Sapphire's Suite. All Rights Reserved.
+
+
#include <gtest/gtest.h>
+
+ +
using namespace SA;
+
+
namespace SA::UT::PackedFunctionTest
+
{
+
//{ Variables
+
+
int Foo(int _i, int _j)
+
{
+
return _i * 2 + _j;
+
}
+
+
class A
+
{
+
public:
+
int Bar(int _i, int _j)
+
{
+
return _i * 3 + _j;
+
}
+
};
+
+
//}
+
+
TEST(PackedFunction, ValueConstructors)
+
{
+
PackedFunction<int(int)> f1;
+
EXPECT_TRUE(f1.IsEmpty());
+
+
PackedFunction f2(Foo, 2, 3);
+
EXPECT_FALSE(f2.IsEmpty());
+
EXPECT_EQ(f2(), 7);
+
+
A a;
+
PackedFunction f3(&a, &A::Bar, 2, 2);
+
EXPECT_FALSE(f3.IsEmpty());
+
EXPECT_EQ(f3(), 8);
+
}
+
+
TEST(PackedFunction, MoveConstructors)
+
{
+
// Static function move.
+
PackedFunction f1(Foo, 2, 3);
+
const PackedFunction f2 = std::move(f1);
+
EXPECT_TRUE(f1.IsEmpty());
+
EXPECT_FALSE(f2.IsEmpty());
+
EXPECT_EQ(f2(), 7);
+
+
// Member function move.
+
A a;
+
PackedFunction f3(&a, &A::Bar, 2, 2);
+
const PackedFunction f4 = std::move(f3);
+
EXPECT_TRUE(f3.IsEmpty());
+
EXPECT_FALSE(f4.IsEmpty());
+
EXPECT_EQ(f4(), 8);
+
}
+
+
TEST(PackedFunction, CopyConstructors)
+
{
+
// Static function copy.
+
const PackedFunction f1(Foo, 2, 3);
+
const PackedFunction f2 = f1;
+
EXPECT_FALSE(f1.IsEmpty());
+
EXPECT_EQ(f2(), 7);
+
+
// Member function copy.
+
A a;
+
const PackedFunction f3(&a, &A::Bar, 2, 2);
+
const PackedFunction f4 = f3;
+
EXPECT_FALSE(f3.IsEmpty());
+
EXPECT_EQ(f4(), 8);
+
}
+
+
TEST(PackedFunction, Equals)
+
{
+
A a;
+
const PackedFunction f1(Foo, 2, 3);
+
const PackedFunction f2(&a, &A::Bar, 2, 2);
+
+
EXPECT_TRUE(f1.Equals(f1));
+
EXPECT_FALSE(f1.Equals(f2));
+
+
EXPECT_EQ(f1, f1);
+
EXPECT_FALSE(f1 == f2);
+
+
EXPECT_NE(f1, f2);
+
EXPECT_FALSE(f1 != f1);
+
+
+
PackedFunction f3(Foo, 2, 3);
+
EXPECT_FALSE(f3.IsEmpty());
+
+
f3.Clear();
+
EXPECT_TRUE(f3.IsEmpty());
+
}
+
+
TEST(PackedFunction, Set)
+
{
+
PackedFunction<int(int, int)> f1;
+
f1.Set(Foo, 2, 3);
+
EXPECT_EQ(f1(), 7);
+
+
A a;
+
f1.Set(&a, &A::Bar, 2, 2);
+
EXPECT_EQ(f1(), 8);
+
}
+
+
TEST(PackedFunction, MoveOperators)
+
{
+
// Static function move.
+
PackedFunction f1(Foo, 2, 3);
+
PackedFunction<int(int, int)> f2;
+
f2 = std::move(f1);
+
EXPECT_TRUE(f1.IsEmpty());
+
EXPECT_FALSE(f2.IsEmpty());
+
EXPECT_EQ(f2(), 7);
+
+
// Member function move.
+
A a;
+
PackedFunction f3(&a, &A::Bar, 2, 2);
+
PackedFunction<int(int, int)> f4;
+
f4 = std::move(f3);
+
EXPECT_TRUE(f3.IsEmpty());
+
EXPECT_FALSE(f4.IsEmpty());
+
EXPECT_EQ(f4(), 8);
+
}
+
+
TEST(PackedFunction, CopyOperators)
+
{
+
// Static function copy.
+
const PackedFunction f1(Foo, 2, 3);
+
PackedFunction<int(int, int)> f2;
+
f2 = f1;
+
EXPECT_FALSE(f1.IsEmpty());
+
EXPECT_EQ(f2(), 7);
+
+
// Member function copy.
+
A a;
+
const PackedFunction f3(&a, &A::Bar, 2, 2);
+
PackedFunction<int(int, int)> f4;
+
f4 = f3;
+
EXPECT_FALSE(f3.IsEmpty());
+
EXPECT_EQ(f4(), 8);
+
}
+
}
+
Definition of Sapphire Packed Function type.
+
Packed Function type implementation.
Definition PackedFunction.hpp:32
+
void Set(R(*_func)(Args...), Args... _args)
Set (assignation) new static function to bind. Free previous allocated memory.
+
bool Equals(const PackedFunction &_other) const
Compare 2 function handle.
+
+ + + + diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..85375a4 --- /dev/null +++ b/annotated.html @@ -0,0 +1,100 @@ + + + + + + + +SA_Event: Class List + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + +
 NSA
 NIntl
 CFuncHandleHandle struct for a function
 CFuncHandle< void, Args... >Handle struct for a function with void return type
 CFuncMemberDataData struct for typed member function
 CFuncMemberDataBaseBase struct of member function data
 CFuncMemberHandleHandle struct for a member function
 CFuncMemberHandle< void, Args... >Handle struct for a member function with void return type
 CEventSapphire Event default (undefined) declaration
 CEvent< R(Args...)>Sapphire Event class
 CFunctionFunction type implementation
 COwnedEventSapphire Owned-Event default (undefined) declaration
 COwnedEvent< OwnerT, R(Args...)>Sapphire Owned-Event class
 CPackedFunctionPacked Function type implementation
+
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/bc_s.png differ diff --git a/bc_sd.png b/bc_sd.png new file mode 100644 index 0000000..31ca888 Binary files /dev/null and b/bc_sd.png differ diff --git a/class_s_a_1_1_event.html b/class_s_a_1_1_event.html new file mode 100644 index 0000000..ca273d1 --- /dev/null +++ b/class_s_a_1_1_event.html @@ -0,0 +1,104 @@ + + + + + + + +SA_Event: SA::Event< R, Args > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SA::Event< R, Args > Class Template Reference
+
+
+ +

Sapphire Event default (undefined) declaration. + More...

+

Detailed Description

+
template<typename R, typename... Args>
+class SA::Event< R, Args >

Sapphire Event default (undefined) declaration.

+
Template Parameters
+ + + +
RReturn type.
ArgsArgument types
+
+
+
Examples
EventTests.cpp.
+
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4-members.html b/class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4-members.html new file mode 100644 index 0000000..869e85b --- /dev/null +++ b/class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4-members.html @@ -0,0 +1,109 @@ + + + + + + + +SA_Event: Member List + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SA::Event< R(Args...)> Member List
+
+
+ +

This is the complete list of members for SA::Event< R(Args...)>, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
Add(R(*_func)(Args...), R *_result=nullptr)SA::Event< R(Args...)>
Add(C *_caller, R(C::*_func)(Args...), R *_result=nullptr)SA::Event< R(Args...)>
Clear()SA::Event< R(Args...)>
Event()=defaultSA::Event< R(Args...)>
Event(Event &&_other)=defaultSA::Event< R(Args...)>
Event(const Event &)=deleteSA::Event< R(Args...)>
Execute(const Args &... _args)SA::Event< R(Args...)>
Execute(std::vector< R > &_results, const Args &... _args)SA::Event< R(Args...)>
IsEmpty() const noexceptSA::Event< R(Args...)>
operator()(const Args &... _args)SA::Event< R(Args...)>
operator()(std::vector< R > &_results, const Args &... _args)SA::Event< R(Args...)>
operator+=(R(*_func)(Args...))SA::Event< R(Args...)>
operator-=(R(*_func)(Args...))SA::Event< R(Args...)>
operator=(Event &&_other)SA::Event< R(Args...)>
operator=(const Event &)=deleteSA::Event< R(Args...)>
Remove(R(*_func)(Args...))SA::Event< R(Args...)>
Remove(const C *_caller, R(C::*_func)(Args...))SA::Event< R(Args...)>
RRemove(R(*_func)(Args...))SA::Event< R(Args...)>
RRemove(const C *_caller, R(C::*_func)(Args...))SA::Event< R(Args...)>
~Event()SA::Event< R(Args...)>
+ + + + diff --git a/class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html b/class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html new file mode 100644 index 0000000..90c50b8 --- /dev/null +++ b/class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html @@ -0,0 +1,713 @@ + + + + + + + +SA_Event: SA::Event< R(Args...)> Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Member Functions | +List of all members
+
SA::Event< R(Args...)> Class Template Reference
+
+
+ +

Sapphire Event class. + More...

+ +

#include <Event.hpp>

+
+Inheritance diagram for SA::Event< R(Args...)>:
+
+
+ + +SA::OwnedEvent< OwnerT, R(Args...)> + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Event ()=default
 Default constructor.
 
Event (Event &&_other)=default
 Default Move constructor.
 
Event (const Event &)=delete
 Deleted copy constructor.
 
~Event ()
 Destructor (auto clean).
 
bool IsEmpty () const noexcept
 Check whether this event is empty (no function registered).
 
+void Clear ()
 Clear all registered function.
 
void Add (R(*_func)(Args...), R *_result=nullptr)
 Add a function to register.
 
template<typename C >
void Add (C *_caller, R(C::*_func)(Args...), R *_result=nullptr)
 Add a member function to register.
 
bool Remove (R(*_func)(Args...))
 Remove a registered function.
 
template<typename C >
bool Remove (const C *_caller, R(C::*_func)(Args...))
 Remove a registered member function.
 
bool RRemove (R(*_func)(Args...))
 Reverse Remove a registered function.
 
template<typename C >
bool RRemove (const C *_caller, R(C::*_func)(Args...))
 Reverse Remove a registered member function.
 
void Execute (const Args &... _args)
 Execute all registered functions.
 
void Execute (std::vector< R > &_results, const Args &... _args)
 Execute all registered functions.
 
Eventoperator= (Event &&_other)
 Move operator.
 
Eventoperator= (const Event &)=delete
 Deleted copy operator.
 
Eventoperator+= (R(*_func)(Args...))
 Add a function to register.
 
Eventoperator-= (R(*_func)(Args...))
 Remove a registered function.
 
void operator() (const Args &... _args)
 Execute all registered functions.
 
void operator() (std::vector< R > &_results, const Args &... _args)
 Execute all registered functions.
 
+

Detailed Description

+
template<typename R, typename... Args>
+class SA::Event< R(Args...)>

Sapphire Event class.

+

Template specialization for R(Args...) deduction.

+
Template Parameters
+ + + +
RReturn type.
ArgsArgument types
+
+
+

Member Function Documentation

+ +

◆ Add() [1/2]

+ +
+
+
+template<typename R , typename... Args>
+
+template<typename C >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void SA::Event< R(Args...)>::Add (C * _caller,
R(C::*)(Args...) _func,
R * _result = nullptr 
)
+
+ +

Add a member function to register.

+

Ensure registered order on execution.

+
Template Parameters
+ + +
CCaller type.
+
+
+
Parameters
+ + + + +
[in]_callerCaller instance to call function from.
[in]_funcMember function to register.
[in]_resultOptionnal result handle.
+
+
+ +
+
+ +

◆ Add() [2/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + + + + + + + + + + + +
void SA::Event< R(Args...)>::Add (R(*)(Args...) _func,
R * _result = nullptr 
)
+
+ +

Add a function to register.

+

Ensure registered order on execution.

+
Parameters
+ + + +
[in]_funcFunction to register.
[in]_resultOptionnal result handle.
+
+
+ +
+
+ +

◆ Execute() [1/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
void SA::Event< R(Args...)>::Execute (const Args &... _args)
+
+ +

Execute all registered functions.

+

Ensure registered order execution.

+
Parameters
+ + +
[in]_argsArgument to forward to functions.
+
+
+ +
+
+ +

◆ Execute() [2/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + + + + + + + + + + + +
void SA::Event< R(Args...)>::Execute (std::vector< R > & _results,
const Args &... _args 
)
+
+ +

Execute all registered functions.

+

Ensure registered order execution.

+
Parameters
+ + + +
[in]_resultsOptionnal output results (append).
[in]_argsArgument to forward to functions.
+
+
+ +
+
+ +

◆ IsEmpty()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + +
bool SA::Event< R(Args...)>::IsEmpty () const
+
+noexcept
+
+ +

Check whether this event is empty (no function registered).

+
Returns
true if empty.
+ +
+
+ +

◆ operator()() [1/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
void SA::Event< R(Args...)>::operator() (const Args &... _args)
+
+ +

Execute all registered functions.

+

Use Execute() method.

+
Parameters
+ + +
[in]_argsArgument to forward to functions.
+
+
+ +
+
+ +

◆ operator()() [2/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + + + + + + + + + + + +
void SA::Event< R(Args...)>::operator() (std::vector< R > & _results,
const Args &... _args 
)
+
+ +

Execute all registered functions.

+

Use Execute() method. Ensure registered order execution.

+
Parameters
+ + + +
[in]_resultsOptionnal output results (append).
[in]_argsArgument to forward to functions.
+
+
+ +
+
+ +

◆ operator+=()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
Event & SA::Event< R(Args...)>::operator+= (R(*)(Args...) _func)
+
+ +

Add a function to register.

+

Use Add() method.

+
Parameters
+ + +
[in]_funcFunction to register.
+
+
+
Returns
This event.
+ +
+
+ +

◆ operator-=()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
Event & SA::Event< R(Args...)>::operator-= (R(*)(Args...) _func)
+
+ +

Remove a registered function.

+

Use Remove() method.

+
Parameters
+ + +
[in]_funcFunction to unregister.
+
+
+
Returns
This event.
+ +
+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
Event & SA::Event< R(Args...)>::operator= (const Event< R(Args...)> & )
+
+delete
+
+ +

Deleted copy operator.

+
Returns
this.
+ +
+
+ +

◆ operator=() [2/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
Event & SA::Event< R(Args...)>::operator= (Event< R(Args...)> && _other)
+
+ +

Move operator.

+
Returns
this.
+ +
+
+ +

◆ Remove() [1/2]

+ +
+
+
+template<typename R , typename... Args>
+
+template<typename C >
+ + + + + + + + + + + + + + + + + + +
bool SA::Event< R(Args...)>::Remove (const C * _caller,
R(C::*)(Args...) _func 
)
+
+ +

Remove a registered member function.

+

Start function iteration from first to last registered.

+
Parameters
+ + + +
[in]_callerCaller instance of registered function.
[in]_funcMember function to unregister.
+
+
+
Returns
true if successfully removed, otherwise false.
+ +
+
+ +

◆ Remove() [2/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
bool SA::Event< R(Args...)>::Remove (R(*)(Args...) _func)
+
+ +

Remove a registered function.

+

Start function iteration from first to last registered.

+
Parameters
+ + +
[in]_funcFunction to unregister.
+
+
+
Returns
true if successfully removed, otherwise false.
+ +
+
+ +

◆ RRemove() [1/2]

+ +
+
+
+template<typename R , typename... Args>
+
+template<typename C >
+ + + + + + + + + + + + + + + + + + +
bool SA::Event< R(Args...)>::RRemove (const C * _caller,
R(C::*)(Args...) _func 
)
+
+ +

Reverse Remove a registered member function.

+

Start function iteration from last to first registered.

+
Parameters
+ + + +
[in]_callerCaller instance of registered function.
[in]_funcMember function to unregister.
+
+
+
Returns
true if successfully removed, otherwise false.
+ +
+
+ +

◆ RRemove() [2/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
bool SA::Event< R(Args...)>::RRemove (R(*)(Args...) _func)
+
+ +

Reverse Remove a registered function.

+

Start function iteration from last to first registered.

+
Parameters
+ + +
[in]_funcFunction to unregister.
+
+
+
Returns
true if successfully removed, otherwise false.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.png b/class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.png new file mode 100644 index 0000000..3165038 Binary files /dev/null and b/class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.png differ diff --git a/class_s_a_1_1_function-members.html b/class_s_a_1_1_function-members.html new file mode 100644 index 0000000..5eabd80 --- /dev/null +++ b/class_s_a_1_1_function-members.html @@ -0,0 +1,111 @@ + + + + + + + +SA_Event: Member List + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SA::Function< R, Args > Member List
+
+
+ +

This is the complete list of members for SA::Function< R, Args >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
Clear()SA::Function< R, Args >
Equals(const Function &_other) constSA::Function< R, Args >
Execute(Args... _args) constSA::Function< R, Args >
Function()=defaultSA::Function< R, Args >
Function(R(*_func)(Args...)) noexceptSA::Function< R, Args >
Function(C *_caller, R(C::*_func)(Args...))SA::Function< R, Args >
Function(Function &&_other) noexceptSA::Function< R, Args >
Function(const Function &_other) noexceptSA::Function< R, Args >
IsEmpty() const noexceptSA::Function< R, Args >
mIntlFuncSA::Function< R, Args >
mSFuncSA::Function< R, Args >
operator bool() constSA::Function< R, Args >
operator!=(const Function &_rhs) constSA::Function< R, Args >
operator()(Args... _args) constSA::Function< R, Args >
operator=(Function &&_rhs) noexceptSA::Function< R, Args >
operator=(const Function &_rhs) noexceptSA::Function< R, Args >
operator=(R(*_func)(Args...)) noexceptSA::Function< R, Args >
operator=(std::nullptr_t)SA::Function< R, Args >
operator==(const Function &_rhs) constSA::Function< R, Args >
Set(R(*_func)(Args...))SA::Function< R, Args >
Set(C *_caller, R(C::*_func)(Args...))SA::Function< R, Args >
~Function()SA::Function< R, Args >
+ + + + diff --git a/class_s_a_1_1_function.html b/class_s_a_1_1_function.html new file mode 100644 index 0000000..31d0c1c --- /dev/null +++ b/class_s_a_1_1_function.html @@ -0,0 +1,737 @@ + + + + + + + +SA_Event: SA::Function< R, Args > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Member Functions | +List of all members
+
SA::Function< R, Args > Class Template Reference
+
+
+ +

Function type implementation. + More...

+ +

#include <Function.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Function ()=default
 Default constructor.
 
 Function (R(*_func)(Args...)) noexcept
 
template<typename C >
 Function (C *_caller, R(C::*_func)(Args...))
 
 Function (Function &&_other) noexcept
 
 Function (const Function &_other) noexcept
 
~Function ()
 Destructor (free memory).
 
bool IsEmpty () const noexcept
 Check whether this function handle is empty (no function bound).
 
 operator bool () const
 !IsEmpty bool operator.
 
bool Equals (const Function &_other) const
 Compare 2 function handle.
 
bool operator== (const Function &_rhs) const
 Compare 2 function handle equality.
 
bool operator!= (const Function &_rhs) const
 Compare 2 function handle inequality.
 
void Set (R(*_func)(Args...))
 Set (assignation) new static function to bind. Free previous allocated memory.
 
template<typename C >
void Set (C *_caller, R(C::*_func)(Args...))
 Set (assignation) new member function to bind. Free previous allocated memory.
 
Functionoperator= (Function &&_rhs) noexcept
 Move operator Steal function handle (no additional memory allocation).
 
Functionoperator= (const Function &_rhs) noexcept
 Copy operator Additional memory allocation on member function copy.
 
Functionoperator= (R(*_func)(Args...)) noexcept
 
+void Clear ()
 Clear bound function. Free allocated memory.
 
Functionoperator= (std::nullptr_t)
 Clear bound function. Free allocated memory.
 
Execute (Args... _args) const
 Execute bound function with args.
 
operator() (Args... _args) const
 Execute bound function with args operator.
 
+

Detailed Description

+
template<typename R, typename... Args>
+class SA::Function< R, Args >

Function type implementation.

+
Template Parameters
+ + + +
RReturn type.
ArgsArgument types
+
+
+
Examples
FunctionTests.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ Function() [1/4]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
SA::Function< R, Args >::Function (R(*)(Args...) _func)
+
+noexcept
+
+

Value constructor with static function.

+
Parameters
+ + +
[in]_funcStatic function to bind.
+
+
+ +
+
+ +

◆ Function() [2/4]

+ +
+
+
+template<typename R , typename... Args>
+
+template<typename C >
+ + + + + + + + + + + + + + + + + + +
SA::Function< R, Args >::Function (C * _caller,
R(C::*)(Args...) _func 
)
+
+

Value constructor with member function.

+
Template Parameters
+ + +
CCaller type.
+
+
+
Parameters
+ + + +
[in]_callerObject caller of member function.
[in]_funcMember function to bind.
+
+
+ +
+
+ +

◆ Function() [3/4]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
SA::Function< R, Args >::Function (Function< R, Args > && _other)
+
+noexcept
+
+

Move constructor. Steal function handle (no additional memory allocation).

+
Parameters
+ + +
[in]_otherOther handle to move.
+
+
+ +
+
+ +

◆ Function() [4/4]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
SA::Function< R, Args >::Function (const Function< R, Args > & _other)
+
+noexcept
+
+

Copy constructor. Additional memory allocation on member function copy.

+
Parameters
+ + +
[in]_otherOther handle to copy.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ Equals()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
bool SA::Function< R, Args >::Equals (const Function< R, Args > & _other) const
+
+ +

Compare 2 function handle.

+
Parameters
+ + +
[in]_otherOther function to compare to.
+
+
+
Returns
Whether this and _other are equal.
+
Examples
FunctionTests.cpp.
+
+ +
+
+ +

◆ Execute()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
R SA::Function< R, Args >::Execute (Args... _args) const
+
+ +

Execute bound function with args.

+
Parameters
+ + +
[in]_argsArgument to forward to bound function.
+
+
+
Returns
Bound function result value.
+ +
+
+ +

◆ IsEmpty()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + +
bool SA::Function< R, Args >::IsEmpty () const
+
+noexcept
+
+ +

Check whether this function handle is empty (no function bound).

+
Returns
true if empty.
+
Examples
FunctionTests.cpp.
+
+ +
+
+ +

◆ operator bool()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + +
SA::Function< R, Args >::operator bool () const
+
+ +

!IsEmpty bool operator.

+
Returns
true if non empty.
+ +
+
+ +

◆ operator!=()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
bool SA::Function< R, Args >::operator!= (const Function< R, Args > & _rhs) const
+
+ +

Compare 2 function handle inequality.

+
Parameters
+ + +
[in]_rhsOther function to compare to.
+
+
+
Returns
Whether this and _other are non-equal.
+ +
+
+ +

◆ operator()()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
R SA::Function< R, Args >::operator() (Args... _args) const
+
+ +

Execute bound function with args operator.

+
Parameters
+ + +
[in]_argsArgument to forward to bound function.
+
+
+
Returns
Bound function result value.
+ +
+
+ +

◆ operator=() [1/4]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
Function & SA::Function< R, Args >::operator= (const Function< R, Args > & _rhs)
+
+noexcept
+
+ +

Copy operator Additional memory allocation on member function copy.

+
Parameters
+ + +
[in]_rhsFunction handle to move.
+
+
+
Returns
this.
+ +
+
+ +

◆ operator=() [2/4]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
Function & SA::Function< R, Args >::operator= (Function< R, Args > && _rhs)
+
+noexcept
+
+ +

Move operator Steal function handle (no additional memory allocation).

+
Parameters
+ + +
[in]_rhsFunction handle to move.
+
+
+
Returns
this.
+ +
+
+ +

◆ operator=() [3/4]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
Function & SA::Function< R, Args >::operator= (R(*)(Args...) _func)
+
+noexcept
+
+

Value assignation with static function. Free previous allocated memory.

+
Parameters
+ + +
[in]_funcStatic function to bind.
+
+
+
Returns
this
+ +
+
+ +

◆ operator=() [4/4]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
Function & SA::Function< R, Args >::operator= (std::nullptr_t )
+
+ +

Clear bound function. Free allocated memory.

+
Returns
this
+ +
+
+ +

◆ operator==()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
bool SA::Function< R, Args >::operator== (const Function< R, Args > & _rhs) const
+
+ +

Compare 2 function handle equality.

+
Parameters
+ + +
[in]_rhsOther function to compare to.
+
+
+
Returns
Whether this and _other are equal.
+ +
+
+ +

◆ Set() [1/2]

+ +
+
+
+template<typename R , typename... Args>
+
+template<typename C >
+ + + + + + + + + + + + + + + + + + +
void SA::Function< R, Args >::Set (C * _caller,
R(C::*)(Args...) _func 
)
+
+ +

Set (assignation) new member function to bind. Free previous allocated memory.

+
Template Parameters
+ + +
CCaller type.
+
+
+
Parameters
+ + + +
[in]_callerNew object caller of member function.
[in]_funcNew member function to bind.
+
+
+ +
+
+ +

◆ Set() [2/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
void SA::Function< R, Args >::Set (R(*)(Args...) _func)
+
+ +

Set (assignation) new static function to bind. Free previous allocated memory.

+
Parameters
+ + +
[in]_funcNew static function to bind.
+
+
+
Examples
FunctionTests.cpp.
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/class_s_a_1_1_owned_event.html b/class_s_a_1_1_owned_event.html new file mode 100644 index 0000000..113e2fb --- /dev/null +++ b/class_s_a_1_1_owned_event.html @@ -0,0 +1,105 @@ + + + + + + + +SA_Event: SA::OwnedEvent< OwnerT, R, Args > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SA::OwnedEvent< OwnerT, R, Args > Class Template Reference
+
+
+ +

Sapphire Owned-Event default (undefined) declaration. + More...

+

Detailed Description

+
template<typename OwnerT, typename R, typename... Args>
+class SA::OwnedEvent< OwnerT, R, Args >

Sapphire Owned-Event default (undefined) declaration.

+
Template Parameters
+ + + + +
OwnerTOwner type.
RReturn type.
ArgsArgument types
+
+
+
Examples
OwnedEventTests.cpp.
+
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4-members.html b/class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4-members.html new file mode 100644 index 0000000..7b989dd --- /dev/null +++ b/class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4-members.html @@ -0,0 +1,88 @@ + + + + + + + +SA_Event: Member List + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SA::OwnedEvent< OwnerT, R(Args...)> Member List
+
+
+ +

This is the complete list of members for SA::OwnedEvent< OwnerT, R(Args...)>, including all inherited members.

+
+ + + + diff --git a/class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4.html b/class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4.html new file mode 100644 index 0000000..1731b6a --- /dev/null +++ b/class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4.html @@ -0,0 +1,117 @@ + + + + + + + +SA_Event: SA::OwnedEvent< OwnerT, R(Args...)> Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+List of all members
+
SA::OwnedEvent< OwnerT, R(Args...)> Class Template Reference
+
+
+ +

Sapphire Owned-Event class. + More...

+ +

#include <OwnedEvent.hpp>

+
+Inheritance diagram for SA::OwnedEvent< OwnerT, R(Args...)>:
+
+
+ + +SA::Event< R(Args...)> + +
+

Detailed Description

+
template<typename OwnerT, typename R, typename... Args>
+class SA::OwnedEvent< OwnerT, R(Args...)>

Sapphire Owned-Event class.

+

Event class with Execute-protected system. Only Owner class is allowed to call Execute().

+
Template Parameters
+ + + + +
OwnerTOwner type.
RReturn type.
ArgsArgument types
+
+
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4.png b/class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4.png new file mode 100644 index 0000000..6d9042c Binary files /dev/null and b/class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4.png differ diff --git a/class_s_a_1_1_packed_function-members.html b/class_s_a_1_1_packed_function-members.html new file mode 100644 index 0000000..b55f66b --- /dev/null +++ b/class_s_a_1_1_packed_function-members.html @@ -0,0 +1,114 @@ + + + + + + + +SA_Event: Member List + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SA::PackedFunction< R, Args > Member List
+
+
+ +

This is the complete list of members for SA::PackedFunction< R, Args >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Equals(const PackedFunction &_other) constSA::PackedFunction< R, Args >
Function< R, Args... >::Equals(const Function &_other) constSA::Function< R, Args... >private
Execute() constSA::PackedFunction< R, Args >
Function< R, Args... >::Execute(Args... _args) constSA::Function< R, Args... >private
operator!=(const PackedFunction &_rhs) constSA::PackedFunction< R, Args >
Function< R, Args... >::operator!=(const Function &_rhs) constSA::Function< R, Args... >private
operator()() constSA::PackedFunction< R, Args >
Function< R, Args... >::operator()(Args... _args) constSA::Function< R, Args... >private
operator=(PackedFunction &&_rhs) noexceptSA::PackedFunction< R, Args >
operator=(const PackedFunction &_rhs) noexceptSA::PackedFunction< R, Args >
Function< R, Args... >::operator=(Function &&_rhs) noexceptSA::Function< R, Args... >private
Function< R, Args... >::operator=(const Function &_rhs) noexceptSA::Function< R, Args... >private
Function< R, Args... >::operator=(R(*_func)(Args...)) noexceptSA::Function< R, Args... >private
Function< R, Args... >::operator=(std::nullptr_t)SA::Function< R, Args... >private
operator==(const PackedFunction &_rhs) constSA::PackedFunction< R, Args >
Function< R, Args... >::operator==(const Function &_rhs) constSA::Function< R, Args... >private
PackedFunction()=defaultSA::PackedFunction< R, Args >
PackedFunction(R(*_func)(Args...), Args... _args) noexceptSA::PackedFunction< R, Args >
PackedFunction(C *_caller, R(C::*_func)(Args...), Args... _args)SA::PackedFunction< R, Args >
PackedFunction(PackedFunction &&_other) noexceptSA::PackedFunction< R, Args >
PackedFunction(const PackedFunction &_other) noexceptSA::PackedFunction< R, Args >
Set(R(*_func)(Args...), Args... _args)SA::PackedFunction< R, Args >
Set(C *_caller, R(C::*_func)(Args...), Args... _args)SA::PackedFunction< R, Args >
Function< R, Args... >::Set(R(*_func)(Args...))SA::Function< R, Args... >private
Function< R, Args... >::Set(C *_caller, R(C::*_func)(Args...))SA::Function< R, Args... >private
+ + + + diff --git a/class_s_a_1_1_packed_function.html b/class_s_a_1_1_packed_function.html new file mode 100644 index 0000000..cbeb2cb --- /dev/null +++ b/class_s_a_1_1_packed_function.html @@ -0,0 +1,636 @@ + + + + + + + +SA_Event: SA::PackedFunction< R, Args > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Member Functions | +List of all members
+
SA::PackedFunction< R, Args > Class Template Reference
+
+
+ +

Packed Function type implementation. + More...

+ +

#include <PackedFunction.hpp>

+
+Inheritance diagram for SA::PackedFunction< R, Args >:
+
+
+ + +SA::Function< R, Args... > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

PackedFunction ()=default
 Default constructor.
 
 PackedFunction (R(*_func)(Args...), Args... _args) noexcept
 
template<typename C >
 PackedFunction (C *_caller, R(C::*_func)(Args...), Args... _args)
 
 PackedFunction (PackedFunction &&_other) noexcept
 
 PackedFunction (const PackedFunction &_other) noexcept
 
bool Equals (const PackedFunction &_other) const
 Compare 2 function handle.
 
bool operator== (const PackedFunction &_rhs) const
 Compare 2 function handle equality.
 
bool operator!= (const PackedFunction &_rhs) const
 Compare 2 function handle inequality.
 
void Set (R(*_func)(Args...), Args... _args)
 Set (assignation) new static function to bind. Free previous allocated memory.
 
template<typename C >
void Set (C *_caller, R(C::*_func)(Args...), Args... _args)
 Set (assignation) new member function to bind. Free previous allocated memory.
 
PackedFunctionoperator= (PackedFunction &&_rhs) noexcept
 Move operator Steal function handle (no additional memory allocation).
 
PackedFunctionoperator= (const PackedFunction &_rhs) noexcept
 Copy operator Additional memory allocation on member function copy.
 
Execute () const
 Execute bound function with packed args.
 
operator() () const
 Execute bound function with packed args operator.
 
+

Detailed Description

+
template<typename R, typename... Args>
+class SA::PackedFunction< R, Args >

Packed Function type implementation.

+
Template Parameters
+ + + +
RReturn type.
ArgsArgument types
+
+
+
Examples
PackedFunctionTests.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ PackedFunction() [1/4]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
SA::PackedFunction< R, Args >::PackedFunction (R(*)(Args...) _func,
Args... _args 
)
+
+noexcept
+
+

Value constructor with static function.

+
Parameters
+ + + +
[in]_funcStatic function to bind.
[in]_argsArgs to pack.
+
+
+ +
+
+ +

◆ PackedFunction() [2/4]

+ +
+
+
+template<typename R , typename... Args>
+
+template<typename C >
+ + + + + + + + + + + + + + + + + + + + + + + + +
SA::PackedFunction< R, Args >::PackedFunction (C * _caller,
R(C::*)(Args...) _func,
Args... _args 
)
+
+

Value constructor with member function.

+
Template Parameters
+ + +
CCaller type.
+
+
+
Parameters
+ + + + +
[in]_callerObject caller of member function.
[in]_funcMember function to bind.
[in]_argsArgs to pack.
+
+
+ +
+
+ +

◆ PackedFunction() [3/4]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
SA::PackedFunction< R, Args >::PackedFunction (PackedFunction< R, Args > && _other)
+
+noexcept
+
+

Move constructor. Steal function handle (no additional memory allocation).

+
Parameters
+ + +
[in]_otherOther handle to move.
+
+
+ +
+
+ +

◆ PackedFunction() [4/4]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
SA::PackedFunction< R, Args >::PackedFunction (const PackedFunction< R, Args > & _other)
+
+noexcept
+
+

Copy constructor. Additional memory allocation on member function copy.

+
Parameters
+ + +
[in]_otherOther handle to copy.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ Equals()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
bool SA::PackedFunction< R, Args >::Equals (const PackedFunction< R, Args > & _other) const
+
+ +

Compare 2 function handle.

+
Parameters
+ + +
[in]_otherOther function to compare to.
+
+
+
Returns
Whether this and _other are equal.
+
Examples
PackedFunctionTests.cpp.
+
+ +
+
+ +

◆ Execute()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + +
R SA::PackedFunction< R, Args >::Execute () const
+
+ +

Execute bound function with packed args.

+
Returns
Bound function result value.
+ +
+
+ +

◆ operator!=()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
bool SA::PackedFunction< R, Args >::operator!= (const PackedFunction< R, Args > & _rhs) const
+
+ +

Compare 2 function handle inequality.

+
Parameters
+ + +
[in]_rhsOther function to compare to.
+
+
+
Returns
Whether this and _other are non-equal.
+ +
+
+ +

◆ operator()()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + +
R SA::PackedFunction< R, Args >::operator() () const
+
+ +

Execute bound function with packed args operator.

+
Returns
Bound function result value.
+ +
+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
PackedFunction & SA::PackedFunction< R, Args >::operator= (const PackedFunction< R, Args > & _rhs)
+
+noexcept
+
+ +

Copy operator Additional memory allocation on member function copy.

+
Parameters
+ + +
[in]_rhsFunction handle to move.
+
+
+
Returns
this.
+ +
+
+ +

◆ operator=() [2/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + +
+ + + + + + + + +
PackedFunction & SA::PackedFunction< R, Args >::operator= (PackedFunction< R, Args > && _rhs)
+
+noexcept
+
+ +

Move operator Steal function handle (no additional memory allocation).

+
Parameters
+ + +
[in]_rhsFunction handle to move.
+
+
+
Returns
this.
+ +
+
+ +

◆ operator==()

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + +
bool SA::PackedFunction< R, Args >::operator== (const PackedFunction< R, Args > & _rhs) const
+
+ +

Compare 2 function handle equality.

+
Parameters
+ + +
[in]_rhsOther function to compare to.
+
+
+
Returns
Whether this and _other are equal.
+ +
+
+ +

◆ Set() [1/2]

+ +
+
+
+template<typename R , typename... Args>
+
+template<typename C >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void SA::PackedFunction< R, Args >::Set (C * _caller,
R(C::*)(Args...) _func,
Args... _args 
)
+
+ +

Set (assignation) new member function to bind. Free previous allocated memory.

+
Template Parameters
+ + +
CCaller type.
+
+
+
Parameters
+ + + + +
[in]_callerNew object caller of member function.
[in]_funcNew member function to bind.
[in]_argsArgs to pack.
+
+
+ +
+
+ +

◆ Set() [2/2]

+ +
+
+
+template<typename R , typename... Args>
+ + + + + + + + + + + + + + + + + + +
void SA::PackedFunction< R, Args >::Set (R(*)(Args...) _func,
Args... _args 
)
+
+ +

Set (assignation) new static function to bind. Free previous allocated memory.

+
Parameters
+ + + +
[in]_funcNew static function to bind.
[in]_argsArgs to pack.
+
+
+
Examples
PackedFunctionTests.cpp.
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/class_s_a_1_1_packed_function.png b/class_s_a_1_1_packed_function.png new file mode 100644 index 0000000..45654cc Binary files /dev/null and b/class_s_a_1_1_packed_function.png differ diff --git a/classes.html b/classes.html new file mode 100644 index 0000000..1d06381 --- /dev/null +++ b/classes.html @@ -0,0 +1,97 @@ + + + + + + + +SA_Event: Class Index + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
E | F | O | P
+
+
+
E
+
Event (SA)
Event< R(Args...)> (SA)
+
+
F
+
FuncHandle (SA::Intl)
FuncHandle< void, Args... > (SA::Intl)
FuncMemberData (SA::Intl)
FuncMemberDataBase (SA::Intl)
FuncMemberHandle (SA::Intl)
FuncMemberHandle< void, Args... > (SA::Intl)
Function (SA)
+
+
O
+
OwnedEvent (SA)
OwnedEvent< OwnerT, R(Args...)> (SA)
+
+
P
+
PackedFunction (SA)
+
+
+ + + + diff --git a/closed.png b/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/closed.png differ diff --git a/dir_5e42f1ed0250ef473f569b10c537902f.html b/dir_5e42f1ed0250ef473f569b10c537902f.html new file mode 100644 index 0000000..bf8f51c --- /dev/null +++ b/dir_5e42f1ed0250ef473f569b10c537902f.html @@ -0,0 +1,92 @@ + + + + + + + +SA_Event: Include/SA Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SA Directory Reference
+
+
+ + + + +

+Directories

 Event
 
+
+ + + + diff --git a/dir_856524284ebe840938865dc061f982fb.html b/dir_856524284ebe840938865dc061f982fb.html new file mode 100644 index 0000000..240528f --- /dev/null +++ b/dir_856524284ebe840938865dc061f982fb.html @@ -0,0 +1,86 @@ + + + + + + + +SA_Event: Include Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Include Directory Reference
+
+
+
+ + + + diff --git a/dir_e9843a9354a1fdc8da6d0422e6636225.html b/dir_e9843a9354a1fdc8da6d0422e6636225.html new file mode 100644 index 0000000..0ef2e25 --- /dev/null +++ b/dir_e9843a9354a1fdc8da6d0422e6636225.html @@ -0,0 +1,111 @@ + + + + + + + +SA_Event: Include/SA/Event Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Event Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +

+Files

 Config.hpp
 Evente specific config file.
 
 Debug.hpp
 Event specific Debug file.
 
 Event.hpp
 Definition of Sapphire Event type.
 
 Function.hpp
 Definition of Sapphire Function type.
 
 FunctionMemberData.hpp
 Internal Definition of Sapphire FunctionMemberData type.
 
 OwnedEvent.hpp
 Definition of Sapphire Owned-Event type.
 
 PackedFunction.hpp
 Definition of Sapphire Packed Function type.
 
+
+ + + + diff --git a/doc.svg b/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docd.svg b/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..009a9b5 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,2045 @@ +/* The standard CSS for doxygen 1.9.8*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: var(--font-family-monospace); + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..b73c828 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,192 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ diff --git a/examples.html b/examples.html new file mode 100644 index 0000000..2081f3f --- /dev/null +++ b/examples.html @@ -0,0 +1,88 @@ + + + + + + + +SA_Event: Examples + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Examples
+
+
+
Here is a list of all examples:
+
+ + + + diff --git a/files.html b/files.html new file mode 100644 index 0000000..f466a9a --- /dev/null +++ b/files.html @@ -0,0 +1,96 @@ + + + + + + + +SA_Event: File List + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + +
  Include
  SA
  Event
 Config.hppEvente specific config file
 Debug.hppEvent specific Debug file
 Event.hppDefinition of Sapphire Event type
 Function.hppDefinition of Sapphire Function type
 FunctionMemberData.hppInternal Definition of Sapphire FunctionMemberData type
 OwnedEvent.hppDefinition of Sapphire Owned-Event type
 PackedFunction.hppDefinition of Sapphire Packed Function type
+
+
+ + + + diff --git a/folderclosed.svg b/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderclosedd.svg b/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderopen.svg b/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/folderopend.svg b/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/functions.html b/functions.html new file mode 100644 index 0000000..ec7e5ff --- /dev/null +++ b/functions.html @@ -0,0 +1,158 @@ + + + + + + + +SA_Event: Class Members + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- i -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- ~ -

+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 0000000..adf0fe6 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,148 @@ + + + + + + + +SA_Event: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- i -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- ~ -

+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 0000000..2ad1863 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,87 @@ + + + + + + + +SA_Event: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the class documentation for each member:
+
+ + + + diff --git a/group___event.html b/group___event.html new file mode 100644 index 0000000..266ce1b --- /dev/null +++ b/group___event.html @@ -0,0 +1,111 @@ + + + + + + + +SA_Event: Event + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Event
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  Config.hpp
 Evente specific config file.
 
file  Debug.hpp
 Event specific Debug file.
 
file  Event.hpp
 Definition of Sapphire Event type.
 
file  Function.hpp
 Definition of Sapphire Function type.
 
file  FunctionMemberData.hpp
 Internal Definition of Sapphire FunctionMemberData type.
 
file  OwnedEvent.hpp
 Definition of Sapphire Owned-Event type.
 
file  PackedFunction.hpp
 Definition of Sapphire Packed Function type.
 
+

Detailed Description

+

Sapphire Suite's Event Module.

+
+ + + + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 0000000..507e96f --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,99 @@ + + + + + + + +SA_Event: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + + + + + + + + + + +
 CSA::Event< R, Args >Sapphire Event default (undefined) declaration
 CSA::Event< R(Args...)>Sapphire Event class
 CSA::OwnedEvent< OwnerT, R(Args...)>Sapphire Owned-Event class
 CSA::Intl::FuncHandle< R, Args >Handle struct for a function
 CSA::Intl::FuncHandle< void, Args... >Handle struct for a function with void return type
 CSA::Intl::FuncMemberDataBaseBase struct of member function data
 CSA::Intl::FuncMemberData< C, R, Args >Data struct for typed member function
 CSA::Intl::FuncMemberHandle< R, Args >Handle struct for a member function
 CSA::Intl::FuncMemberHandle< void, Args... >Handle struct for a member function with void return type
 CSA::Function< R, Args >Function type implementation
 CSA::Function< R, Args... >
 CSA::PackedFunction< R, Args >Packed Function type implementation
 CSA::OwnedEvent< OwnerT, R, Args >Sapphire Owned-Event default (undefined) declaration
+
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..7148dc1 --- /dev/null +++ b/index.html @@ -0,0 +1,82 @@ + + + + + + + +SA_Event: Main Page + + + + + + + + + +
+
+ + + + + + +
+
SA_Event +
+
Sapphire's Suite's C++ Event and Function library.
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SA_Event Documentation
+
+
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..1dffb65 --- /dev/null +++ b/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/menu.js b/menu.js new file mode 100644 index 0000000..b0b2693 --- /dev/null +++ b/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 0000000..c8cff7d --- /dev/null +++ b/menudata.js @@ -0,0 +1,61 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Topics",url:"topics.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"i",url:"functions.html#index_i"}, +{text:"m",url:"functions.html#index_m"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"~",url:"functions.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"~",url:"functions_func.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}, +{text:"Examples",url:"examples.html"}]} diff --git a/minus.svg b/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/minusd.svg b/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/nav_f.png differ diff --git a/nav_fd.png b/nav_fd.png new file mode 100644 index 0000000..032fbdd Binary files /dev/null and b/nav_fd.png differ diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/nav_g.png differ diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/nav_h.png differ diff --git a/nav_hd.png b/nav_hd.png new file mode 100644 index 0000000..de80f18 Binary files /dev/null and b/nav_hd.png differ diff --git a/open.png b/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/open.png differ diff --git a/plus.svg b/plus.svg new file mode 100644 index 0000000..0752016 --- /dev/null +++ b/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plusd.svg b/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 0000000..5bb41a9 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['add_0',['add',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a8ecaaaf40d1090b12145806de460eb56',1,'SA::Event< R(Args...)>::Add(R(*_func)(Args...), R *_result=nullptr)'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a1036e97e983cdbfdde12511af4098eba',1,'SA::Event< R(Args...)>::Add(C *_caller, R(C::*_func)(Args...), R *_result=nullptr)']]] +]; diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 0000000..4ca3418 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['caller_0',['caller',['../struct_s_a_1_1_intl_1_1_func_member_data.html#ad14ba781bc712603fae819216f7dea10',1,'SA::Intl::FuncMemberData']]], + ['clear_1',['clear',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a0c7378c8b3ccf57bd04ee06fd296a5a5',1,'SA::Event< R(Args...)>::Clear()'],['../class_s_a_1_1_function.html#aa5b5ac63f5eab84d66b527ea279ec121',1,'SA::Function::Clear()']]], + ['compare_2',['compare',['../struct_s_a_1_1_intl_1_1_func_member_data_base.html#ac286e2f5059894b06fc0823dc5f54f39',1,'SA::Intl::FuncMemberDataBase::Compare()'],['../struct_s_a_1_1_intl_1_1_func_member_data.html#aba950fb6ac5de391a5d6693019bfdb9b',1,'SA::Intl::FuncMemberData::Compare()']]], + ['config_2ehpp_3',['Config.hpp',['../_config_8hpp.html',1,'']]] +]; diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 0000000..9d8bbc4 --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['data_0',['data',['../struct_s_a_1_1_intl_1_1_func_member_handle.html#a3d826cb7bfe7bb7d412b4766c4810bd2',1,'SA::Intl::FuncMemberHandle::data'],['../struct_s_a_1_1_intl_1_1_func_member_handle_3_01void_00_01_args_8_8_8_01_4.html#a2c2717ed529002e10021eac3c782e96f',1,'SA::Intl::FuncMemberHandle< void, Args... >::data']]], + ['debug_2ehpp_1',['Debug.hpp',['../_debug_8hpp.html',1,'']]], + ['duplicate_2',['duplicate',['../struct_s_a_1_1_intl_1_1_func_member_data_base.html#ac564e1bcbe76fe22373588d28cc7c5e6',1,'SA::Intl::FuncMemberDataBase::Duplicate()'],['../struct_s_a_1_1_intl_1_1_func_member_data.html#ac5ed1b532100cea57ce9d95c869f5598',1,'SA::Intl::FuncMemberData::Duplicate()']]] +]; diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 0000000..d489e42 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['equals_0',['equals',['../class_s_a_1_1_function.html#a1096725c0c2e8369fda1545fabd62d13',1,'SA::Function::Equals()'],['../class_s_a_1_1_packed_function.html#aef5f1c2e45386e36175046db1e450afd',1,'SA::PackedFunction::Equals()']]], + ['event_1',['event',['../class_s_a_1_1_event.html',1,'SA::Event< R, Args >'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#af1476436423999c249b0761c6328309b',1,'SA::Event< R(Args...)>::Event()=default'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a73fc357a26a3c5c277630eb525f9d423',1,'SA::Event< R(Args...)>::Event(Event &&_other)=default'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a5bc57db125df8a80825bd4b89308a401',1,'SA::Event< R(Args...)>::Event(const Event &)=delete'],['../group___event.html',1,'Event']]], + ['event_2ehpp_2',['Event.hpp',['../_event_8hpp.html',1,'']]], + ['event_3c_20r_28args_2e_2e_2e_29_3e_3',['Event< R(Args...)>',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html',1,'SA']]], + ['execute_4',['execute',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a5954a03a5d03976c9ebe4d9c410386e4',1,'SA::Event< R(Args...)>::Execute(const Args &... _args)'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a7ad5297720f7a90615d52b92f379bc3d',1,'SA::Event< R(Args...)>::Execute(std::vector< R > &_results, const Args &... _args)'],['../class_s_a_1_1_function.html#a01bdd1f46db315a694c4a6e3a026e334',1,'SA::Function::Execute()'],['../class_s_a_1_1_packed_function.html#a35e10ce391763630ba36156d11ceb890',1,'SA::PackedFunction::Execute()']]] +]; diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 0000000..760f27f --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['func_0',['func',['../struct_s_a_1_1_intl_1_1_func_member_data.html#a1c47fa403407412eabd3f24d0623981e',1,'SA::Intl::FuncMemberData::func'],['../struct_s_a_1_1_intl_1_1_func_member_handle_3_01void_00_01_args_8_8_8_01_4.html#a744a8d9e58e302c092d88981f449bd2d',1,'SA::Intl::FuncMemberHandle< void, Args... >::func'],['../struct_s_a_1_1_intl_1_1_func_member_handle.html#a0ea7be6fe1877f622b323dd35d8f7aab',1,'SA::Intl::FuncMemberHandle::func'],['../struct_s_a_1_1_intl_1_1_func_handle_3_01void_00_01_args_8_8_8_01_4.html#ac80ec7459caa0cb2aee0f9baaf1755dd',1,'SA::Intl::FuncHandle< void, Args... >::func'],['../struct_s_a_1_1_intl_1_1_func_handle.html#a71b42a6d71f01e2c4d0b8af289530d54',1,'SA::Intl::FuncHandle::func']]], + ['funchandle_1',['FuncHandle',['../struct_s_a_1_1_intl_1_1_func_handle.html',1,'SA::Intl']]], + ['funchandle_3c_20void_2c_20args_2e_2e_2e_20_3e_2',['FuncHandle< void, Args... >',['../struct_s_a_1_1_intl_1_1_func_handle_3_01void_00_01_args_8_8_8_01_4.html',1,'SA::Intl']]], + ['funcmemberdata_3',['funcmemberdata',['../struct_s_a_1_1_intl_1_1_func_member_data.html',1,'SA::Intl::FuncMemberData< C, R, Args >'],['../struct_s_a_1_1_intl_1_1_func_member_data.html#a03cfbd224bed5b40b97a1e4b3a32980c',1,'SA::Intl::FuncMemberData::FuncMemberData()']]], + ['funcmemberdatabase_4',['FuncMemberDataBase',['../struct_s_a_1_1_intl_1_1_func_member_data_base.html',1,'SA::Intl']]], + ['funcmemberhandle_5',['FuncMemberHandle',['../struct_s_a_1_1_intl_1_1_func_member_handle.html',1,'SA::Intl']]], + ['funcmemberhandle_3c_20void_2c_20args_2e_2e_2e_20_3e_6',['FuncMemberHandle< void, Args... >',['../struct_s_a_1_1_intl_1_1_func_member_handle_3_01void_00_01_args_8_8_8_01_4.html',1,'SA::Intl']]], + ['function_7',['function',['../class_s_a_1_1_function.html',1,'SA::Function< R, Args >'],['../class_s_a_1_1_function.html#a8437e538f585594d57fe112160a4633e',1,'SA::Function::Function()=default'],['../class_s_a_1_1_function.html#a468e88d7ecf3da58a99220a651f72823',1,'SA::Function::Function(R(*_func)(Args...)) noexcept'],['../class_s_a_1_1_function.html#a8cc4af336b19dd83da2dd4c1f8a937fb',1,'SA::Function::Function(C *_caller, R(C::*_func)(Args...))'],['../class_s_a_1_1_function.html#a5f147689421a62f3c69f902a2b01dbf1',1,'SA::Function::Function(Function &&_other) noexcept'],['../class_s_a_1_1_function.html#a1a0487f9f630867142ded88112f89863',1,'SA::Function::Function(const Function &_other) noexcept']]], + ['function_2ehpp_8',['Function.hpp',['../_function_8hpp.html',1,'']]], + ['function_3c_20r_2c_20args_2e_2e_2e_20_3e_9',['Function< R, Args... >',['../class_s_a_1_1_function.html',1,'SA']]], + ['functionmemberdata_2ehpp_10',['FunctionMemberData.hpp',['../_function_member_data_8hpp.html',1,'']]] +]; diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 0000000..11eca02 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['interfacecall_0',['InterfaceCall',['../struct_s_a_1_1_intl_1_1_func_member_data.html#adf2b1a2e5db8ce3e305e36d7d3b79be0',1,'SA::Intl::FuncMemberData']]], + ['isempty_1',['isempty',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a6df1a519fd264f0cf913f96fea65b083',1,'SA::Event< R(Args...)>::IsEmpty()'],['../class_s_a_1_1_function.html#ac009f6bfeaa0d093666bfafcf6aca4a4',1,'SA::Function::IsEmpty()']]] +]; diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 0000000..fab5ac6 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['mintlfunc_0',['mIntlFunc',['../class_s_a_1_1_function.html#a08207b8a94b56e42727deb3797bc0654',1,'SA::Function']]], + ['msfunc_1',['mSFunc',['../class_s_a_1_1_function.html#a1ef6921f09b9943aafa41328b26f638f',1,'SA::Function']]] +]; diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 0000000..385b4fa --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['operator_20bool_0',['operator bool',['../class_s_a_1_1_function.html#ab55a32e31cbdb13f47488b1efaa708d4',1,'SA::Function']]], + ['operator_21_3d_1',['operator!=',['../class_s_a_1_1_function.html#a8a4e259bf7934ecce2eb61e2d9f9980e',1,'SA::Function::operator!=()'],['../class_s_a_1_1_packed_function.html#a4355d7f4b567ff08d7e9544b19fec345',1,'SA::PackedFunction::operator!=()']]], + ['operator_28_29_2',['operator()',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a1e557cdfd86e4c49c6271d842bdc6a36',1,'SA::Event< R(Args...)>::operator()(const Args &... _args)'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a27f77ceb5024fa0b03a331a41122849e',1,'SA::Event< R(Args...)>::operator()(std::vector< R > &_results, const Args &... _args)'],['../class_s_a_1_1_function.html#a1e519c429caec75bdb235917cd0f7fae',1,'SA::Function::operator()()'],['../class_s_a_1_1_packed_function.html#afb330b79f95f332d508bb3679bc7bed9',1,'SA::PackedFunction::operator()()']]], + ['operator_2b_3d_3',['operator+=',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#aa109498170fe85efa22b86f2082146d7',1,'SA::Event< R(Args...)>']]], + ['operator_2d_3d_4',['operator-=',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#af2f2571bfa5e2f394c1c12047aa87181',1,'SA::Event< R(Args...)>']]], + ['operator_3d_5',['operator=',['../class_s_a_1_1_packed_function.html#ac588dff81945f3e01956c751bebe3057',1,'SA::PackedFunction::operator=()'],['../class_s_a_1_1_function.html#ae820d039623d516bbd514a82a7405eea',1,'SA::Function::operator=(std::nullptr_t)'],['../class_s_a_1_1_function.html#ac688571c4c8af23101e79a6ed7eb6d47',1,'SA::Function::operator=(R(*_func)(Args...)) noexcept'],['../class_s_a_1_1_function.html#a74d66c221582feba9e86bd8dd52c15bf',1,'SA::Function::operator=(const Function &_rhs) noexcept'],['../class_s_a_1_1_function.html#af237fd7ec965f9ef5cb1b35153873fe1',1,'SA::Function::operator=(Function &&_rhs) noexcept'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#ab7f2eff6dccc790fa035febb3d73d072',1,'SA::Event< R(Args...)>::operator=(const Event &)=delete'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a9d0531299a5b97af77ad58555a1f53ce',1,'SA::Event< R(Args...)>::operator=(Event &&_other)'],['../class_s_a_1_1_packed_function.html#afe435f7877ced079c4ffbf95d49101d9',1,'SA::PackedFunction::operator=()']]], + ['operator_3d_3d_6',['operator==',['../class_s_a_1_1_function.html#a98b9b8c0c06b236eb38b1b871bcfa3d0',1,'SA::Function::operator==()'],['../class_s_a_1_1_packed_function.html#a088d7668c3197459139c454044596715',1,'SA::PackedFunction::operator==()']]], + ['ownedevent_7',['OwnedEvent',['../class_s_a_1_1_owned_event.html',1,'SA']]], + ['ownedevent_2ehpp_8',['OwnedEvent.hpp',['../_owned_event_8hpp.html',1,'']]], + ['ownedevent_3c_20ownert_2c_20r_28args_2e_2e_2e_29_3e_9',['OwnedEvent< OwnerT, R(Args...)>',['../class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4.html',1,'SA']]] +]; diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 0000000..1222436 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['packedfunction_0',['packedfunction',['../class_s_a_1_1_packed_function.html',1,'SA::PackedFunction< R, Args >'],['../class_s_a_1_1_packed_function.html#a96ae85902eff2684b411fc400d52aba7',1,'SA::PackedFunction::PackedFunction()=default'],['../class_s_a_1_1_packed_function.html#abc7460ae060983c5f635b43471813e04',1,'SA::PackedFunction::PackedFunction(R(*_func)(Args...), Args... _args) noexcept'],['../class_s_a_1_1_packed_function.html#aea1799e9f445da2cc363823682616f44',1,'SA::PackedFunction::PackedFunction(C *_caller, R(C::*_func)(Args...), Args... _args)'],['../class_s_a_1_1_packed_function.html#aed1f4ef223b88c82b350edc17dc3e34a',1,'SA::PackedFunction::PackedFunction(PackedFunction &&_other) noexcept'],['../class_s_a_1_1_packed_function.html#ae51c3243bdec4eeb136956a999d478d5',1,'SA::PackedFunction::PackedFunction(const PackedFunction &_other) noexcept']]], + ['packedfunction_2ehpp_1',['PackedFunction.hpp',['../_packed_function_8hpp.html',1,'']]] +]; diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 0000000..a37b22b --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['remove_0',['remove',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a52cf4168537165e95b0ce84cb4356e0c',1,'SA::Event< R(Args...)>::Remove(R(*_func)(Args...))'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#ace3290346617e28b91535a6dcb209551',1,'SA::Event< R(Args...)>::Remove(const C *_caller, R(C::*_func)(Args...))']]], + ['result_1',['result',['../struct_s_a_1_1_intl_1_1_func_handle.html#a650b306ff960d341eed419e14cdd9bd2',1,'SA::Intl::FuncHandle::result'],['../struct_s_a_1_1_intl_1_1_func_member_handle.html#a26cfb569f626a0aabfd1e597b40d774a',1,'SA::Intl::FuncMemberHandle::result']]], + ['rremove_2',['rremove',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a52f390678ef4c07244dfa3cda6cc8011',1,'SA::Event< R(Args...)>::RRemove(R(*_func)(Args...))'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a67e889b2faae4854525800d0f2a39cfa',1,'SA::Event< R(Args...)>::RRemove(const C *_caller, R(C::*_func)(Args...))']]] +]; diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 0000000..abc72c7 --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['set_0',['set',['../class_s_a_1_1_function.html#a01f4d5f15a1e12f430d72b22d485a347',1,'SA::Function::Set(R(*_func)(Args...))'],['../class_s_a_1_1_function.html#abdeaa4aa9077012694360a432db32db3',1,'SA::Function::Set(C *_caller, R(C::*_func)(Args...))'],['../class_s_a_1_1_packed_function.html#ad70444c9566c9be292d5f0e12b963a67',1,'SA::PackedFunction::Set(R(*_func)(Args...), Args... _args)'],['../class_s_a_1_1_packed_function.html#a883261f0eb5df31819dcaebbfded0999',1,'SA::PackedFunction::Set(C *_caller, R(C::*_func)(Args...), Args... _args)']]] +]; diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 0000000..7eab1c9 --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['_7eevent_0',['~Event',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a7fc72b00bee3f9ddc0616369f655ebbd',1,'SA::Event< R(Args...)>']]], + ['_7efuncmemberdatabase_1',['~FuncMemberDataBase',['../struct_s_a_1_1_intl_1_1_func_member_data_base.html#ac9e7ac33d3f77ac308fc14a6a7a1a56f',1,'SA::Intl::FuncMemberDataBase']]], + ['_7efunction_2',['~Function',['../class_s_a_1_1_function.html#a4d7b4ddb4685a4f538ecdb2a08e07bed',1,'SA::Function']]] +]; diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 0000000..c0e2278 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['event_0',['Event',['../class_s_a_1_1_event.html',1,'SA']]], + ['event_3c_20r_28args_2e_2e_2e_29_3e_1',['Event< R(Args...)>',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html',1,'SA']]] +]; diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 0000000..d076727 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['funchandle_0',['FuncHandle',['../struct_s_a_1_1_intl_1_1_func_handle.html',1,'SA::Intl']]], + ['funchandle_3c_20void_2c_20args_2e_2e_2e_20_3e_1',['FuncHandle< void, Args... >',['../struct_s_a_1_1_intl_1_1_func_handle_3_01void_00_01_args_8_8_8_01_4.html',1,'SA::Intl']]], + ['funcmemberdata_2',['FuncMemberData',['../struct_s_a_1_1_intl_1_1_func_member_data.html',1,'SA::Intl']]], + ['funcmemberdatabase_3',['FuncMemberDataBase',['../struct_s_a_1_1_intl_1_1_func_member_data_base.html',1,'SA::Intl']]], + ['funcmemberhandle_4',['FuncMemberHandle',['../struct_s_a_1_1_intl_1_1_func_member_handle.html',1,'SA::Intl']]], + ['funcmemberhandle_3c_20void_2c_20args_2e_2e_2e_20_3e_5',['FuncMemberHandle< void, Args... >',['../struct_s_a_1_1_intl_1_1_func_member_handle_3_01void_00_01_args_8_8_8_01_4.html',1,'SA::Intl']]], + ['function_6',['Function',['../class_s_a_1_1_function.html',1,'SA']]], + ['function_3c_20r_2c_20args_2e_2e_2e_20_3e_7',['Function< R, Args... >',['../class_s_a_1_1_function.html',1,'SA']]] +]; diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 0000000..5f5a4ee --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ownedevent_0',['OwnedEvent',['../class_s_a_1_1_owned_event.html',1,'SA']]], + ['ownedevent_3c_20ownert_2c_20r_28args_2e_2e_2e_29_3e_1',['OwnedEvent< OwnerT, R(Args...)>',['../class_s_a_1_1_owned_event_3_01_owner_t_00_01_r_07_args_8_8_8_08_4.html',1,'SA']]] +]; diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 0000000..5b3844e --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['packedfunction_0',['PackedFunction',['../class_s_a_1_1_packed_function.html',1,'SA']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 0000000..4b79db0 --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['config_2ehpp_0',['Config.hpp',['../_config_8hpp.html',1,'']]] +]; diff --git a/search/files_1.js b/search/files_1.js new file mode 100644 index 0000000..d539ba7 --- /dev/null +++ b/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['debug_2ehpp_0',['Debug.hpp',['../_debug_8hpp.html',1,'']]] +]; diff --git a/search/files_2.js b/search/files_2.js new file mode 100644 index 0000000..2e0bb20 --- /dev/null +++ b/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['event_2ehpp_0',['Event.hpp',['../_event_8hpp.html',1,'']]] +]; diff --git a/search/files_3.js b/search/files_3.js new file mode 100644 index 0000000..93a5826 --- /dev/null +++ b/search/files_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['function_2ehpp_0',['Function.hpp',['../_function_8hpp.html',1,'']]], + ['functionmemberdata_2ehpp_1',['FunctionMemberData.hpp',['../_function_member_data_8hpp.html',1,'']]] +]; diff --git a/search/files_4.js b/search/files_4.js new file mode 100644 index 0000000..4589f89 --- /dev/null +++ b/search/files_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ownedevent_2ehpp_0',['OwnedEvent.hpp',['../_owned_event_8hpp.html',1,'']]] +]; diff --git a/search/files_5.js b/search/files_5.js new file mode 100644 index 0000000..1dbb6f5 --- /dev/null +++ b/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['packedfunction_2ehpp_0',['PackedFunction.hpp',['../_packed_function_8hpp.html',1,'']]] +]; diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 0000000..5bb41a9 --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['add_0',['add',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a8ecaaaf40d1090b12145806de460eb56',1,'SA::Event< R(Args...)>::Add(R(*_func)(Args...), R *_result=nullptr)'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a1036e97e983cdbfdde12511af4098eba',1,'SA::Event< R(Args...)>::Add(C *_caller, R(C::*_func)(Args...), R *_result=nullptr)']]] +]; diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 0000000..6541ae3 --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['clear_0',['clear',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a0c7378c8b3ccf57bd04ee06fd296a5a5',1,'SA::Event< R(Args...)>::Clear()'],['../class_s_a_1_1_function.html#aa5b5ac63f5eab84d66b527ea279ec121',1,'SA::Function::Clear()']]], + ['compare_1',['compare',['../struct_s_a_1_1_intl_1_1_func_member_data_base.html#ac286e2f5059894b06fc0823dc5f54f39',1,'SA::Intl::FuncMemberDataBase::Compare()'],['../struct_s_a_1_1_intl_1_1_func_member_data.html#aba950fb6ac5de391a5d6693019bfdb9b',1,'SA::Intl::FuncMemberData::Compare()']]] +]; diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 0000000..fe08b83 --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['duplicate_0',['duplicate',['../struct_s_a_1_1_intl_1_1_func_member_data_base.html#ac564e1bcbe76fe22373588d28cc7c5e6',1,'SA::Intl::FuncMemberDataBase::Duplicate()'],['../struct_s_a_1_1_intl_1_1_func_member_data.html#ac5ed1b532100cea57ce9d95c869f5598',1,'SA::Intl::FuncMemberData::Duplicate()']]] +]; diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 0000000..fabc999 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['equals_0',['equals',['../class_s_a_1_1_function.html#a1096725c0c2e8369fda1545fabd62d13',1,'SA::Function::Equals()'],['../class_s_a_1_1_packed_function.html#aef5f1c2e45386e36175046db1e450afd',1,'SA::PackedFunction::Equals()']]], + ['event_1',['event',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#af1476436423999c249b0761c6328309b',1,'SA::Event< R(Args...)>::Event()=default'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a73fc357a26a3c5c277630eb525f9d423',1,'SA::Event< R(Args...)>::Event(Event &&_other)=default'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a5bc57db125df8a80825bd4b89308a401',1,'SA::Event< R(Args...)>::Event(const Event &)=delete']]], + ['execute_2',['execute',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a5954a03a5d03976c9ebe4d9c410386e4',1,'SA::Event< R(Args...)>::Execute(const Args &... _args)'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a7ad5297720f7a90615d52b92f379bc3d',1,'SA::Event< R(Args...)>::Execute(std::vector< R > &_results, const Args &... _args)'],['../class_s_a_1_1_function.html#a01bdd1f46db315a694c4a6e3a026e334',1,'SA::Function::Execute()'],['../class_s_a_1_1_packed_function.html#a35e10ce391763630ba36156d11ceb890',1,'SA::PackedFunction::Execute()']]] +]; diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 0000000..bb5007b --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['funcmemberdata_0',['FuncMemberData',['../struct_s_a_1_1_intl_1_1_func_member_data.html#a03cfbd224bed5b40b97a1e4b3a32980c',1,'SA::Intl::FuncMemberData']]], + ['function_1',['function',['../class_s_a_1_1_function.html#a8437e538f585594d57fe112160a4633e',1,'SA::Function::Function()=default'],['../class_s_a_1_1_function.html#a468e88d7ecf3da58a99220a651f72823',1,'SA::Function::Function(R(*_func)(Args...)) noexcept'],['../class_s_a_1_1_function.html#a8cc4af336b19dd83da2dd4c1f8a937fb',1,'SA::Function::Function(C *_caller, R(C::*_func)(Args...))'],['../class_s_a_1_1_function.html#a5f147689421a62f3c69f902a2b01dbf1',1,'SA::Function::Function(Function &&_other) noexcept'],['../class_s_a_1_1_function.html#a1a0487f9f630867142ded88112f89863',1,'SA::Function::Function(const Function &_other) noexcept']]] +]; diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 0000000..11eca02 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['interfacecall_0',['InterfaceCall',['../struct_s_a_1_1_intl_1_1_func_member_data.html#adf2b1a2e5db8ce3e305e36d7d3b79be0',1,'SA::Intl::FuncMemberData']]], + ['isempty_1',['isempty',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a6df1a519fd264f0cf913f96fea65b083',1,'SA::Event< R(Args...)>::IsEmpty()'],['../class_s_a_1_1_function.html#ac009f6bfeaa0d093666bfafcf6aca4a4',1,'SA::Function::IsEmpty()']]] +]; diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 0000000..1cf42fa --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['operator_20bool_0',['operator bool',['../class_s_a_1_1_function.html#ab55a32e31cbdb13f47488b1efaa708d4',1,'SA::Function']]], + ['operator_21_3d_1',['operator!=',['../class_s_a_1_1_function.html#a8a4e259bf7934ecce2eb61e2d9f9980e',1,'SA::Function::operator!=()'],['../class_s_a_1_1_packed_function.html#a4355d7f4b567ff08d7e9544b19fec345',1,'SA::PackedFunction::operator!=()']]], + ['operator_28_29_2',['operator()',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a1e557cdfd86e4c49c6271d842bdc6a36',1,'SA::Event< R(Args...)>::operator()(const Args &... _args)'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a27f77ceb5024fa0b03a331a41122849e',1,'SA::Event< R(Args...)>::operator()(std::vector< R > &_results, const Args &... _args)'],['../class_s_a_1_1_function.html#a1e519c429caec75bdb235917cd0f7fae',1,'SA::Function::operator()()'],['../class_s_a_1_1_packed_function.html#afb330b79f95f332d508bb3679bc7bed9',1,'SA::PackedFunction::operator()()']]], + ['operator_2b_3d_3',['operator+=',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#aa109498170fe85efa22b86f2082146d7',1,'SA::Event< R(Args...)>']]], + ['operator_2d_3d_4',['operator-=',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#af2f2571bfa5e2f394c1c12047aa87181',1,'SA::Event< R(Args...)>']]], + ['operator_3d_5',['operator=',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a9d0531299a5b97af77ad58555a1f53ce',1,'SA::Event< R(Args...)>::operator=()'],['../class_s_a_1_1_packed_function.html#afe435f7877ced079c4ffbf95d49101d9',1,'SA::PackedFunction::operator=(const PackedFunction &_rhs) noexcept'],['../class_s_a_1_1_packed_function.html#ac588dff81945f3e01956c751bebe3057',1,'SA::PackedFunction::operator=(PackedFunction &&_rhs) noexcept'],['../class_s_a_1_1_function.html#ae820d039623d516bbd514a82a7405eea',1,'SA::Function::operator=(std::nullptr_t)'],['../class_s_a_1_1_function.html#ac688571c4c8af23101e79a6ed7eb6d47',1,'SA::Function::operator=(R(*_func)(Args...)) noexcept'],['../class_s_a_1_1_function.html#a74d66c221582feba9e86bd8dd52c15bf',1,'SA::Function::operator=(const Function &_rhs) noexcept'],['../class_s_a_1_1_function.html#af237fd7ec965f9ef5cb1b35153873fe1',1,'SA::Function::operator=(Function &&_rhs) noexcept'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#ab7f2eff6dccc790fa035febb3d73d072',1,'SA::Event< R(Args...)>::operator=()']]], + ['operator_3d_3d_6',['operator==',['../class_s_a_1_1_function.html#a98b9b8c0c06b236eb38b1b871bcfa3d0',1,'SA::Function::operator==()'],['../class_s_a_1_1_packed_function.html#a088d7668c3197459139c454044596715',1,'SA::PackedFunction::operator==()']]] +]; diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 0000000..9e99fa7 --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['packedfunction_0',['packedfunction',['../class_s_a_1_1_packed_function.html#a96ae85902eff2684b411fc400d52aba7',1,'SA::PackedFunction::PackedFunction()=default'],['../class_s_a_1_1_packed_function.html#abc7460ae060983c5f635b43471813e04',1,'SA::PackedFunction::PackedFunction(R(*_func)(Args...), Args... _args) noexcept'],['../class_s_a_1_1_packed_function.html#aea1799e9f445da2cc363823682616f44',1,'SA::PackedFunction::PackedFunction(C *_caller, R(C::*_func)(Args...), Args... _args)'],['../class_s_a_1_1_packed_function.html#aed1f4ef223b88c82b350edc17dc3e34a',1,'SA::PackedFunction::PackedFunction(PackedFunction &&_other) noexcept'],['../class_s_a_1_1_packed_function.html#ae51c3243bdec4eeb136956a999d478d5',1,'SA::PackedFunction::PackedFunction(const PackedFunction &_other) noexcept']]] +]; diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 0000000..a7b2e25 --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['remove_0',['remove',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a52cf4168537165e95b0ce84cb4356e0c',1,'SA::Event< R(Args...)>::Remove(R(*_func)(Args...))'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#ace3290346617e28b91535a6dcb209551',1,'SA::Event< R(Args...)>::Remove(const C *_caller, R(C::*_func)(Args...))']]], + ['rremove_1',['rremove',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a52f390678ef4c07244dfa3cda6cc8011',1,'SA::Event< R(Args...)>::RRemove(R(*_func)(Args...))'],['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a67e889b2faae4854525800d0f2a39cfa',1,'SA::Event< R(Args...)>::RRemove(const C *_caller, R(C::*_func)(Args...))']]] +]; diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 0000000..abc72c7 --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['set_0',['set',['../class_s_a_1_1_function.html#a01f4d5f15a1e12f430d72b22d485a347',1,'SA::Function::Set(R(*_func)(Args...))'],['../class_s_a_1_1_function.html#abdeaa4aa9077012694360a432db32db3',1,'SA::Function::Set(C *_caller, R(C::*_func)(Args...))'],['../class_s_a_1_1_packed_function.html#ad70444c9566c9be292d5f0e12b963a67',1,'SA::PackedFunction::Set(R(*_func)(Args...), Args... _args)'],['../class_s_a_1_1_packed_function.html#a883261f0eb5df31819dcaebbfded0999',1,'SA::PackedFunction::Set(C *_caller, R(C::*_func)(Args...), Args... _args)']]] +]; diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 0000000..7eab1c9 --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['_7eevent_0',['~Event',['../class_s_a_1_1_event_3_01_r_07_args_8_8_8_08_4.html#a7fc72b00bee3f9ddc0616369f655ebbd',1,'SA::Event< R(Args...)>']]], + ['_7efuncmemberdatabase_1',['~FuncMemberDataBase',['../struct_s_a_1_1_intl_1_1_func_member_data_base.html#ac9e7ac33d3f77ac308fc14a6a7a1a56f',1,'SA::Intl::FuncMemberDataBase']]], + ['_7efunction_2',['~Function',['../class_s_a_1_1_function.html#a4d7b4ddb4685a4f538ecdb2a08e07bed',1,'SA::Function']]] +]; diff --git a/search/groups_0.js b/search/groups_0.js new file mode 100644 index 0000000..81d5c49 --- /dev/null +++ b/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['event_0',['Event',['../group___event.html',1,'']]] +]; diff --git a/search/mag.svg b/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_d.svg b/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/mag_seld.svg b/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..19f76f9 --- /dev/null +++ b/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000..6fd40c6 --- /dev/null +++ b/search/search.js @@ -0,0 +1,840 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e + + + + + + +SA_Event: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    SA::Intl::FuncHandle< R, Args > Member List
    +
    +
    + +

    This is the complete list of members for SA::Intl::FuncHandle< R, Args >, including all inherited members.

    + + + +
    funcSA::Intl::FuncHandle< R, Args >
    resultSA::Intl::FuncHandle< R, Args >
    + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_handle.html b/struct_s_a_1_1_intl_1_1_func_handle.html new file mode 100644 index 0000000..15dfd25 --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_handle.html @@ -0,0 +1,119 @@ + + + + + + + +SA_Event: SA::Intl::FuncHandle< R, Args > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    SA::Intl::FuncHandle< R, Args > Struct Template Reference
    +
    +
    + +

    Handle struct for a function. + More...

    + +

    #include <Event.hpp>

    + + + + + + + + +

    +Public Attributes

    +R(* func )(Args...) = nullptr
     Function ptr handle.
     
    +R * result = nullptr
     result ptr handle.
     
    +

    Detailed Description

    +
    template<typename R, typename... Args>
    +struct SA::Intl::FuncHandle< R, Args >

    Handle struct for a function.

    +
    Template Parameters
    + + + +
    RReturn type of function's declaration.
    ArgsArgument types of function's declaration.
    +
    +
    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_handle_3_01void_00_01_args_8_8_8_01_4-members.html b/struct_s_a_1_1_intl_1_1_func_handle_3_01void_00_01_args_8_8_8_01_4-members.html new file mode 100644 index 0000000..23bed8a --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_handle_3_01void_00_01_args_8_8_8_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +SA_Event: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    SA::Intl::FuncHandle< void, Args... > Member List
    +
    +
    + +

    This is the complete list of members for SA::Intl::FuncHandle< void, Args... >, including all inherited members.

    + + +
    funcSA::Intl::FuncHandle< void, Args... >
    + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_handle_3_01void_00_01_args_8_8_8_01_4.html b/struct_s_a_1_1_intl_1_1_func_handle_3_01void_00_01_args_8_8_8_01_4.html new file mode 100644 index 0000000..5bceb3e --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_handle_3_01void_00_01_args_8_8_8_01_4.html @@ -0,0 +1,115 @@ + + + + + + + +SA_Event: SA::Intl::FuncHandle< void, Args... > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    SA::Intl::FuncHandle< void, Args... > Struct Template Reference
    +
    +
    + +

    Handle struct for a function with void return type. + More...

    + +

    #include <Event.hpp>

    + + + + + +

    +Public Attributes

    +void(* func )(Args...) = nullptr
     Function ptr handle.
     
    +

    Detailed Description

    +
    template<typename... Args>
    +struct SA::Intl::FuncHandle< void, Args... >

    Handle struct for a function with void return type.

    +

    Template specialization of FuncHandle for function with void return type.

    +
    Template Parameters
    + + +
    ArgsArgument types of function's declaration.
    +
    +
    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_member_data-members.html b/struct_s_a_1_1_intl_1_1_func_member_data-members.html new file mode 100644 index 0000000..cb28914 --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_member_data-members.html @@ -0,0 +1,96 @@ + + + + + + + +SA_Event: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    SA::Intl::FuncMemberData< C, R, Args > Member List
    +
    +
    + +

    This is the complete list of members for SA::Intl::FuncMemberData< C, R, Args >, including all inherited members.

    + + + + + + + + +
    callerSA::Intl::FuncMemberData< C, R, Args >
    Compare(const FuncMemberDataBase *_other) const override finalSA::Intl::FuncMemberData< C, R, Args >virtual
    Duplicate() const override finalSA::Intl::FuncMemberData< C, R, Args >virtual
    funcSA::Intl::FuncMemberData< C, R, Args >
    FuncMemberData(C *_caller, R(C::*_func)(Args...))SA::Intl::FuncMemberData< C, R, Args >
    InterfaceCall(void *_data, Args... _args)SA::Intl::FuncMemberData< C, R, Args >static
    ~FuncMemberDataBase()=defaultSA::Intl::FuncMemberDataBasevirtual
    + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_member_data.html b/struct_s_a_1_1_intl_1_1_func_member_data.html new file mode 100644 index 0000000..75e3767 --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_member_data.html @@ -0,0 +1,314 @@ + + + + + + + +SA_Event: SA::Intl::FuncMemberData< C, R, Args > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    SA::Intl::FuncMemberData< C, R, Args > Struct Template Reference
    +
    +
    + +

    Data struct for typed member function. + More...

    + +

    #include <FunctionMemberData.hpp>

    +
    +Inheritance diagram for SA::Intl::FuncMemberData< C, R, Args >:
    +
    +
    + + +SA::Intl::FuncMemberDataBase + +
    + + + + + + + + + + + + + + + +

    +Public Member Functions

     FuncMemberData (C *_caller, R(C::*_func)(Args...))
     Default value constructor.
     
    FuncMemberDataBaseDuplicate () const override final
     Duplicate child data (used for copy operations).
     
    bool Compare (const FuncMemberDataBase *_other) const override final
     Compare child data class
     
    - Public Member Functions inherited from SA::Intl::FuncMemberDataBase
    +virtual ~FuncMemberDataBase ()=default
     default virtual destructor. Ensure correct child class destruction on delete.
     
    + + + + +

    +Static Public Member Functions

    static R InterfaceCall (void *_data, Args... _args)
     Interface methods requiered for function handle. Ensure correct child type call.
     
    + + + + + + + +

    +Public Attributes

    +C * caller = nullptr
     Caller ptr handle.
     
    +R(C::* func )(Args...) = nullptr
     Function ptr handle.
     
    +

    Detailed Description

    +
    template<typename C, typename R, typename... Args>
    +struct SA::Intl::FuncMemberData< C, R, Args >

    Data struct for typed member function.

    +
    Template Parameters
    + + + + +
    CCaller type of function's declaration.
    RReturn type of function's declaration.
    ArgsArgument types of function's declaration.
    +
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ FuncMemberData()

    + +
    +
    +
    +template<typename C , typename R , typename... Args>
    + + + + + + + + + + + + + + + + + + +
    SA::Intl::FuncMemberData< C, R, Args >::FuncMemberData (C * _caller,
    R(C::*)(Args...) _func 
    )
    +
    + +

    Default value constructor.

    +
    Parameters
    + + + +
    [in]_callerCaller of the member function.
    [in]_funcMember function to call.
    +
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ Compare()

    + +
    +
    +
    +template<typename C , typename R , typename... Args>
    + + + + + +
    + + + + + + + + +
    bool SA::Intl::FuncMemberData< C, R, Args >::Compare (const FuncMemberDataBase_other) const
    +
    +finaloverridevirtual
    +
    + +

    Compare child data class

    +
    Parameters
    + + +
    [in]_othermember to compare to.
    +
    +
    +
    Returns
    true on equality.
    + +

    Implements SA::Intl::FuncMemberDataBase.

    + +
    +
    + +

    ◆ Duplicate()

    + +
    +
    +
    +template<typename C , typename R , typename... Args>
    + + + + + +
    + + + + + + + +
    FuncMemberDataBase * SA::Intl::FuncMemberData< C, R, Args >::Duplicate () const
    +
    +finaloverridevirtual
    +
    + +

    Duplicate child data (used for copy operations).

    +
    Returns
    new data duplicated.
    + +

    Implements SA::Intl::FuncMemberDataBase.

    + +
    +
    + +

    ◆ InterfaceCall()

    + +
    +
    +
    +template<typename C , typename R , typename... Args>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static R SA::Intl::FuncMemberData< C, R, Args >::InterfaceCall (void * _data,
    Args... _args 
    )
    +
    +static
    +
    + +

    Interface methods requiered for function handle. Ensure correct child type call.

    +
    Parameters
    + + + +
    [in]_dataStored typed FuncMemberData.
    [in]_argsFunction arguments.
    +
    +
    +
    Returns
    function return value.
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_member_data.png b/struct_s_a_1_1_intl_1_1_func_member_data.png new file mode 100644 index 0000000..fd2798f Binary files /dev/null and b/struct_s_a_1_1_intl_1_1_func_member_data.png differ diff --git a/struct_s_a_1_1_intl_1_1_func_member_data_base-members.html b/struct_s_a_1_1_intl_1_1_func_member_data_base-members.html new file mode 100644 index 0000000..9807386 --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_member_data_base-members.html @@ -0,0 +1,92 @@ + + + + + + + +SA_Event: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    SA::Intl::FuncMemberDataBase Member List
    +
    +
    + +

    This is the complete list of members for SA::Intl::FuncMemberDataBase, including all inherited members.

    + + + + +
    Compare(const FuncMemberDataBase *_other) const =0SA::Intl::FuncMemberDataBasepure virtual
    Duplicate() const =0SA::Intl::FuncMemberDataBasepure virtual
    ~FuncMemberDataBase()=defaultSA::Intl::FuncMemberDataBasevirtual
    + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_member_data_base.html b/struct_s_a_1_1_intl_1_1_func_member_data_base.html new file mode 100644 index 0000000..def6c0b --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_member_data_base.html @@ -0,0 +1,191 @@ + + + + + + + +SA_Event: SA::Intl::FuncMemberDataBase Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    SA::Intl::FuncMemberDataBase Struct Referenceabstract
    +
    +
    + +

    Base struct of member function data. + More...

    + +

    #include <FunctionMemberData.hpp>

    +
    +Inheritance diagram for SA::Intl::FuncMemberDataBase:
    +
    +
    + + +SA::Intl::FuncMemberData< C, R, Args > + +
    + + + + + + + + + + + +

    +Public Member Functions

    +virtual ~FuncMemberDataBase ()=default
     default virtual destructor. Ensure correct child class destruction on delete.
     
    virtual FuncMemberDataBaseDuplicate () const =0
     Duplicate child data (used for copy operations).
     
    virtual bool Compare (const FuncMemberDataBase *_other) const =0
     Compare child data class
     
    +

    Detailed Description

    +

    Base struct of member function data.

    +

    Interface class with virtual destructor to store template child class.

    +

    Member Function Documentation

    + +

    ◆ Compare()

    + +
    +
    + + + + + +
    + + + + + + + + +
    virtual bool SA::Intl::FuncMemberDataBase::Compare (const FuncMemberDataBase_other) const
    +
    +pure virtual
    +
    + +

    Compare child data class

    +
    Parameters
    + + +
    [in]_othermember to compare to.
    +
    +
    +
    Returns
    true on equality.
    + +

    Implemented in SA::Intl::FuncMemberData< C, R, Args >.

    + +
    +
    + +

    ◆ Duplicate()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual FuncMemberDataBase * SA::Intl::FuncMemberDataBase::Duplicate () const
    +
    +pure virtual
    +
    + +

    Duplicate child data (used for copy operations).

    +
    Returns
    new data duplicated.
    + +

    Implemented in SA::Intl::FuncMemberData< C, R, Args >.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_member_data_base.png b/struct_s_a_1_1_intl_1_1_func_member_data_base.png new file mode 100644 index 0000000..1bfe3e8 Binary files /dev/null and b/struct_s_a_1_1_intl_1_1_func_member_data_base.png differ diff --git a/struct_s_a_1_1_intl_1_1_func_member_handle-members.html b/struct_s_a_1_1_intl_1_1_func_member_handle-members.html new file mode 100644 index 0000000..b66f2e4 --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_member_handle-members.html @@ -0,0 +1,92 @@ + + + + + + + +SA_Event: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    SA::Intl::FuncMemberHandle< R, Args > Member List
    +
    + + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_member_handle.html b/struct_s_a_1_1_intl_1_1_func_member_handle.html new file mode 100644 index 0000000..a9a654d --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_member_handle.html @@ -0,0 +1,123 @@ + + + + + + + +SA_Event: SA::Intl::FuncMemberHandle< R, Args > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    SA::Intl::FuncMemberHandle< R, Args > Struct Template Reference
    +
    +
    + +

    Handle struct for a member function. + More...

    + +

    #include <Event.hpp>

    + + + + + + + + + + + +

    +Public Attributes

    +FuncMemberDataBasedata = nullptr
     Abstract member data (used by function interface).
     
    +R(* func )(void *, Args...) = nullptr
     Interface function ptr handle.
     
    +R * result = nullptr
     result ptr handle.
     
    +

    Detailed Description

    +
    template<typename R, typename... Args>
    +struct SA::Intl::FuncMemberHandle< R, Args >

    Handle struct for a member function.

    +
    Template Parameters
    + + + +
    RReturn type of function's declaration.
    ArgsArgument types of function's declaration.
    +
    +
    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_member_handle_3_01void_00_01_args_8_8_8_01_4-members.html b/struct_s_a_1_1_intl_1_1_func_member_handle_3_01void_00_01_args_8_8_8_01_4-members.html new file mode 100644 index 0000000..2225096 --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_member_handle_3_01void_00_01_args_8_8_8_01_4-members.html @@ -0,0 +1,91 @@ + + + + + + + +SA_Event: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    SA::Intl::FuncMemberHandle< void, Args... > Member List
    +
    + + + + + diff --git a/struct_s_a_1_1_intl_1_1_func_member_handle_3_01void_00_01_args_8_8_8_01_4.html b/struct_s_a_1_1_intl_1_1_func_member_handle_3_01void_00_01_args_8_8_8_01_4.html new file mode 100644 index 0000000..c1c0da2 --- /dev/null +++ b/struct_s_a_1_1_intl_1_1_func_member_handle_3_01void_00_01_args_8_8_8_01_4.html @@ -0,0 +1,119 @@ + + + + + + + +SA_Event: SA::Intl::FuncMemberHandle< void, Args... > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    SA::Intl::FuncMemberHandle< void, Args... > Struct Template Reference
    +
    +
    + +

    Handle struct for a member function with void return type. + More...

    + +

    #include <Event.hpp>

    + + + + + + + + +

    +Public Attributes

    +FuncMemberDataBasedata = nullptr
     Abstract member data (used by function interface).
     
    +void(* func )(void *, Args...) = nullptr
     Interface function ptr handle.
     
    +

    Detailed Description

    +
    template<typename... Args>
    +struct SA::Intl::FuncMemberHandle< void, Args... >

    Handle struct for a member function with void return type.

    +

    Template specialization of FuncMemberHandle for member function with void return type.

    +
    Template Parameters
    + + +
    ArgsArgument types of function's declaration.
    +
    +
    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/sync_off.png differ diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/sync_on.png differ diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/tab_a.png differ diff --git a/tab_ad.png b/tab_ad.png new file mode 100644 index 0000000..e34850a Binary files /dev/null and b/tab_ad.png differ diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/tab_b.png differ diff --git a/tab_bd.png b/tab_bd.png new file mode 100644 index 0000000..91c2524 Binary files /dev/null and b/tab_bd.png differ diff --git a/tab_h.png b/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/tab_h.png differ diff --git a/tab_hd.png b/tab_hd.png new file mode 100644 index 0000000..2489273 Binary files /dev/null and b/tab_hd.png differ diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/tab_s.png differ diff --git a/tab_sd.png b/tab_sd.png new file mode 100644 index 0000000..757a565 Binary files /dev/null and b/tab_sd.png differ diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..71c8a47 --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/topics.html b/topics.html new file mode 100644 index 0000000..fe5d001 --- /dev/null +++ b/topics.html @@ -0,0 +1,87 @@ + + + + + + + +SA_Event: Topics + + + + + + + + + +
    +
    + + + + + + +
    +
    SA_Event +
    +
    Sapphire's Suite's C++ Event and Function library.
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Topics
    +
    +
    +
    Here is a list of all topics with brief descriptions:
    + + +
     Event
    +
    +
    + + + +