seq_linear.h

00001 
00005 #pragma once
00006 
00007 #include <usml/types/seq_vector.h>
00008 
00009 namespace usml {
00010 namespace types {
00013 
00018 class USML_DECLSPEC seq_linear : public seq_vector {
00019 
00020     public:
00021 
00031         seq_linear( value_type first, value_type temp, size_type size, bool first_last=false ) :
00032             seq_vector( size )
00033         {
00034             value_type increment ;
00035             increment = first_last ? ( temp - first ) / size : temp ;
00036             initialize( first, increment, size ) ;
00037         }
00038 
00046         seq_linear( value_type first, value_type increment, int size ) :
00047             seq_vector( (size_type) size )
00048         {
00049             initialize( first, increment, (size_type) size ) ;
00050         }
00051 
00062         seq_linear( value_type first, value_type increment, value_type last ) :
00063             seq_vector( (increment == 0.0) ? 1 : max(
00064               (difference_type) 1,
00065               (difference_type) floor(1.0+(last-first)/increment)))
00066         {
00067             initialize( first, increment, size() ) ;
00068         }
00069 
00075         seq_linear( const seq_linear & copy ) : seq_vector( copy ) {
00076         }
00077 
00079         virtual ~seq_linear() {}
00080 
00081         //***************************************************************
00082         // vritual functions from derived seq_vector
00083 
00085         virtual seq_vector* clone() const {
00086             return new seq_linear( *this ) ;
00087         }
00088 
00098         virtual size_type find_index( value_type value ) {
00099             return (size_type) max(
00100                 (difference_type) 0, min( (difference_type) this->size()-2,
00101                 (difference_type) floor( (value - _data[0]) / _increment[0]) ));
00102         }
00103 
00104         //***************************************************************
00105         // constructors and destructors
00106 
00107     private:
00115         void initialize( value_type first, value_type increment, size_type size ) {
00116             value_type v = first ;
00117             for (size_type n = 0; n < size; ++n) {
00118                 _data[n] = v ;
00119                 _increment[n] = increment ;
00120                 v += increment ;
00121             }
00122         }
00123 }; // end of class
00124 
00126 }  // end of namespace types
00127 }  // end of namespace usml

Generated on 4 May 2015 for USML by  doxygen 1.6.1