[med-svn] [SCM] aghermann branch, master, updated. 9c95ea59282c4fc6ef7eb192072500f9d0659fc3

Andrei Zavada johnhommer at gmail.com
Tue Jan 8 00:24:53 UTC 2013


The following commit has been merged in the master branch:
commit 2ea62b1f38c748ba5d434ec4f656c81456d741fc
Author: Andrei Zavada <johnhommer at gmail.com>
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



More information about the debian-med-commit mailing list