-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDtype.h
More file actions
158 lines (110 loc) · 3.92 KB
/
Dtype.h
File metadata and controls
158 lines (110 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#ifndef __DTYPE__
#define __DTYPE__
#include <string>
#include "MexprTree.h"
#include "MexprcppEnums.h"
class Dtype : public MexprNode {
private:
protected:
Dtype();
public:
bool is_resolved;
mexprcpp_dtypes_t did; // Dtype ID
virtual ~Dtype();
static Dtype * factory(mexprcpp_dtypes_t did);
virtual void SetValue(void *value) = 0;
virtual void SetValue(Dtype *) = 0;
virtual MexprNode * clone() = 0;
virtual mexprcpp_dtypes_t ResultStorageType(mexprcpp_dtypes_t did1, mexprcpp_dtypes_t did2) = 0;
virtual Dtype* compute(Dtype *dtype1, Dtype *dtype2) = 0;
} ;
class Dtype_INT : public Dtype {
private:
protected:
public:
/* Data strure that would store int*/
struct {
int int_val;
} dtype;
Dtype_INT();
Dtype_INT(int val); // paramterized constructor for convenience
~Dtype_INT();
virtual void SetValue(void *value) override;
virtual void SetValue(Dtype *) override;
virtual MexprNode * clone() override;
virtual mexprcpp_dtypes_t ResultStorageType(mexprcpp_dtypes_t did1, mexprcpp_dtypes_t did2) override;
virtual Dtype* compute(Dtype *dtype1, Dtype *dtype2) override;
};
class Dtype_DOUBLE : public Dtype {
private:
protected:
public:
/* Data strure that would store int*/
struct {
double d_val;
} dtype;
Dtype_DOUBLE();
Dtype_DOUBLE(double val); // paramterized constructor for convenience
~Dtype_DOUBLE();
virtual void SetValue(void *value) override;
virtual void SetValue(Dtype *) override;
virtual MexprNode * clone() override;
virtual mexprcpp_dtypes_t ResultStorageType(mexprcpp_dtypes_t did1, mexprcpp_dtypes_t did2) override;
virtual Dtype* compute(Dtype *dtype1, Dtype *dtype2) override;
};
class Dtype_STRING : public Dtype {
private:
protected:
public:
/* Data structure that would store int*/
struct {
std::string str_val;
} dtype;
Dtype_STRING();
~Dtype_STRING();
virtual void SetValue(void *value) override;
virtual void SetValue(Dtype *) override;
virtual MexprNode * clone() override;
virtual mexprcpp_dtypes_t ResultStorageType(mexprcpp_dtypes_t did1, mexprcpp_dtypes_t did2) override;
virtual Dtype* compute(Dtype *dtype1, Dtype *dtype2) override;
};
class Dtype_BOOL : public Dtype {
private:
protected:
public:
struct {
bool b_val;
}dtype;
Dtype_BOOL();
~Dtype_BOOL();
virtual void SetValue(void *value) override;
virtual void SetValue(Dtype *) override;
virtual MexprNode * clone() override;
virtual mexprcpp_dtypes_t ResultStorageType(mexprcpp_dtypes_t did1, mexprcpp_dtypes_t did2) override;
virtual Dtype* compute(Dtype *dtype1, Dtype *dtype2) override;
};
class Dtype_VARIABLE : public Dtype {
private:
protected:
public:
struct {
std::string variable_name;
} dtype;
// resolution information
void *data_src;
Dtype *(*compute_fn_ptr)(char *, void *);
mexprcpp_dtypes_t resolved_did; // optional Dtype_INT
Dtype_VARIABLE(std::string var_name);
Dtype_VARIABLE();
~Dtype_VARIABLE();
virtual void SetValue(void *value) override;
virtual void SetValue(Dtype *) override;
virtual MexprNode * clone() override;
virtual mexprcpp_dtypes_t ResultStorageType(mexprcpp_dtypes_t did1, mexprcpp_dtypes_t did2) override;
virtual Dtype* compute(Dtype *dtype1, Dtype *dtype2) override;
void ResolveOperand (
mexprcpp_dtypes_t resolved_did,
void *data_src,
Dtype *(*compute_fn_ptr)(char *, void *));
};
#endif