summaryrefslogtreecommitdiff
path: root/src/transfer_function.h
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-05-05 20:56:14 +0200
committerCarl Hetherington <cth@carlh.net>2022-05-05 21:09:40 +0200
commitcbbb9e63b7ec7a5c34f186ceafe5da6be8faa739 (patch)
tree79ccaa11973954138df02c2022b2ea25c0717b9d /src/transfer_function.h
parentad7244de981a7dd0b9b4f8f3d62d4704f1968012 (diff)
Allow LUTs to be created with a particular range.
Diffstat (limited to 'src/transfer_function.h')
-rw-r--r--src/transfer_function.h23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/transfer_function.h b/src/transfer_function.h
index 04678733..a53a476e 100644
--- a/src/transfer_function.h
+++ b/src/transfer_function.h
@@ -42,7 +42,7 @@
#include <boost/thread/mutex.hpp>
-#include <map>
+#include <unordered_map>
#include <memory>
#include <vector>
@@ -60,17 +60,30 @@ public:
virtual ~TransferFunction () {}
- /** @return A look-up table (of size 2^bit_depth) whose values range from 0 to 1 */
- std::vector<double> const& lut (int bit_depth, bool inverse) const;
+ /** @return A look-up table (of size 2^bit_depth) */
+ std::vector<double> const& lut (double from, double to, int bit_depth, bool inverse) const;
virtual bool about_equal (std::shared_ptr<const TransferFunction> other, double epsilon) const = 0;
protected:
/** Make a LUT and return an array allocated by new */
- virtual std::vector<double> make_lut (int bit_depth, bool inverse) const = 0;
+ virtual std::vector<double> make_lut (double from, double to, int bit_depth, bool inverse) const = 0;
private:
- mutable std::map<std::pair<int, bool>, std::vector<double>> _luts;
+ struct LUTDescriptor {
+ double from;
+ double to;
+ int bit_depth;
+ bool inverse;
+
+ bool operator==(LUTDescriptor const& other) const;
+ };
+
+ struct LUTDescriptorHasher {
+ std::size_t operator()(LUTDescriptor const& desc) const;
+ };
+
+ mutable std::unordered_map<LUTDescriptor, std::vector<double>, LUTDescriptorHasher> _luts;
/** mutex to protect _luts */
mutable boost::mutex _mutex;
};