diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-05-05 20:56:14 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-05-05 21:09:40 +0200 |
| commit | cbbb9e63b7ec7a5c34f186ceafe5da6be8faa739 (patch) | |
| tree | 79ccaa11973954138df02c2022b2ea25c0717b9d /src/transfer_function.h | |
| parent | ad7244de981a7dd0b9b4f8f3d62d4704f1968012 (diff) | |
Allow LUTs to be created with a particular range.
Diffstat (limited to 'src/transfer_function.h')
| -rw-r--r-- | src/transfer_function.h | 23 |
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; }; |
