diff options
| author | Jacob Palecki <[email protected]> | 2021-04-09 16:27:32 -0700 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2021-04-09 16:27:32 -0700 |
| commit | 060b79bda0b656bd9aec253389706681a565443e (patch) | |
| tree | 93c7246b34873dc694b064f7b8b2a2bf560a9ea8 | |
| parent | Fixed some bugs (diff) | |
| download | rawaccel-060b79bda0b656bd9aec253389706681a565443e.tar.xz rawaccel-060b79bda0b656bd9aec253389706681a565443e.zip | |
Some more small additions and fixes
| -rw-r--r-- | common/accel-lookup.hpp | 15 | ||||
| -rw-r--r-- | wrapper/wrapper.cpp | 16 |
2 files changed, 25 insertions, 6 deletions
diff --git a/common/accel-lookup.hpp b/common/accel-lookup.hpp index c014b84..97af0ff 100644 --- a/common/accel-lookup.hpp +++ b/common/accel-lookup.hpp @@ -167,6 +167,7 @@ namespace rawaccel { fp_rep_range range; ; arbitrary_lut_point data[capacity] = {}; + float raw_data_in[capacity*2] = {}; int log_lookup[capacity] = {}; double first_point_speed; double last_point_speed; @@ -248,10 +249,10 @@ namespace rawaccel { last_arbitrary_index = length - 2; last_point_speed = points[last_arbitrary_index].x; - int start = static_cast<int>(floor(log(first_point_speed) / log(2.0))); - first_log_lookup_speed = pow(2.0, start); - int end = static_cast<int>(floor(log(last_point_speed) / log(2.0))); - last_log_lookup_speed = pow(2.0, end); + int start = static_cast<int>(floor(log(first_point_speed))); + first_log_lookup_speed = exp(start*1.0); + int end = static_cast<int>(floor(log(last_point_speed))); + last_log_lookup_speed = exp(end*1.0); int num = static_cast<int>(capacity / (end - start)); range = fp_rep_range{ start, end, num }; last_log_lookup_index = num * (end - start) - 1; @@ -266,6 +267,8 @@ namespace rawaccel { for (int i = 0; i < length; i++) { next = points[i]; + raw_data_in[i * 2] = next.x; + raw_data_in[i * 2 + 1] = next.y; double slope = (next.y - current.y) / (next.x - current.x); double intercept = next.y - slope * next.x; si_pair current_si = { @@ -284,8 +287,10 @@ namespace rawaccel { this->log_lookup[log_index] = i; log_index++; log_inner_iterator += log_inner_slice; - log_value = pow(2, log_inner_iterator); + log_value = exp(log_inner_iterator); } + + current = next; } } diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index 74e8683..1f27415 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -178,6 +178,20 @@ public ref struct ArbitraryLut sealed : public LutBase array<float, 2>^ data; + ArbitraryLut() + { + } + + ArbitraryLut(const ra::arbitrary_lut& table) + { + mode = Mode::arbitrary; + transfer = true; + data = gcnew array<float, 2>(table.last_arbitrary_index + 1, 2); + + pin_ptr<float> pdata = &data[0,0]; + std::memcpy(pdata, &table.raw_data_in, sizeof(float) * 2 * (table.last_arbitrary_index + 1)); + } + virtual void SetArgs(TableArgs% args) override { args.mode = TableMode::arbitrary; @@ -565,7 +579,7 @@ private: case ra::table_mode::off: return nullptr; case ra::table_mode::linear: return gcnew LinearLut(au.lin_lut); case ra::table_mode::binlog: return gcnew BinLogLut(au.log_lut); - case ra::table_mode::arbitrary: + case ra::table_mode::arbitrary: return gcnew ArbitraryLut(au.arb_lut); default: throw gcnew NotImplementedException(); } } |