OpenWalnut  1.4.0
WEEG2Segment.cpp
00001 //---------------------------------------------------------------------------
00002 //
00003 // Project: OpenWalnut ( http://www.openwalnut.org )
00004 //
00005 // Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
00006 // For more information see http://www.openwalnut.org/copying
00007 //
00008 // This file is part of OpenWalnut.
00009 //
00010 // OpenWalnut is free software: you can redistribute it and/or modify
00011 // it under the terms of the GNU Lesser General Public License as published by
00012 // the Free Software Foundation, either version 3 of the License, or
00013 // (at your option) any later version.
00014 //
00015 // OpenWalnut is distributed in the hope that it will be useful,
00016 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018 // GNU Lesser General Public License for more details.
00019 //
00020 // You should have received a copy of the GNU Lesser General Public License
00021 // along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
00022 //
00023 //---------------------------------------------------------------------------
00024 
00025 #include <cstddef>
00026 
00027 #include <sstream>
00028 #include <string>
00029 
00030 #include <boost/shared_ptr.hpp>
00031 
00032 #include "../common/exceptions/WOutOfBounds.h"
00033 #include "WEEG2Segment.h"
00034 #include "WEEGValueMatrix.h"
00035 #include "WRecording.h"
00036 #include "exceptions/WDHException.h"
00037 #include "io/WPagerEEG.h"
00038 
00039 WEEG2Segment::WEEG2Segment( std::size_t segmentID, boost::shared_ptr< WPagerEEG > pager )
00040     : m_segmentID( segmentID ),
00041       m_pager( pager )
00042 {
00043     if( !m_pager )
00044     {
00045         throw WDHException( std::string( "Couldn't construct new EEG segment: pager invalid" ) );
00046     }
00047 
00048     if( m_segmentID >= m_pager->getNumberOfSegments() )
00049     {
00050         std::ostringstream stream;
00051         stream << "The EEG has no segment number " << m_segmentID;
00052         throw WOutOfBounds( stream.str() );
00053     }
00054 
00055     m_nbSamples = m_pager->getNumberOfSamples( m_segmentID );
00056     if( m_nbSamples <= 0 || WRecording::MAX_RECORDING_SAMPLES < m_nbSamples )
00057     {
00058         throw WDHException( std::string( "Couldn't construct new EEG segment: invalid number of samples" ) );
00059     }
00060 }
00061 
00062 std::size_t WEEG2Segment::getNumberOfSamples() const
00063 {
00064     return m_nbSamples;
00065 }
00066 
00067 boost::shared_ptr< WEEGValueMatrix > WEEG2Segment::getValues( std::size_t start, std::size_t length ) const
00068 {
00069     // No test whether start and length are valid - this should be done only
00070     // one time by the pager.
00071     return m_pager->getValues( m_segmentID, start, length );
00072 }