Skip to content

Commit 3876b79

Browse files
committed
1. move Array_Operator.h and Map_Operator.h
1 parent 8b2481f commit 3876b79

File tree

4 files changed

+208
-141
lines changed

4 files changed

+208
-141
lines changed

include/RI/global/Array_Operator.h

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -13,52 +13,21 @@ namespace RI
1313
namespace Array_Operator
1414
{
1515
template<typename T, std::size_t N>
16-
std::array<T,N> operator%(const std::array<T,N> &v1, const std::array<T,N> &v2)
17-
{
18-
auto mod = [](const T i, const T n){ return (i%n+3*n/2)%n-n/2; }; // [-n/2,n/2]
19-
// auto mod = [](const T i, const T n){ return (i%n+n)%n; }; // [0,n)
20-
// auto mod = [](const T i, const T n){ return i%n; };
21-
std::array<T,N> v;
22-
for(std::size_t i=0; i<N; ++i)
23-
v[i] = mod(v1[i], v2[i]);
24-
return v;
25-
}
16+
extern std::array<T,N> operator%(const std::array<T,N> &v1, const std::array<T,N> &v2);
2617

2718
template<typename T, std::size_t N>
28-
std::array<T,N> operator+(const std::array<T,N> &v1, const std::array<T,N> &v2)
29-
{
30-
std::array<T,N> v;
31-
for(std::size_t i=0; i<N; ++i)
32-
v[i] = v1[i] + v2[i];
33-
return v;
34-
}
19+
extern std::array<T,N> operator+(const std::array<T,N> &v1, const std::array<T,N> &v2);
3520

3621
template<typename T, std::size_t N>
37-
std::array<T,N> operator-(const std::array<T,N> &v1, const std::array<T,N> &v2)
38-
{
39-
std::array<T,N> v;
40-
for(std::size_t i=0; i<N; ++i)
41-
v[i] = v1[i] - v2[i];
42-
return v;
43-
}
22+
extern std::array<T,N> operator-(const std::array<T,N> &v1, const std::array<T,N> &v2);
4423

4524
template<typename T, std::size_t N>
46-
std::array<T,N> operator-(const std::array<T,N> &v_in)
47-
{
48-
std::array<T,N> v;
49-
for(std::size_t i=0; i<N; ++i)
50-
v[i] = -v_in[i];
51-
return v;
52-
}
25+
extern std::array<T,N> operator-(const std::array<T,N> &v_in);
5326

5427
template<typename T, std::size_t N>
55-
std::array<T,N> operator*(const T &s, const std::array<T,N> &v_in)
56-
{
57-
std::array<T,N> v;
58-
for(std::size_t i=0; i<N; ++i)
59-
v[i] = s * v_in[i];
60-
return v;
61-
}
28+
extern std::array<T,N> operator*(const T &s, const std::array<T,N> &v_in);
6229
}
6330

64-
}
31+
}
32+
33+
#include "Array_Operator.hpp"
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// ===================
2+
// Author: Peize Lin
3+
// date: 2022.02.18
4+
// ===================
5+
6+
#pragma once
7+
8+
#include "Array_Operator.h"
9+
10+
namespace RI
11+
{
12+
13+
namespace Array_Operator
14+
{
15+
template<typename T, std::size_t N>
16+
std::array<T,N> operator%(const std::array<T,N> &v1, const std::array<T,N> &v2)
17+
{
18+
auto mod = [](const T i, const T n){ return (i%n+3*n/2)%n-n/2; }; // [-n/2,n/2]
19+
// auto mod = [](const T i, const T n){ return (i%n+n)%n; }; // [0,n)
20+
// auto mod = [](const T i, const T n){ return i%n; };
21+
std::array<T,N> v;
22+
for(std::size_t i=0; i<N; ++i)
23+
v[i] = mod(v1[i], v2[i]);
24+
return v;
25+
}
26+
27+
template<typename T, std::size_t N>
28+
std::array<T,N> operator+(const std::array<T,N> &v1, const std::array<T,N> &v2)
29+
{
30+
std::array<T,N> v;
31+
for(std::size_t i=0; i<N; ++i)
32+
v[i] = v1[i] + v2[i];
33+
return v;
34+
}
35+
36+
template<typename T, std::size_t N>
37+
std::array<T,N> operator-(const std::array<T,N> &v1, const std::array<T,N> &v2)
38+
{
39+
std::array<T,N> v;
40+
for(std::size_t i=0; i<N; ++i)
41+
v[i] = v1[i] - v2[i];
42+
return v;
43+
}
44+
45+
template<typename T, std::size_t N>
46+
std::array<T,N> operator-(const std::array<T,N> &v_in)
47+
{
48+
std::array<T,N> v;
49+
for(std::size_t i=0; i<N; ++i)
50+
v[i] = -v_in[i];
51+
return v;
52+
}
53+
54+
template<typename T, std::size_t N>
55+
std::array<T,N> operator*(const T &s, const std::array<T,N> &v_in)
56+
{
57+
std::array<T,N> v;
58+
for(std::size_t i=0; i<N; ++i)
59+
v[i] = s * v_in[i];
60+
return v;
61+
}
62+
}
63+
64+
}

include/RI/global/Map_Operator.h

Lines changed: 34 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,34 @@
1-
// ===================
2-
// Author: Peize Lin
3-
// Date: 2022.07.25
4-
// ===================
5-
6-
#pragma once
7-
8-
#include <map>
9-
10-
namespace RI
11-
{
12-
13-
namespace Map_Operator
14-
{
15-
// m1+m2
16-
template<typename Tkey, typename Tvalue>
17-
std::map<Tkey,Tvalue> operator+(const std::map<Tkey,Tvalue> &m1, const std::map<Tkey,Tvalue> &m2)
18-
{
19-
std::map<Tkey,Tvalue> m;
20-
auto ptr1 = m1.begin();
21-
auto ptr2 = m2.begin();
22-
while(ptr1!=m1.end() && ptr2!=m2.end())
23-
{
24-
if(ptr1->first == ptr2->first)
25-
{
26-
m.emplace_hint(m.end(), ptr1->first, ptr1->second + ptr2->second);
27-
++ptr1;
28-
++ptr2;
29-
}
30-
else if(ptr1->first < ptr2->first)
31-
{
32-
m.emplace_hint(m.end(), ptr1->first, ptr1->second);
33-
++ptr1;
34-
}
35-
else
36-
{
37-
m.emplace_hint(m.end(), ptr2->first, ptr2->second);
38-
++ptr2;
39-
}
40-
}
41-
m.insert(ptr1, m1.end());
42-
m.insert(ptr2, m2.end());
43-
return m;
44-
}
45-
46-
// m2 cover m1
47-
template<typename Tkey, typename Tvalue>
48-
std::map<Tkey,Tvalue> cover(const std::map<Tkey,Tvalue> &m1, const std::map<Tkey,Tvalue> &m2)
49-
{
50-
std::map<Tkey,Tvalue> m = m1;
51-
for(const auto &item : m2)
52-
m[item.first] = item.second;
53-
return m;
54-
}
55-
56-
// -m_in
57-
template<typename Tkey, typename Tvalue>
58-
std::map<Tkey,Tvalue> operator-(const std::map<Tkey,Tvalue> &m_in)
59-
{
60-
std::map<Tkey,Tvalue> m;
61-
for(const auto &item : m_in)
62-
m.emplace_hint(m.end(), item.first, -item.second);
63-
return m;
64-
}
65-
66-
// m1-m2
67-
template<typename Tkey, typename Tvalue>
68-
std::map<Tkey,Tvalue> operator-(const std::map<Tkey,Tvalue> &m1, const std::map<Tkey,Tvalue> &m2)
69-
{
70-
std::map<Tkey,Tvalue> m;
71-
auto ptr1 = m1.begin();
72-
auto ptr2 = m2.begin();
73-
while(ptr1!=m1.end() && ptr2!=m2.end())
74-
{
75-
if(ptr1->first == ptr2->first)
76-
{
77-
m.emplace_hint(m.end(), ptr1->first, ptr1->second - ptr2->second);
78-
++ptr1;
79-
++ptr2;
80-
}
81-
else if(ptr1->first < ptr2->first)
82-
{
83-
m.emplace_hint(m.end(), ptr1->first, ptr1->second);
84-
++ptr1;
85-
}
86-
else
87-
{
88-
m.emplace_hint(m.end(), ptr2->first, -ptr2->second);
89-
++ptr2;
90-
}
91-
}
92-
m.insert(ptr1, m1.end());
93-
while(ptr2!=m2.end())
94-
{
95-
m.emplace_hint(m.end(), ptr2->first, -ptr2->second);
96-
++ptr2;
97-
}
98-
return m;
99-
}
100-
}
101-
102-
}
1+
// ===================
2+
// Author: Peize Lin
3+
// Date: 2022.07.25
4+
// ===================
5+
6+
#pragma once
7+
8+
#include <map>
9+
10+
namespace RI
11+
{
12+
13+
namespace Map_Operator
14+
{
15+
// m1+m2
16+
template<typename Tkey, typename Tvalue>
17+
extern std::map<Tkey,Tvalue> operator+(const std::map<Tkey,Tvalue> &m1, const std::map<Tkey,Tvalue> &m2);
18+
19+
// m2 cover m1
20+
template<typename Tkey, typename Tvalue>
21+
extern std::map<Tkey,Tvalue> cover(const std::map<Tkey,Tvalue> &m1, const std::map<Tkey,Tvalue> &m2);
22+
23+
// -m_in
24+
template<typename Tkey, typename Tvalue>
25+
extern std::map<Tkey,Tvalue> operator-(const std::map<Tkey,Tvalue> &m_in);
26+
27+
// m1-m2
28+
template<typename Tkey, typename Tvalue>
29+
extern std::map<Tkey,Tvalue> operator-(const std::map<Tkey,Tvalue> &m1, const std::map<Tkey,Tvalue> &m2);
30+
}
31+
32+
}
33+
34+
#include "Map_Operator.hpp"

include/RI/global/Map_Operator.hpp

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// ===================
2+
// Author: Peize Lin
3+
// Date: 2022.07.25
4+
// ===================
5+
6+
#pragma once
7+
8+
#include "Map_Operator.h"
9+
10+
namespace RI
11+
{
12+
13+
namespace Map_Operator
14+
{
15+
// m1+m2
16+
template<typename Tkey, typename Tvalue>
17+
std::map<Tkey,Tvalue> operator+(const std::map<Tkey,Tvalue> &m1, const std::map<Tkey,Tvalue> &m2)
18+
{
19+
std::map<Tkey,Tvalue> m;
20+
auto ptr1 = m1.begin();
21+
auto ptr2 = m2.begin();
22+
while(ptr1!=m1.end() && ptr2!=m2.end())
23+
{
24+
if(ptr1->first == ptr2->first)
25+
{
26+
m.emplace_hint(m.end(), ptr1->first, ptr1->second + ptr2->second);
27+
++ptr1;
28+
++ptr2;
29+
}
30+
else if(ptr1->first < ptr2->first)
31+
{
32+
m.emplace_hint(m.end(), ptr1->first, ptr1->second);
33+
++ptr1;
34+
}
35+
else
36+
{
37+
m.emplace_hint(m.end(), ptr2->first, ptr2->second);
38+
++ptr2;
39+
}
40+
}
41+
m.insert(ptr1, m1.end());
42+
m.insert(ptr2, m2.end());
43+
return m;
44+
}
45+
46+
// m2 cover m1
47+
template<typename Tkey, typename Tvalue>
48+
std::map<Tkey,Tvalue> cover(const std::map<Tkey,Tvalue> &m1, const std::map<Tkey,Tvalue> &m2)
49+
{
50+
std::map<Tkey,Tvalue> m = m1;
51+
for(const auto &item : m2)
52+
m[item.first] = item.second;
53+
return m;
54+
}
55+
56+
// -m_in
57+
template<typename Tkey, typename Tvalue>
58+
std::map<Tkey,Tvalue> operator-(const std::map<Tkey,Tvalue> &m_in)
59+
{
60+
std::map<Tkey,Tvalue> m;
61+
for(const auto &item : m_in)
62+
m.emplace_hint(m.end(), item.first, -item.second);
63+
return m;
64+
}
65+
66+
// m1-m2
67+
template<typename Tkey, typename Tvalue>
68+
std::map<Tkey,Tvalue> operator-(const std::map<Tkey,Tvalue> &m1, const std::map<Tkey,Tvalue> &m2)
69+
{
70+
std::map<Tkey,Tvalue> m;
71+
auto ptr1 = m1.begin();
72+
auto ptr2 = m2.begin();
73+
while(ptr1!=m1.end() && ptr2!=m2.end())
74+
{
75+
if(ptr1->first == ptr2->first)
76+
{
77+
m.emplace_hint(m.end(), ptr1->first, ptr1->second - ptr2->second);
78+
++ptr1;
79+
++ptr2;
80+
}
81+
else if(ptr1->first < ptr2->first)
82+
{
83+
m.emplace_hint(m.end(), ptr1->first, ptr1->second);
84+
++ptr1;
85+
}
86+
else
87+
{
88+
m.emplace_hint(m.end(), ptr2->first, -ptr2->second);
89+
++ptr2;
90+
}
91+
}
92+
m.insert(ptr1, m1.end());
93+
while(ptr2!=m2.end())
94+
{
95+
m.emplace_hint(m.end(), ptr2->first, -ptr2->second);
96+
++ptr2;
97+
}
98+
return m;
99+
}
100+
}
101+
102+
}

0 commit comments

Comments
 (0)