The following commit has been merged in the master branch:
commit 2ea62b1f38c748ba5d434ec4f656c81456d741fc
Author: Andrei Zavada <[email protected]>
Date:   Sun Jan 6 03:05:57 2013 +0200

    avoid passing by ref assignable lvalues to sigproc::envelope

diff --git a/src/sigproc/sigproc.cc b/src/sigproc/sigproc.cc
index 9d01995..9d4371e 100644
--- a/src/sigproc/sigproc.cc
+++ b/src/sigproc/sigproc.cc
@@ -23,7 +23,7 @@ using namespace std;
 template void sigproc::smooth( valarray<TFloat>&, size_t);
 template void sigproc::normalize( valarray<TFloat>&);
 template valarray<TFloat> sigproc::derivative( const valarray<TFloat>&);
-template size_t sigproc::envelope( const valarray<TFloat>&, size_t, size_t, 
double, valarray<TFloat>&, valarray<TFloat>&, vector<size_t>*, vector<size_t>*);
+template size_t sigproc::envelope( const valarray<TFloat>&, size_t, size_t, 
double, valarray<TFloat>*, valarray<TFloat>*, vector<size_t>*, vector<size_t>*);
 template valarray<TFloat> sigproc::dzcdf( const valarray<TFloat>&, size_t, 
float, float, size_t);
 template sigproc::CPattern<TFloat>::CPattern( const valarray<TFloat>&, size_t, 
size_t, size_t, const SPatternParamPack&, float, float, float);
 template size_t sigproc::CPattern<TFloat>::find( const valarray<TFloat>&, 
const valarray<TFloat>&, const valarray<TFloat>&, ssize_t, int);
diff --git a/src/sigproc/sigproc.hh b/src/sigproc/sigproc.hh
index dc1a55c..43e4c9a 100644
--- a/src/sigproc/sigproc.hh
+++ b/src/sigproc/sigproc.hh
@@ -93,11 +93,10 @@ envelope( const valarray<T>& in,
          size_t dh,  // tightness
          size_t samplerate,
          float dt,
-         valarray<T>& env_l,  // return interpolated
-         valarray<T>& env_u,
-         // optionally also return vector of points
-         vector<size_t> *envv_lp = nullptr,
-         vector<size_t> *envv_up = nullptr);
+         valarray<T>* env_lp = nullptr,  // return interpolated
+         valarray<T>* env_up = nullptr,  // return vector of points
+         vector<size_t> *mini_p = nullptr,
+         vector<size_t> *maxi_p = nullptr);
 
 
 
diff --git a/src/sigproc/sigproc.ii b/src/sigproc/sigproc.ii
index 7390414..d3879e8 100644
--- a/src/sigproc/sigproc.ii
+++ b/src/sigproc/sigproc.ii
@@ -13,7 +13,7 @@
 extern template void smooth( valarray<TFloat>&, size_t);
 extern template void normalize( valarray<TFloat>&);
 extern template valarray<TFloat> derivative( const valarray<TFloat>&);
-extern template size_t envelope( const valarray<TFloat>&, size_t, size_t, 
float, valarray<TFloat>&, valarray<TFloat>&, vector<size_t>*, vector<size_t>*);
+extern template size_t envelope( const valarray<TFloat>&, size_t, size_t, 
float, valarray<TFloat>*, valarray<TFloat>*, vector<size_t>*, vector<size_t>*);
 extern template valarray<TFloat> dzcdf( const valarray<TFloat>&, size_t, 
float, float, size_t);
 extern template CPattern<TFloat>::CPattern( const valarray<TFloat>&, size_t, 
size_t, size_t, const SPatternParamPack&, float, float, float);
 extern template size_t CPattern<TFloat>::find( const valarray<TFloat>&, const 
valarray<TFloat>&, const valarray<TFloat>&, ssize_t, int);
@@ -76,22 +76,21 @@ envelope( const valarray<T>& in,
          size_t dh,  // tightness
          size_t samplerate,
          double dt,
-         valarray<T>& env_l,  // return interpolated
-         valarray<T>& env_u,
-         // optionally also return vector of points
-         vector<size_t> *envv_lp = nullptr,
-         vector<size_t> *envv_up = nullptr)
+         valarray<T>* env_lp = nullptr,    // return interpolated
+         valarray<T>* env_up = nullptr,
+         vector<size_t> *mini_p = nullptr, // return vector of extremum indices
+         vector<size_t> *maxi_p = nullptr)
 {
        size_t  i, j,
                n_samples = in.size();
 
        vector<size_t>
-               envv_l,
-               envv_u;
+               mini,
+               maxi;
 
        // always put a point at start
-       envv_l.push_back( 0);
-       envv_u.push_back( 0);
+       mini.push_back( 0);
+       maxi.push_back( 0);
 
        for ( i = dh; i < n_samples-dh; ++i ) {
                for ( j = 1; j <= dh; ++j )
@@ -100,7 +99,7 @@ envelope( const valarray<T>& in,
                for ( j = 1; j <= dh; ++j )
                        if ( in[i+j] <= in[i] )  // [i] is not
                                goto inner_continue;
-               envv_l.push_back( i);
+               mini.push_back( i);
                continue;
        inner_continue:
                for ( j = 1; j <= dh; ++j )
@@ -109,23 +108,26 @@ envelope( const valarray<T>& in,
                for ( j = 1; j <= dh; ++j )
                        if ( in[i+j] >= in[i] )  // [i] is not
                                goto outer_continue;
-               envv_u.push_back( i);
+               maxi.push_back( i);
        outer_continue:
                ;
        }
 
        // put a point at end
-       envv_l.push_back( i);
-       envv_u.push_back( i);
-
-       if ( envv_l.size() > 5 && envv_u.size() > 5 ) {
-               env_l = interpolate( envv_l, samplerate, in, dt);
-               env_u = interpolate( envv_u, samplerate, in, dt);
-               if ( envv_lp )
-                       (*envv_lp) = envv_l;
-               if ( envv_up )
-                       (*envv_up) = envv_u;
-               return envv_u.size();
+       mini.push_back( i);
+       maxi.push_back( i);
+
+       if ( mini.size() > 5 && maxi.size() > 5 ) {
+               if ( env_lp )
+                       *env_lp = interpolate( mini, samplerate, in, dt);
+               if ( env_up )
+                       *env_up = interpolate( maxi, samplerate, in, dt);
+               if ( mini_p )
+                       *mini_p = mini;
+               if ( maxi_p )
+                       *maxi_p = maxi;
+
+               return maxi.size();
        } else
                return 0;
 }
@@ -225,7 +227,7 @@ CPattern (const valarray<T>& pattern,
        valarray<T> env_u, env_l;
        envelope( pattern, params.env_tightness, samplerate,
                  1./samplerate,
-                 env_l, env_u);
+                 &env_l, &env_u);
        breadth.resize( env_u.size());
        breadth = env_u - env_l;
 
@@ -302,7 +304,7 @@ find( const valarray<T>& signal,
        // signal envelope and breadth
        valarray<T> env_u, env_l;
        envelope( signal, params.env_tightness, samplerate,
-                 1./samplerate, env_u, env_l);
+                 1./samplerate, &env_u, &env_l);
        valarray<T> fbreadth (env_u.size());
        fbreadth = env_u - env_l;
 
diff --git a/src/ui/sf/sf-channel.cc b/src/ui/sf/sf-channel.cc
index dc22c6a..5492ca4 100644
--- a/src/ui/sf/sf-channel.cc
+++ b/src/ui/sf/sf-channel.cc
@@ -136,7 +136,7 @@ SChannel( agh::CRecording& r,
                valarray<TFloat> env_u, env_l;
                sigproc::envelope( signal_original,
                                   5, samplerate(), 1.,
-                                  env_l, env_u);
+                                  &env_l, &env_u);
                emg_profile.resize( env_l.size());
                emg_profile = env_u - env_l;
        }
@@ -204,8 +204,8 @@ compute_tightness( unsigned _tightness)
                sigproc::envelope( signal_filtered,
                                   signal_envelope.tightness = _tightness, 
samplerate(),
                                   1./samplerate(),
-                                  signal_envelope.lower,
-                                  signal_envelope.upper); // don't need anchor 
points, nor their count
+                                  &signal_envelope.lower,
+                                  &signal_envelope.upper); // don't need 
anchor points, nor their count
 }
 
 void
diff --git a/src/ui/sf/sf-montage.cc b/src/ui/sf/sf-montage.cc
index 6931ff9..f22cfa2 100644
--- a/src/ui/sf/sf-montage.cc
+++ b/src/ui/sf/sf-montage.cc
@@ -268,7 +268,7 @@ draw_page( cairo_t *cr,
                                             selection,
                                             Pp.env_tightness, samplerate(),
                                             1./samplerate(),
-                                            env_l, env_u) != 0 ) {
+                                            &env_l, &env_u) != 0 ) {
                                        cairo_set_source_rgba( cr, 1, 1, 1, .6);
                                        cairo_set_line_width( cr, 1);
                                        aghui::cairo_draw_signal(
diff --git a/src/ui/sf/sf-patterns.cc b/src/ui/sf/sf-patterns.cc
index 52efc74..73ab9e3 100644
--- a/src/ui/sf/sf-patterns.cc
+++ b/src/ui/sf/sf-patterns.cc
@@ -144,7 +144,7 @@ draw( cairo_t *cr)
                {
                        if ( sigproc::envelope( pattern, params.env_tightness, 
samplerate,
                                                1./samplerate,
-                                               env_l, env_u) == 0 ) {
+                                               &env_l, &env_u) == 0 ) {
                                aghui::cairo_put_banner( cr, da_wd, da_ht, 
"Selection is too short");
                                enable_controls( false);
                                goto out;

-- 
Sleep experiment manager

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to