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

Andrei Zavada johnhommer at gmail.com
Wed May 1 00:09:45 UTC 2013


The following commit has been merged in the master branch:
commit c6c25c81e8dc3dbc2e53fc8fc39bba19c086b338
Author: Andrei Zavada <johnhommer at gmail.com>
Date:   Tue Apr 30 02:32:03 2013 +0300

    gotcha with channel selector arg passed by value

diff --git a/src/libsigfile/channel.hh b/src/libsigfile/channel.hh
index 0f61cd0..7f73e32 100644
--- a/src/libsigfile/channel.hh
+++ b/src/libsigfile/channel.hh
@@ -190,6 +190,13 @@ struct SChannel {
 		{
 			return 0 == strcasecmp( name(), rv);
 		}
+
+	// void operator=( const SChannel& rv)
+	// 	{
+	// 		_type = rv._type;
+	// 		_idx = rv._idx;
+	// 		_custom_name = rv._custom_name;
+	// 	}
 };
 
 template <typename C>
diff --git a/src/libsigfile/edf.cc b/src/libsigfile/edf.cc
index 8b566b3..9d063d2 100644
--- a/src/libsigfile/edf.cc
+++ b/src/libsigfile/edf.cc
@@ -38,14 +38,14 @@ using agh::str::tokens_trimmed;
 
 using sigfile::CEDFFile;
 
-template valarray<TFloat> CEDFFile::get_region_original_( int, size_t, size_t) const;
+template valarray<TFloat> CEDFFile::get_region_original_( const int&, size_t, size_t) const;
 template valarray<TFloat> CEDFFile::get_region_original_( const SChannel&, size_t, size_t) const;
-template valarray<TFloat> CEDFFile::get_region_filtered_( int, size_t, size_t) const;
+template valarray<TFloat> CEDFFile::get_region_filtered_( const int&, size_t, size_t) const;
 template valarray<TFloat> CEDFFile::get_region_filtered_( const SChannel&, size_t, size_t) const;
-template int CEDFFile::put_region_( int, const valarray<TFloat>&, size_t) const;
-template int CEDFFile::put_region_( const string&, const valarray<TFloat>&, size_t) const;
-template int CEDFFile::export_original_( int, const string&) const;
-template int CEDFFile::export_original_( const string&, const string&) const;
+template int CEDFFile::put_region_( const int&, const valarray<TFloat>&, size_t) const;
+template int CEDFFile::put_region_( const SChannel&, const valarray<TFloat>&, size_t) const;
+template int CEDFFile::export_original_( const int&, const string&) const;
+template int CEDFFile::export_original_( const SChannel&, const string&) const;
 
 int
 CEDFFile::
@@ -679,16 +679,14 @@ _parse_header()
 				string isolated_label = trim( string (H.header.label, 16));
 
 				if ( isolated_label == sigfile::edf_annotations_label )
-					H.ucd = sigfile::SChannel( sigfile::SChannel::TType::embedded_annotation, 0);
+					H.ucd = {sigfile::SChannel::TType::embedded_annotation, 0};
 				else {
 					auto tt = agh::str::tokens( isolated_label, " ");
 					// parse legacy pre 0.9 specs ("EEG F3" etc)
 					if ( tt.size() > 1 ) {
 						string suggested_type = tt.front();
-						H.ucd = sigfile::SChannel ((tt.pop_front(), agh::str::join( tt, " ")));
-						if ( suggested_type == H.ucd.type_s() )
-							; // all agree
-						else
+						H.ucd = {(tt.pop_front(), agh::str::join( tt, " "))};
+						if ( suggested_type != H.ucd.type_s() )
 							_status |= recognised_channel_conflicting_type;
 					} else {
 						H.ucd = sigfile::SChannel (isolated_label);
diff --git a/src/libsigfile/edf.hh b/src/libsigfile/edf.hh
index bc7db0c..23993fc 100644
--- a/src/libsigfile/edf.hh
+++ b/src/libsigfile/edf.hh
@@ -221,9 +221,9 @@ class CEDFFile
       // signal data extractors
 	template <class Th>  // accommodates int or const SChannel& as Th
 	valarray<TFloat>
-	get_region_original_( Th h, size_t smpla, size_t smplz) const;
+	get_region_original_( const Th& h, size_t smpla, size_t smplz) const;
 	valarray<TFloat>
-	get_region_original( int h, size_t smpla, size_t smplz) const
+	get_region_original( const int& h, size_t smpla, size_t smplz) const
 		{ return get_region_original_<int>( h, smpla, smplz); }
 	valarray<TFloat>
 	get_region_original( const SChannel& h, size_t smpla, size_t smplz) const
@@ -231,7 +231,7 @@ class CEDFFile
 
 	template <class Th>
 	valarray<TFloat>
-	get_region_original_( Th h,
+	get_region_original_( const Th& h,
 			      float timea, float timez) const
 		{
 			size_t sr = samplerate(h);
@@ -239,20 +239,20 @@ class CEDFFile
 				h, (size_t)(timea * sr), (size_t)(timez * sr));
 		}
 	valarray<TFloat>
-	get_region_original( int h,
+	get_region_original( const int& h,
 			     float timea, float timez) const
-		{ return get_region_original_<int>( h, timea, timez); }
+		{ return get_region_original_( h, timea, timez); }
 	valarray<TFloat>
 	get_region_original( const SChannel& h,
 			     float timea, float timez) const
-		{ return get_region_original_<const SChannel&>( h, timea, timez); }
+		{ return get_region_original_( h, timea, timez); }
 
 	template <class Th>
 	valarray<TFloat>
-	get_signal_original_( Th h) const
+	get_signal_original_( const Th& h) const
 		{ return get_region_original_( h, 0, n_data_records * (*this)[h].samples_per_record); }
 	valarray<TFloat>
-	get_signal_original( int h) const
+	get_signal_original( const int& h) const
 		{ return get_signal_original_( h); }
 	valarray<TFloat>
 	get_signal_original( const SChannel& h) const
@@ -260,19 +260,20 @@ class CEDFFile
 
 	template <class Th>
 	valarray<TFloat>
-	get_region_filtered_( Th h,
+	get_region_filtered_( const Th& h,
 			      size_t smpla, size_t smplz) const;
 	valarray<TFloat>
-	get_region_filtered( int h,
+	get_region_filtered( const int& h,
 			     size_t smpla, size_t smplz) const
 		{ return get_region_filtered_( h, smpla, smplz); }
 	valarray<TFloat>
 	get_region_filtered( const SChannel& h,
 			     size_t smpla, size_t smplz) const
 		{ return get_region_filtered_( h, smpla, smplz); }
+
 	template <class Th>
 	valarray<TFloat>
-	get_region_filtered_( Th h,
+	get_region_filtered_( const Th& h,
 			      float timea, float timez) const
 		{
 			size_t sr = samplerate(h);
@@ -280,7 +281,7 @@ class CEDFFile
 				h, (size_t)(timea * sr), (size_t)(timez * sr));
 		}
 	valarray<TFloat>
-	get_region_filtered( int h,
+	get_region_filtered( const int& h,
 			     float timea, float timez) const
 		{ return get_region_filtered_( h, timea, timez); }
 	valarray<TFloat>
@@ -289,15 +290,15 @@ class CEDFFile
 		{ return get_region_filtered_( h, timea, timez); }
 	template <class Th>
 	valarray<TFloat>
-	get_signal_filtered_( Th h) const
+	get_signal_filtered_( const Th& h) const
 		{ return get_region_filtered_( h, 0, n_data_records * (*this)[h].samples_per_record); }
 
       // put signal
 	template <class Th>
 	int
-	put_region_( Th h, const valarray<TFloat>& src, size_t offset) const;
+	put_region_( const Th& h, const valarray<TFloat>& src, size_t offset) const;
 	int
-	put_region( int h, const valarray<TFloat>& src, size_t offset) const
+	put_region( const int& h, const valarray<TFloat>& src, size_t offset) const
 		{ return put_region_( h, src, offset); }
 	int
 	put_region( const SChannel& h, const valarray<TFloat>& src, size_t offset) const
@@ -305,17 +306,20 @@ class CEDFFile
 
 	template <class Th>
 	int
-	put_region_( Th h, const valarray<TFloat>& src, float offset) const
+	put_region_( const Th& h, const valarray<TFloat>& src, float offset) const
 		{ return put_region_( h, src, (size_t)(offset * samplerate(h))); }
 	int
-	put_region( int h, const valarray<TFloat>& src, float offset) const
+	put_region( const int& h, const valarray<TFloat>& src, float offset) const
+		{ return put_region_( h, src, offset); }
+	int
+	put_region( const SChannel& h, const valarray<TFloat>& src, float offset) const
 		{ return put_region_( h, src, offset); }
 
 	template <class Th>
 	int
-	put_signal_( Th h, const valarray<TFloat>& src) const;
+	put_signal_( const Th& h, const valarray<TFloat>& src) const;
 	int
-	put_signal( int h, const valarray<TFloat>& src) const
+	put_signal( const int& h, const valarray<TFloat>& src) const
 		{ return put_signal_( h, src); }
 	int
 	put_signal( const SChannel& h, const valarray<TFloat>& src) const
@@ -326,7 +330,7 @@ class CEDFFile
 	get_real_original_signal_range( const SChannel& h) const
 		{ return get_real_original_signal_range( channel_id(h)); }
 	pair<TFloat, TFloat>
-	get_real_original_signal_range( int h) const
+	get_real_original_signal_range( const int& h) const
 		{
 			auto x = get_signal_original( h);
 			return {x.min(), x.max()};
@@ -336,7 +340,7 @@ class CEDFFile
 	get_max_original_signal_range( const SChannel& h) const
 		{ return get_max_original_signal_range( channel_id(h)); }
 	pair<TFloat, TFloat>
-	get_max_original_signal_range( int h) const
+	get_max_original_signal_range( const int& h) const
 		{ return {(TFloat)channels[h].digital_min, (TFloat)channels[h].digital_max}; }
 
 
@@ -344,7 +348,7 @@ class CEDFFile
 	get_real_filtered_signal_range( const SChannel& h) const
 		{ return get_real_filtered_signal_range( channel_id(h)); }
 	pair<TFloat, TFloat>
-	get_real_filtered_signal_range( int h) const
+	get_real_filtered_signal_range( const int& h) const
 		{
 			auto x = get_signal_filtered( h);
 			return {x.min(), x.max()};
@@ -354,7 +358,7 @@ class CEDFFile
 	get_max_filtered_signal_range( const SChannel& h) const
 		{ return get_max_filtered_signal_range( channel_id(h)); }
 	pair<TFloat, TFloat>
-	get_max_filtered_signal_range( int h) const
+	get_max_filtered_signal_range( const int& h) const
 		{
 			auto x = get_signal_filtered( h);
 			return {x.min(), x.max()};   // an approximate
@@ -366,10 +370,10 @@ class CEDFFile
 
       // export
 	int
-	export_original( int h, const string& fname) const
+	export_original( const int& h, const string& fname) const
 		{ return export_original_( h, fname); }
 	int
-	export_filtered( int h, const string& fname) const
+	export_filtered( const int& h, const string& fname) const
 		{ return export_filtered_( h, fname); }
 	int
 	export_original( const SChannel& h, const string& fname) const
@@ -378,9 +382,9 @@ class CEDFFile
 	export_filtered( const SChannel& h, const string& fname) const
 		{ return export_filtered_( h, fname); }
 	template <class Th>
-	int export_original_( Th h, const string& fname) const;
+	int export_original_( const Th& h, const string& fname) const;
 	template <class Th>
-	int export_filtered_( Th h, const string& fname) const;
+	int export_filtered_( const Th& h, const string& fname) const;
 
 
       // reporting & misc
@@ -445,7 +449,7 @@ class CEDFFile
 
 		bool operator==( const SChannel& h) const
 			{
-				return ucd.name() == h.name();
+				return ucd == h;
 			}
 		bool operator==( const string& h) const
 			{
diff --git a/src/libsigfile/edf.ii b/src/libsigfile/edf.ii
index 390cd0a..5b2bc95 100644
--- a/src/libsigfile/edf.ii
+++ b/src/libsigfile/edf.ii
@@ -10,20 +10,20 @@
  */
 
 
-extern template valarray<TFloat> CEDFFile::get_region_original_( int, size_t, size_t) const;
+extern template valarray<TFloat> CEDFFile::get_region_original_( const int&, size_t, size_t) const;
 extern template valarray<TFloat> CEDFFile::get_region_original_( const SChannel&, size_t, size_t) const;
-extern template valarray<TFloat> CEDFFile::get_region_filtered_( int, size_t, size_t) const;
+extern template valarray<TFloat> CEDFFile::get_region_filtered_( const int&, size_t, size_t) const;
 extern template valarray<TFloat> CEDFFile::get_region_filtered_( const SChannel&, size_t, size_t) const;
-extern template int CEDFFile::put_region_( int, const valarray<TFloat>&, size_t) const;
+extern template int CEDFFile::put_region_( const int&, const valarray<TFloat>&, size_t) const;
 extern template int CEDFFile::put_region_( const SChannel&, const valarray<TFloat>&, size_t) const;
-extern template int CEDFFile::export_original_( int, const string&) const;
+extern template int CEDFFile::export_original_( const int&, const string&) const;
 extern template int CEDFFile::export_original_( const SChannel&, const string&) const;
 
 
 template <typename A>
 valarray<TFloat>
 CEDFFile::
-get_region_original_( const A h,
+get_region_original_( const A& h,
 		      const size_t sa, const size_t sz) const
 {
 	if ( unlikely (_status & (TStatus::bad_header | TStatus::bad_version)) )
@@ -60,7 +60,7 @@ get_region_original_( const A h,
 
 	free( tmp);
 
-	return recp;
+	return move(recp);
 }
 
 
@@ -68,7 +68,7 @@ get_region_original_( const A h,
 template <typename Th>
 valarray<TFloat>
 CEDFFile::
-get_region_filtered_( const Th h,
+get_region_filtered_( const Th& h,
 		      const size_t smpla, const size_t smplz) const
 {
 	valarray<TFloat> recp =
@@ -153,7 +153,7 @@ get_region_filtered_( const Th h,
 	}
 
 	// filters happen to append samples, so
-	return recp[ slice (0, smplz-smpla, 1)];
+	return move(recp[ slice (0, smplz-smpla, 1)]);
 }
 
 
@@ -163,7 +163,7 @@ get_region_filtered_( const Th h,
 template <typename A>
 int
 CEDFFile::
-put_region_( const A h,
+put_region_( const A& h,
 	     const valarray<TFloat>& src,
 	     const size_t offset) const
 {
@@ -215,7 +215,7 @@ put_region_( const A h,
 template <typename Th>
 int
 CEDFFile::
-put_signal_( const Th h,
+put_signal_( const Th& h,
 	     const valarray<TFloat>& src) const
 {
 	return put_region_( h, src, (size_t)0);
@@ -225,7 +225,7 @@ put_signal_( const Th h,
 template <typename Th>
 int
 CEDFFile::
-export_original_( const Th h,
+export_original_( const Th& h,
 		  const string& fname) const
 {
 	valarray<TFloat> signal = get_signal_original( h);
@@ -243,7 +243,7 @@ export_original_( const Th h,
 template <typename Th>
 int
 CEDFFile::
-export_filtered_( const Th h,
+export_filtered_( const Th& h,
 		  const string& fname) const
 {
 	valarray<TFloat> signal = get_signal_filtered( h);
diff --git a/src/libsigfile/source-base.hh b/src/libsigfile/source-base.hh
index fbde17a..f9d5464 100644
--- a/src/libsigfile/source-base.hh
+++ b/src/libsigfile/source-base.hh
@@ -305,11 +305,11 @@ class CSource {
 	virtual valarray<TFloat>
 	get_region_original( const SChannel&, size_t, size_t) const = 0;
 	virtual valarray<TFloat>
-	get_region_original( int, size_t, size_t) const = 0;
+	get_region_original( const int&, size_t, size_t) const = 0;
 
 	template <typename T>
 	valarray<TFloat>
-	get_region_original( T h,
+	get_region_original( const T& h,
 			     float seconds_off_start,
 			     float seconds_off_end) const
 		{
@@ -322,7 +322,7 @@ class CSource {
 
 	template <typename T>
 	valarray<TFloat>
-	get_signal_original( T h) const
+	get_signal_original( const T& h) const
 		{
 			return get_region_original(
 				h,
@@ -333,11 +333,11 @@ class CSource {
 	virtual valarray<TFloat>
 	get_region_filtered( const SChannel& h, size_t, size_t) const = 0;
 	virtual valarray<TFloat>
-	get_region_filtered( int h, size_t, size_t) const = 0;
+	get_region_filtered( const int& h, size_t, size_t) const = 0;
 
 	template <typename T>
 	valarray<TFloat>
-	get_region_filtered( T h,
+	get_region_filtered( const T& h,
 			     float seconds_off_start,
 			     float seconds_off_end) const
 		{
@@ -350,7 +350,7 @@ class CSource {
 
 	template <typename T>
 	valarray<TFloat>
-	get_signal_filtered( T h) const
+	get_signal_filtered( const T& h) const
 		{
 			return get_region_filtered(
 				h,
@@ -359,7 +359,7 @@ class CSource {
 
       // put samples
 	virtual int
-	put_region( int h,
+	put_region( const int& h,
 		    const valarray<TFloat>& src,
 		    size_t offset)		const = 0;
 	virtual int
@@ -368,7 +368,7 @@ class CSource {
 		    size_t offset)		const = 0;
 
 	int
-	put_signal( int h,
+	put_signal( const int& h,
 		    const valarray<TFloat>& src)
 		{
 			return put_region( h, src, 0);
@@ -383,43 +383,43 @@ class CSource {
       // signal data info
 	template <typename T>
 	pair<TFloat, TFloat>
-	get_real_original_signal_range( T h) const;
+	get_real_original_signal_range( const T& h) const;
 	virtual pair<TFloat, TFloat>
-	get_real_original_signal_range( int) const = 0;
+	get_real_original_signal_range( const int&) const = 0;
 	virtual pair<TFloat, TFloat>
 	get_real_original_signal_range( const SChannel&) const = 0;
 
 	template <typename T>
 	pair<TFloat, TFloat>
-	get_max_original_signal_range( T h) const;
+	get_max_original_signal_range( const T& h) const;
 	virtual pair<TFloat, TFloat>
-	get_max_original_signal_range( int) const = 0;
+	get_max_original_signal_range( const int&) const = 0;
 	virtual pair<TFloat, TFloat>
 	get_max_original_signal_range( const SChannel&) const = 0;
 
 	template <typename T>
 	pair<TFloat, TFloat>
-	get_real_filtered_signal_range( T h) const;
+	get_real_filtered_signal_range( const T& h) const;
 	virtual pair<TFloat, TFloat>
-	get_real_filtered_signal_range( int) const = 0;
+	get_real_filtered_signal_range( const int&) const = 0;
 	virtual pair<TFloat, TFloat>
 	get_real_filtered_signal_range( const SChannel&) const = 0;
 
 	template <typename T>
 	pair<TFloat, TFloat>
-	get_max_filtered_signal_range( T h) const;
+	get_max_filtered_signal_range( const T& h) const;
 	virtual pair<TFloat, TFloat>
-	get_max_filtered_signal_range( int) const = 0;
+	get_max_filtered_signal_range( const int&) const = 0;
 	virtual pair<TFloat, TFloat>
 	get_max_filtered_signal_range( const SChannel&) const = 0;
 
       // export
 	virtual int
-	export_original( int, const string& fname) const = 0;
+	export_original( const int&, const string& fname) const = 0;
 	virtual int
 	export_original( const SChannel&, const string& fname) const = 0;
 	virtual int
-	export_filtered( int, const string& fname) const = 0;
+	export_filtered( const int&, const string& fname) const = 0;
 	virtual int
 	export_filtered( const SChannel&, const string& fname) const = 0;
 

-- 
Sleep experiment manager



More information about the debian-med-commit mailing list