TuttleOFX  1
AbstractLut.cpp
Go to the documentation of this file.
00001 #include "AbstractLut.hpp"
00002 #include "Interpolator.hpp"
00003 #include "TrilinInterpolator.hpp"
00004 #include "Color.hpp"
00005 #include "LutReader.hpp"
00006 
00007 namespace tuttle {
00008 
00009 AbstractLut::AbstractLut()
00010         : _dimSize( 0 )
00011         , _data( NULL )
00012         , _shared( false )
00013         , _interpolator( new TrilinInterpolator() )
00014 {}
00015 
00016 AbstractLut::AbstractLut( Interpolator* interpolator, size_t dimSize, double* data /* = NULL */ )
00017         : _dimSize( dimSize )
00018         , _data( data )
00019         , _shared( false )
00020         , _interpolator( interpolator )
00021 {}
00022 
00023 AbstractLut::AbstractLut( Interpolator* interpolator, LutReader& reader )
00024         : _dimSize( reader.steps().size() )
00025         , _data( &reader.data()[0] )
00026         , _shared( true )
00027         , _interpolator( interpolator )
00028 {}
00029 
00030 AbstractLut::~AbstractLut()
00031 {
00032         if( _data && !_shared )
00033         {
00034                 delete [] _data;
00035         }
00036         if( _interpolator )
00037                 delete _interpolator;
00038 }
00039 
00040 void AbstractLut::reset( Interpolator* interpolator, LutReader& reader )
00041 {
00042         if( !_shared && _data )
00043         {
00044                 delete [] _data;
00045         }
00046         _data    = &reader.data()[0];
00047         _dimSize =  reader.steps().size();
00048         _shared  =  true;
00049         if( _interpolator )
00050                 delete _interpolator;
00051         _interpolator = interpolator;
00052 }
00053 
00054 void AbstractLut::reset( LutReader& reader )
00055 {
00056         if( !_shared && _data )
00057         {
00058                 delete [] _data;
00059         }
00060         _data    = &reader.data()[0];
00061         _dimSize =  reader.steps().size();
00062         _shared  =  true;
00063         if( _interpolator )
00064                 delete _interpolator;
00065         _interpolator = new TrilinInterpolator();
00066 }
00067 
00068 void AbstractLut::reset( size_t dimSize, double* data /* = NULL */ )
00069 {
00070         if( _data && !_shared )
00071                 delete [] _data;
00072         _dimSize = _dimSize;
00073         if( _data == NULL )
00074         {
00075                 _data = new double[ totalSize() * 3 ];
00076                 memset( _data, 0, sizeof( double ) * totalSize() * 3 );
00077         }
00078         _data   = data;
00079         _shared = false;
00080         if( _interpolator )
00081                 delete _interpolator;
00082         _interpolator = new TrilinInterpolator();
00083 }
00084 
00085 }