-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRMem.cpp
More file actions
88 lines (76 loc) · 1.98 KB
/
RMem.cpp
File metadata and controls
88 lines (76 loc) · 1.98 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
#include "RMem.h"
/**
* return register-stored value in DECIMAL
*/
int RMem::get_actual_dec(int& idx) {
return rmem_store[idx];
}
/**
* return register-stored value in BINARY
*/
void RMem::get_actual_bin(int& idx, bool return_value[]) {
for (int i = 0; i < MAX_REGISTER_CTR; i++) {
return_value[i] = 0;
}
int target_value = rmem_store[idx]; // Decimal value of register
string tmp_str = "";
while (target_value != 0) {
tmp_str += (target_value % 2) + '0';
target_value /= 2;
}
int str_iter = tmp_str.length() - 1;
for (int i = 0; i < MAX_REGISTER_CTR; i++) {
if (i < MAX_REGISTER_CTR - tmp_str.length()) {
return_value[i] = 0;
} else {
return_value[i] = tmp_str.at(str_iter--) - '0';
}
}
}
/**
* Set some binary-type value to RMem
* idx: Regmem store index
* value: bits
* bitidx: bits idx(maximum length)
*/
void RMem::set_actual_bin(int& idx, bool* value, int& bitidx) {
// need to convert bits to decimal
int ret_val = 0;
for (int i = 0; i < bitidx; i++) {
ret_val += pow(2, (bitidx - 1) - i) * value[i];
}
rmem_store[idx] = ret_val;
}
/**
* Set some decimal-type value to RMem
*/
void RMem::set_actual_dec(int& idx, int& value) {
rmem_store[idx] = value;
}
void RMem::set_actual_dec(int& idx, const int& value) {
rmem_store[idx] = value;
}
/**
* For converting some bits to idx value
* binaries --> decimal
*/
int RMem::conv_bin_dec_idx(bool* bits, int& bitidx) {
int ret_val = 0;
for (int i = 0; i < bitidx; i++) {
ret_val += pow(2, (bitidx - 1) - i) * bits[i];
}
return ret_val;
}
int RMem::conv_bin_dec_idx(bool* bits, const int& bitidx) {
int ret_val = 0;
for (int i = 0; i < bitidx; i++) {
ret_val += pow(2, (bitidx - 1) - i) * bits[i];
}
return ret_val;
}
int RMem::get_value(int& idx) {
return this->rmem_store[idx];
}
int RMem::get_value(const int& idx) {
return this->rmem_store[idx];
}