GameApi
28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
Monoid.hh
Go to the documentation of this file.
1
2
template
<
class
T>
3
class
Monoid2
4
{
5
public
:
6
virtual
T
empty
()
const
=0;
7
virtual
T
compose
(
T
a,
T
b)
const
=0;
8
virtual
T
concat
(
const
Array<int, T>
&arr)
const
9
{
10
T
t =
empty
();
11
int
size
= arr.
Size
();
12
for
(
int
i=0;i<
size
;i++)
13
{
14
t =
compose
(t,arr.
Index
(i));
15
}
16
return
t;
17
}
18
};
19
20
21
class
StringConcat
:
public
Monoid2
<std::string>
22
{
23
public
:
24
std::string
Empty
() {
return
""
; }
25
std::string
Compose
(std::string a, std::string b)
const
{
return
a+b; }
26
};
27
28
template
<
class
T>
29
class
Group
:
public
Monoid2
<T>
30
{
31
public
:
32
virtual
T
Inv
(
T
t)
const
=0;
33
};
34
35
template
<
class
T>
36
class
NumPlus
:
public
Group
<T>
37
{
38
public
:
39
T
Empty
()
const
{
return
0; }
40
T
Compose
(
T
a,
T
b)
const
{
return
a+b; }
41
T
Inv
(
T
t)
const
{
return
-t; }
42
};
43
template
<
class
T>
44
class
NumMul
:
public
Group
<T>
45
{
46
public
:
47
T
Empty
()
const
{
return
1; }
48
T
Compose
(
T
a,
T
b)
const
{
return
a*b; }
49
T
Inv
(
T
t)
const
{
return
1/t; }
50
};
51
52
template
<
class
M,
class
M2>
53
class
MonoidMorphism
54
{
55
public
:
56
virtual
M2
Empty
()
const
=0;
57
virtual
M2
Compose
(
M
a,
M
b)
const
=0;
58
virtual
M2
Convert
(
M
a)
const
=0;
59
};
60
61
template
<
class
M,
class
M2>
62
class
MonoidMorphismImpl
:
public
MonoidMorphism
<M, M2>
63
{
64
public
:
65
MonoidMorphismImpl
(
Monoid2<M>
&m1,
Monoid2<M2>
&m2) : m1(m1), m2(m2)
66
{
67
}
68
virtual
M2
Empty
()
const
69
{
70
return
Convert
(m1.empty());
71
}
72
virtual
M2
Compose
(
M
a,
M
b)
const
73
{
74
return
Convert
(m1.Compose(a,b));
75
//return m2.Compose(Convert(a), Convert(b));
76
}
77
virtual
M2
Convert
(
M
a)
const
=0;
78
private
:
79
Monoid2<M>
&m1;
80
Monoid2<M2>
&m2;
81
};
82
template
<
class
T>
83
class
PlusToMul
:
public
MonoidMorphismImpl
<T,T>
84
{
85
T
Convert(
T
a)
const
86
{
87
88
}
89
};
90
91
template
<
class
I,
class
T>
92
class
AltFunction
93
{
94
public
:
95
virtual
T
IndexA
(I i)
const
=0;
96
virtual
T
IndexB
(I i)
const
=0;
97
};
98
template
<
class
T>
99
class
AltObject
100
{
101
public
:
102
virtual
T
ObjectA
()
const
=0;
103
virtual
T
ObjectB
()
const
=0;
104
};
105
106
107
template
<
class
A,
class
B>
108
class
HomSet
:
public
Array
<int, Function<A,B> *>
109
{
110
public
:
111
};
112
113
template
<
class
A,
class
B,
class
C>
114
class
ComposeHomSet
:
public
HomSet
<A,C>
115
{
116
public
:
117
ComposeHomSet
(
HomSet<A,B>
&a,
HomSet<B,C>
&b) : a(a), b(b) { }
118
119
int
Count
()
const
120
{
121
int
s = a.Count();
122
s *= b.Count();
123
return
s;
124
}
125
Function<A,C>
*
Index
(
int
i)
const
126
{
127
delete
func;
128
int
xindex = i / a.Count();
129
int
yindex = i - xindex * a.Count();
130
Function<A,B>
*f1 = a.
Index
(xindex);
131
Function<B,C>
*
f2
= b.Index(yindex);
132
func =
new
FunctionCompose<A,B,C>
(*f1, *
f2
);
133
return
func;
134
}
135
private
:
136
HomSet<A,B>
&a;
137
HomSet<B,C>
&b;
138
FunctionCompose<A,B,C>
*
func
;
139
};
func
P func(int c, EveryApi &ev)
Definition
test.cpp:59
AltFunction
Definition
Monoid.hh:93
AltFunction::IndexB
virtual T IndexB(I i) const =0
AltFunction::IndexA
virtual T IndexA(I i) const =0
AltObject
Definition
Monoid.hh:100
AltObject::ObjectA
virtual T ObjectA() const =0
AltObject::ObjectB
virtual T ObjectB() const =0
Array
Definition
EffectI.hh:22
Array::Size
virtual I Size() const =0
ComposeHomSet::ComposeHomSet
ComposeHomSet(HomSet< A, B > &a, HomSet< B, C > &b)
Definition
Monoid.hh:117
ComposeHomSet::Count
int Count() const
Definition
Monoid.hh:119
ComposeHomSet::Index
Function< A, C > * Index(int i) const
Definition
Monoid.hh:125
FunctionCompose
Definition
Effect.hh:490
Function
Definition
EffectI.hh:11
Function::Index
virtual B Index(A a) const =0
Group
Definition
Monoid.hh:30
Group::Inv
virtual T Inv(T t) const =0
HomSet
Definition
Monoid.hh:109
Monoid2
Definition
Monoid.hh:4
Monoid2::concat
virtual T concat(const Array< int, T > &arr) const
Definition
Monoid.hh:8
Monoid2::empty
virtual T empty() const =0
Monoid2::compose
virtual T compose(T a, T b) const =0
MonoidMorphismImpl::MonoidMorphismImpl
MonoidMorphismImpl(Monoid2< M > &m1, Monoid2< M2 > &m2)
Definition
Monoid.hh:65
MonoidMorphismImpl::Compose
virtual M2 Compose(M a, M b) const
Definition
Monoid.hh:72
MonoidMorphismImpl::Convert
virtual M2 Convert(M a) const =0
MonoidMorphismImpl::Empty
virtual M2 Empty() const
Definition
Monoid.hh:68
MonoidMorphism
Definition
Monoid.hh:54
MonoidMorphism::Compose
virtual M2 Compose(M a, M b) const =0
MonoidMorphism::Convert
virtual M2 Convert(M a) const =0
MonoidMorphism::Empty
virtual M2 Empty() const =0
NumMul
Definition
Monoid.hh:45
NumMul::Empty
T Empty() const
Definition
Monoid.hh:47
NumMul::Inv
T Inv(T t) const
Definition
Monoid.hh:49
NumMul::Compose
T Compose(T a, T b) const
Definition
Monoid.hh:48
NumPlus
Definition
Monoid.hh:37
NumPlus::Empty
T Empty() const
Definition
Monoid.hh:39
NumPlus::Inv
T Inv(T t) const
Definition
Monoid.hh:41
NumPlus::Compose
T Compose(T a, T b) const
Definition
Monoid.hh:40
PlusToMul
Definition
Monoid.hh:84
StringConcat
Definition
Monoid.hh:22
StringConcat::Empty
std::string Empty()
Definition
Monoid.hh:24
StringConcat::Compose
std::string Compose(std::string a, std::string b) const
Definition
Monoid.hh:25
size
n< br > font size
Definition
meshpage.php:3536
f2
int f2(char c)
Definition
test.cpp:51
M
Definition
GameApi.h:18
T
Definition
GameApi.h:42
Monoid.hh
Generated by
1.15.0