Skip to content

Commit 60479a4

Browse files
committed
feat(core/op): add op support for mod, and, or, xor.
1 parent b65e13d commit 60479a4

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

core/op/common/param.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,16 @@ struct min {
209209
struct negative {};
210210

211211
struct interelem {
212-
enum Operation { Add = 1, Sub = 2, Mul = 3, Div = 4 };
212+
enum Operation {
213+
Add = 1,
214+
Sub = 2,
215+
Mul = 3,
216+
Div = 4,
217+
Mod = 5,
218+
And = 6,
219+
Or = 7,
220+
Xor = 8
221+
};
213222

214223
Operation op;
215224

core/op/naive/interelem.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,26 @@ TC interelem_div(TA a, TB b) {
2828
return static_cast<TC>(a / b);
2929
}
3030

31+
template <typename TA, typename TB, typename TC>
32+
TC interelem_mod(TA a, TB b) {
33+
return static_cast<TC>(a % b);
34+
}
35+
36+
template <typename TA, typename TB, typename TC>
37+
TC interelem_and(TA a, TB b) {
38+
return static_cast<TC>(a & b);
39+
}
40+
41+
template <typename TA, typename TB, typename TC>
42+
TC interelem_or(TA a, TB b) {
43+
return static_cast<TC>(a | b);
44+
}
45+
46+
template <typename TA, typename TB, typename TC>
47+
TC interelem_xor(TA a, TB b) {
48+
return static_cast<TC>(a ^ b);
49+
}
50+
3151
IMPL_NAIVE_DOUBLE_INPUT_INTERNAL(interelem) {
3252
nn_size idx_offset = loup.ndim - NN_MAX_NDIM;
3353
std::function<TC(TA, TB)> func;
@@ -44,6 +64,18 @@ IMPL_NAIVE_DOUBLE_INPUT_INTERNAL(interelem) {
4464
case Param::Div:
4565
func = interelem_div<TA, TB, TC>;
4666
break;
67+
case Param::Mod:
68+
func = interelem_mod<TA, TB, TC>;
69+
break;
70+
case Param::And:
71+
func = interelem_and<TA, TB, TC>;
72+
break;
73+
case Param::Or:
74+
func = interelem_or<TA, TB, TC>;
75+
break;
76+
case Param::Xor:
77+
func = interelem_xor<TA, TB, TC>;
78+
break;
4779

4880
default:
4981
return Status(StatusCategory::NUMNET, StatusCode::FAIL,

0 commit comments

Comments
 (0)