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

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


The following commit has been merged in the master branch:
commit a4c6bed03348b23d7184bec01cc93111f620e325
Author: Andrei Zavada <johnhommer at gmail.com>
Date:   Tue Apr 30 01:57:31 2013 +0300

    deal with channels like "Fpz-Cz" reasonably correctly

diff --git a/src/libsigfile/channel.cc b/src/libsigfile/channel.cc
index 88e960b..fd152a3 100644
--- a/src/libsigfile/channel.cc
+++ b/src/libsigfile/channel.cc
@@ -12,6 +12,8 @@
 
 #include <map>
 #include <vector>
+#include <algorithm>
+#include "common/string.hh"
 #include "channel.hh"
 
 using namespace std;
@@ -108,13 +110,32 @@ template const char* SChannel::channel_s<SChannel::TType::erg>( int);
 
 tuple<SChannel::TType, int>
 SChannel::
-figure_type_and_name( const string& h)
+figure_type_and_name( const string& h_)
 {
-	for ( auto& T : _CT_ )
-		for ( size_t i = 0; i < T.second.size(); ++i )
-			if ( 0 == strcasecmp( h.c_str(), T.second[i]) )
-				return make_tuple(T.first, (int)i);
-	return make_tuple(SChannel::TType::invalid, -1);
+	auto tt = agh::str::tokens( h_, "-");
+	if ( tt.size() == 2 ) {
+		for ( auto& T : _CT_ )
+			if ( all_of( tt.begin(), tt.end(),
+				     [&]( const string& t)
+				     {
+					     return any_of( T.second.begin(), T.second.end(),
+							    [&]( const string& h)
+							    {
+								    return 0 == strcasecmp( h.c_str(), t.c_str());
+							    });
+				     }) )
+				return make_tuple(T.first, 0); // always custom, because it's a compound (EEG) channel like Fpz-Oz
+		return make_tuple(TType::other, 0);
+
+	} else if ( tt.size() == 1 ) {
+		for ( auto& T : _CT_ )
+			for ( size_t i = 0; i < T.second.size(); ++i )
+				if ( strcasecmp( T.second[i], h_.c_str()) == 0 ) {
+					return make_tuple(T.first, (int)i);
+				}
+	}
+
+	return make_tuple(TType::other, 0);
 }
 
 

-- 
Sleep experiment manager



More information about the debian-med-commit mailing list