The following commit has been merged in the master branch:
commit c6c25c81e8dc3dbc2e53fc8fc39bba19c086b338
Author: Andrei Zavada <[email protected]>
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

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

Reply via email to