Skip to content

Commit eb2f5f8

Browse files
committed
Now compiles with msvc12. Removed those broken extra signal parameters from Fold and Iterate in the process.
1 parent 7992dc1 commit eb2f5f8

4 files changed

Lines changed: 33 additions & 106 deletions

File tree

include/react/Conversion.h

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,15 @@ template
1919
typename D,
2020
typename E,
2121
typename S,
22-
typename TFunc,
23-
typename ... TArgs
22+
typename TFunc
2423
>
2524
inline auto Fold(const S& initialValue, const REvents<D,E>& events,
26-
const TFunc& func, const RSignal<D,TArgs>& ... args)
25+
const TFunc& func)
2726
-> RSignal<D,S>
2827
{
2928
return RSignal<D,S>(
30-
std::make_shared<FoldNode<D,S,E,TArgs ...>>(
31-
initialValue, events.GetPtr(), args.GetPtr() ..., func, false));
29+
std::make_shared<FoldNode<D,S,E>>(
30+
initialValue, events.GetPtr(), func, false));
3231
}
3332

3433
////////////////////////////////////////////////////////////////////////////////////////
@@ -39,16 +38,15 @@ template
3938
typename D,
4039
typename E,
4140
typename S,
42-
typename TFunc,
43-
typename ... TArgs
41+
typename TFunc
4442
>
4543
inline auto Iterate(const S& initialValue, const REvents<D,E>& events,
46-
const TFunc& func, const RSignal<D,TArgs>& ... args)
44+
const TFunc& func)
4745
-> RSignal<D,S>
4846
{
4947
return RSignal<D,S>(
50-
std::make_shared<IterateNode<D,S,E,TArgs ...>>(
51-
initialValue, events.GetPtr(), args.GetPtr() ..., func, false));
48+
std::make_shared<IterateNode<D,S,E>>(
49+
initialValue, events.GetPtr(), func, false));
5250
}
5351

5452
////////////////////////////////////////////////////////////////////////////////////////

include/react/EventStream.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,18 +115,18 @@ template
115115
<
116116
typename D,
117117
typename TArg1,
118-
typename TArg2,
119118
typename ... TArgs
120119
>
121120
inline auto Merge(const REvents<D,TArg1>& arg1,
122-
const REvents<D,TArg2>& arg2,
123121
const REvents<D,TArgs>& ... args)
124122
-> REvents<D,TArg1>
125123
{
124+
static_assert(sizeof...(TArgs) > 0, "react::Merge requires at least 2 arguments.");
125+
126126
typedef TArg1 E;
127127
return REvents<D,E>(
128-
std::make_shared<EventMergeNode<D, E, TArg1, TArg2, TArgs ...>>(
129-
arg1.GetPtr(), arg2.GetPtr(), args.GetPtr() ..., false));
128+
std::make_shared<EventMergeNode<D, E, TArg1, TArgs ...>>(
129+
arg1.GetPtr(), args.GetPtr() ..., false));
130130
}
131131

132132
template

include/react/ReactiveDomain.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ template <typename D, typename TPolicy>
667667
int DomainBase<D,TPolicy>::defaultCommitFlags_(0);
668668

669669
#define REACTIVE_DOMAIN(domain, ...) \
670-
struct domain : public react::DomainBase<domain, react::DomainPolicy<__VA_ARGS__ >> {}; \
671-
domain ## ::Initializer_ domain ## _initializer_;
670+
struct domain : public DomainBase<domain, DomainPolicy<__VA_ARGS__ >> {}; \
671+
typename domain ## ::Initializer_ domain ## _initializer_;
672672

673673
} // ~namespace react

include/react/graph/ConversionNodes.h

Lines changed: 19 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,18 @@ template
1919
<
2020
typename D,
2121
typename S,
22-
typename E,
23-
typename ... TArgs
22+
typename E
2423
>
2524
class FoldBaseNode : public SignalNode<D,S>
2625
{
2726
public:
2827
FoldBaseNode(const S& initialValue, const EventStreamNodePtr<D,E>& events,
29-
const SignalNodePtr<D,TArgs>& ... args, bool registered) :
28+
bool registered) :
3029
SignalNode<D, S>(initialValue, true),
31-
deps_{ std::make_tuple(args ...) },
3230
events_{ events }
3331
{
3432
}
3533

36-
virtual const char* GetNodeType() const override { return "FoldBaseNode"; }
37-
3834
virtual ETickResult Tick(void* turnPtr) override
3935
{
4036
typedef typename D::Engine::TurnInterface TurnInterface;
@@ -44,7 +40,7 @@ class FoldBaseNode : public SignalNode<D,S>
4440
S newValue = calcNewValue();
4541
D::Log().template Append<NodeEvaluateEndEvent>(GetObjectId(*this), turn.Id(), std::this_thread::get_id().hash());
4642

47-
if (newValue != value_)
43+
if (impl::Equals(newValue, value_))
4844
{
4945
value_ = newValue;
5046
Engine::OnNodePulse(*this, turn);
@@ -57,24 +53,12 @@ class FoldBaseNode : public SignalNode<D,S>
5753
}
5854
}
5955

60-
virtual int DependencyCount() const override { return 1 + sizeof ... (TArgs); }
56+
virtual int DependencyCount() const override { return 1; }
6157

6258
protected:
63-
const EventStreamNodePtr<D,E> events_;
64-
const std::tuple<SignalNodePtr<D,TArgs> ...> deps_;
59+
const EventStreamNodePtr<D,E> events_;
6560

6661
virtual S calcNewValue() const = 0;
67-
68-
template <typename A>
69-
S evaluate(const A& a) const
70-
{
71-
return apply(a, apply(unpackValues, deps_));
72-
}
73-
74-
static inline auto unpackValues(const SignalNodePtr<D,TArgs>& ... args) -> std::tuple<TArgs ...>
75-
{
76-
return std::make_tuple(args->ValueRef() ...);
77-
}
7862
};
7963

8064
////////////////////////////////////////////////////////////////////////////////////////
@@ -84,65 +68,37 @@ template
8468
<
8569
typename D,
8670
typename S,
87-
typename E,
88-
typename ... TArgs
71+
typename E
8972
>
90-
class FoldNode : public FoldBaseNode<D,S,E,TArgs...>
73+
class FoldNode : public FoldBaseNode<D,S,E>
9174
{
9275
public:
9376
FoldNode(const S& initialValue, const EventStreamNodePtr<D,E>& events,
94-
const SignalNodePtr<D,TArgs>& ... args, std::function<S(S,E,TArgs ...)> func, bool registered) :
95-
FoldBaseNode<D, S, E, TArgs...>(initialValue, events, args ..., true),
77+
std::function<S(S,E)> func, bool registered) :
78+
FoldBaseNode<D,S,E>(initialValue, events, true),
9679
func_{ func }
9780
{
9881
if (!registered)
9982
registerNode();
10083

10184
Engine::OnNodeAttach(*this, *events);
102-
EXPAND_PACK(Engine::OnNodeAttach(*this, *args));
10385
}
10486

10587
~FoldNode()
10688
{
10789
Engine::OnNodeDetach(*this, *events_);
108-
109-
apply
110-
(
111-
[this] (const SignalNodePtr<D,TArgs>& ... args)
112-
{
113-
EXPAND_PACK(Engine::OnNodeDetach(*this, *args));
114-
},
115-
deps_
116-
);
11790
}
11891

11992
virtual const char* GetNodeType() const override { return "FoldNode"; }
12093

12194
protected:
122-
const std::function<S(S,E,TArgs ...)> func_;
123-
124-
struct ApplyHelper_
125-
{
126-
ApplyHelper_(const S& s, const E& e, const std::function<S(S,E,TArgs ...)> func) :
127-
s_{ s }, e_{ e }, func_{ func }
128-
{
129-
}
130-
131-
S operator() (TArgs ... args) const
132-
{
133-
return func_(s_, e_, args ...);
134-
}
135-
136-
const S& s_;
137-
const E& e_;
138-
const std::function<S(S,E,TArgs ...)> func_;
139-
};
95+
const std::function<S(S,E)> func_;
14096

14197
virtual S calcNewValue() const override
14298
{
14399
S newValue = value_;
144-
for (auto e : events_->REvents())
145-
newValue = evaluate(ApplyHelper_(newValue,e,func_));
100+
for (const auto& e : events_->REvents())
101+
newValue = func_(newValue,e);
146102
return newValue;
147103
}
148104
};
@@ -154,64 +110,37 @@ template
154110
<
155111
typename D,
156112
typename S,
157-
typename E,
158-
typename ... TArgs
113+
typename E
159114
>
160-
class IterateNode : public FoldBaseNode<D,S,E,TArgs...>
115+
class IterateNode : public FoldBaseNode<D,S,E>
161116
{
162117
public:
163118
IterateNode(const S& initialValue, const EventStreamNodePtr<D,E>& events,
164-
const SignalNodePtr<D,TArgs>& ... args, std::function<S(S,TArgs ...)> func, bool registered) :
165-
FoldBaseNode<D, S, E, TArgs...>(initialValue, events, args ..., true),
119+
std::function<S(S)> func, bool registered) :
120+
FoldBaseNode<D,S,E>(initialValue, events, true),
166121
func_{ func }
167122
{
168123
if (!registered)
169124
registerNode();
170125

171126
Engine::OnNodeAttach(*this, *events);
172-
EXPAND_PACK(Engine::OnNodeAttach(*this, *args));
173127
}
174128

175129
~IterateNode()
176130
{
177131
Engine::OnNodeDetach(*this, *events_);
178-
179-
apply
180-
(
181-
[this] (const SignalNodePtr<D,TArgs>& ... args)
182-
{
183-
EXPAND_PACK(Engine::OnNodeDetach(*this, *args));
184-
},
185-
deps_
186-
);
187132
}
188133

189134
virtual const char* GetNodeType() const override { return "IterateNode"; }
190135

191136
protected:
192-
const std::function<S(S,TArgs ...)> func_;
193-
194-
struct ApplyHelper_
195-
{
196-
ApplyHelper_(const S& s, const std::function<S(S,TArgs ...)> func) :
197-
s_{ s }, func_{ func }
198-
{
199-
}
200-
201-
S operator() (TArgs ... args) const
202-
{
203-
return func_(s_, args ...);
204-
}
205-
206-
const S& s_;
207-
const std::function<S(S,TArgs ...)> func_;
208-
};
137+
const std::function<S(S)> func_;
209138

210139
virtual S calcNewValue() const override
211140
{
212141
S newValue = value_;
213-
for (int i=0; i < events_->REvents().size(); i++)
214-
newValue = evaluate(ApplyHelper_(newValue,func_));
142+
for (const auto& e : events_->REvents())
143+
newValue = func_(newValue);
215144
return newValue;
216145
}
217146
};

0 commit comments

Comments
 (0)