GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
Monoid.hh
Go to the documentation of this file.
1
2template<class T>
3class Monoid2
4{
5public:
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
21class StringConcat : public Monoid2<std::string>
22{
23public:
24 std::string Empty() { return ""; }
25 std::string Compose(std::string a, std::string b) const { return a+b; }
26};
27
28template<class T>
29class Group : public Monoid2<T>
30{
31public:
32 virtual T Inv(T t) const=0;
33};
34
35template<class T>
36class NumPlus : public Group<T>
37{
38public:
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};
43template<class T>
44class NumMul : public Group<T>
45{
46public:
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
52template<class M, class M2>
54{
55public:
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
61template<class M, class M2>
63{
64public:
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;
78private:
79 Monoid2<M> &m1;
80 Monoid2<M2> &m2;
81};
82template<class T>
83class PlusToMul : public MonoidMorphismImpl<T,T>
84{
85 T Convert(T a) const
86 {
87
88 }
89};
90
91template<class I, class T>
93{
94public:
95 virtual T IndexA(I i) const=0;
96 virtual T IndexB(I i) const=0;
97};
98template<class T>
100{
101public:
102 virtual T ObjectA() const=0;
103 virtual T ObjectB() const=0;
104};
105
106
107template<class A, class B>
108class HomSet : public Array<int, Function<A,B> *>
109{
110public:
111};
112
113template<class A, class B, class C>
114class ComposeHomSet : public HomSet<A,C>
115{
116public:
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 }
135private:
136 HomSet<A,B> &a;
137 HomSet<B,C> &b;
139};
P func(int c, EveryApi &ev)
Definition test.cpp:59
Definition Monoid.hh:93
virtual T IndexB(I i) const =0
virtual T IndexA(I i) const =0
Definition Monoid.hh:100
virtual T ObjectA() const =0
virtual T ObjectB() const =0
Definition EffectI.hh:22
virtual I Size() const =0
ComposeHomSet(HomSet< A, B > &a, HomSet< B, C > &b)
Definition Monoid.hh:117
int Count() const
Definition Monoid.hh:119
Function< A, C > * Index(int i) const
Definition Monoid.hh:125
Definition Effect.hh:490
Definition EffectI.hh:11
virtual B Index(A a) const =0
Definition Monoid.hh:30
virtual T Inv(T t) const =0
Definition Monoid.hh:109
Definition Monoid.hh:4
virtual T concat(const Array< int, T > &arr) const
Definition Monoid.hh:8
virtual T empty() const =0
virtual T compose(T a, T b) const =0
MonoidMorphismImpl(Monoid2< M > &m1, Monoid2< M2 > &m2)
Definition Monoid.hh:65
virtual M2 Compose(M a, M b) const
Definition Monoid.hh:72
virtual M2 Convert(M a) const =0
virtual M2 Empty() const
Definition Monoid.hh:68
Definition Monoid.hh:54
virtual M2 Compose(M a, M b) const =0
virtual M2 Convert(M a) const =0
virtual M2 Empty() const =0
Definition Monoid.hh:45
T Empty() const
Definition Monoid.hh:47
T Inv(T t) const
Definition Monoid.hh:49
T Compose(T a, T b) const
Definition Monoid.hh:48
Definition Monoid.hh:37
T Empty() const
Definition Monoid.hh:39
T Inv(T t) const
Definition Monoid.hh:41
T Compose(T a, T b) const
Definition Monoid.hh:40
Definition Monoid.hh:84
Definition Monoid.hh:22
std::string Empty()
Definition Monoid.hh:24
std::string Compose(std::string a, std::string b) const
Definition Monoid.hh:25
n< br > font size
Definition meshpage.php:3536
int f2(char c)
Definition test.cpp:51
Definition GameApi.h:18
Definition GameApi.h:42