-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlibfraction.cpp
More file actions
58 lines (54 loc) · 1.78 KB
/
Copy pathlibfraction.cpp
File metadata and controls
58 lines (54 loc) · 1.78 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
#include <iostream>
#ifdef _WIN64
#define DllExport __declspec(dllexport)
#else
#define DllExport
#endif
using namespace std;
/**
* @brief Fraction data type
*
*/
typedef struct fraction {
int numerator, denominator;
const char *str;
void (*print_func)(const char *);
unsigned char *in_bytes, *out_bytes;
size_t bytes_len;
} Fraction;
/**
* @brief Multiplies two fractions together and stores the result in frac1.
* Also prints out the string in each fraction structure.
*
* @param frac1
* @param frac2
* @return 0 on success, -1 on failure
*/
extern "C" DllExport int fraction_multiply(Fraction *frac1, Fraction *frac2) {
if (frac1 != nullptr && frac2 != nullptr) {
int numerator = frac1->numerator * frac2->numerator;
int denominator = frac1->denominator * frac2->denominator;
frac1->numerator = numerator;
frac1->denominator = denominator;
if (frac1->print_func != nullptr && frac1->str != nullptr) {
frac1->print_func(frac1->str);
}
if (frac2->print_func != nullptr && frac2->str != nullptr) {
frac2->print_func(frac2->str);
}
// Assuming out_bytes has been allocated by the caller of this function!
size_t counter = 0;
for (size_t i = 0; i < frac1->bytes_len; i++) {
counter += frac1->in_bytes[i];
frac1->out_bytes[i] = frac1->in_bytes[i] ^ 0x5c;
}
for (size_t i = 0; i < frac2->bytes_len; i++) {
counter += frac2->in_bytes[i];
frac2->out_bytes[i] = frac2->in_bytes[i] ^ 0x5c;
}
cout << "The average of the bytes in frac1 and frac2 = " << counter / (frac1->bytes_len + frac2->bytes_len) << endl;
cout << "Finished with calculation!" << endl;
return 0;
}
return -1;
}