#include <boost/noncopyable.hpp>
#include <boost/shared_ptr.hpp>
+#include <boost/thread/mutex.hpp>
#include <map>
namespace dcp {
class TransferFunction : public boost::noncopyable
{
public:
+ TransferFunction (bool inverse);
+
virtual ~TransferFunction ();
- float const * lut (int bit_depth) const;
+ /** @return A look-up table (of size 2^bit_depth) whose values range from 0 to 1 */
+ double const * lut (int bit_depth) const;
- virtual bool about_equal (boost::shared_ptr<const TransferFunction> other, float epsilon) const = 0;
+ virtual bool about_equal (boost::shared_ptr<const TransferFunction> other, double epsilon) const;
protected:
- virtual float * make_lut (int bit_depth) const = 0;
+ virtual double * make_lut (int bit_depth) const = 0;
-private:
- mutable std::map<int, float*> _luts;
+ bool _inverse;
+
+private:
+ mutable std::map<int, double*> _luts;
+ /** mutex to protect _luts */
+ mutable boost::mutex _mutex;
};
}