seq_log.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_log: public seq_vector {
00019 
00020     //***************************************************************
00021     // vritual functions
00022 
00023 public:
00024 
00034     virtual size_type find_index( value_type value ) {
00035         return (size_type) max(
00036             (difference_type) 0, min( (difference_type) size()-2,
00037             (difference_type) floor( (value - _data[0]) / _increment[0] )));
00038     }
00039 
00040     //***************************************************************
00041     // constructors and destructors
00042 
00043 private:
00044 
00052     void initialize( value_type first, value_type increment, size_type size ) {
00053         value_type v = first ;
00054         for (size_type n = 0; n < size; ++n) {
00055             _data[n] = v ;
00056             v *= increment ;
00057             if ( n > 0 ) {
00058                 _increment[n-1] = _data[n] - _data[n-1];
00059                 _increment[n] = _increment[n-1] ;
00060             }
00061         }
00062     }
00063 
00064 public:
00065 
00067     virtual ~seq_log() {}
00068 
00076     seq_log( value_type first, value_type increment, size_type size ) :
00077         seq_vector( size )
00078     {
00079         initialize( first, increment, size ) ;
00080     }
00081 
00089     seq_log( value_type first, value_type increment, int size ) :
00090         seq_vector( (size_type) size )
00091     {
00092         initialize( first, increment, (size_type) size ) ;
00093     }
00094 
00105     seq_log( value_type first, value_type increment, value_type last ) :
00106         seq_vector( (increment == 1.0) ? 1
00107             : max((difference_type) 1, (difference_type) floor(1.0 + (log(
00108             last / first) / log(increment)))) )
00109     {
00110         initialize( first, increment, size() ) ;
00111     }
00112 
00118     seq_log( const seq_log & copy ) : seq_vector( copy ) {
00119     }
00120 
00122     virtual seq_vector* clone() const {
00123         return new seq_log( *this ) ;
00124     }
00125 
00126 
00127 }; // end of class
00128 
00130 } // end of namespace types
00131 } // end of namespace usml

Generated on 4 May 2015 for USML by  doxygen 1.6.1