Marsyas  0.6.0-alpha
/usr/src/RPM/BUILD/marsyas-0.6.0/src/marsyas/marsystems/Map.cpp
Go to the documentation of this file.
00001 #include "Map.h"
00002 
00003 namespace Marsyas {
00004 
00005 Map::Map(const std::string & name):
00006   MarSystem("Map", name)
00007 {
00008   addControl("mrs_realvec/input", realvec(), m_input_ctl);
00009   addControl("mrs_realvec/output", realvec(), m_output_ctl);
00010 }
00011 
00012 Map::Map( const Map & other ):
00013   MarSystem(other)
00014 {
00015   m_input_ctl = getControl("mrs_realvec/input");
00016   m_output_ctl = getControl("mrs_realvec/output");
00017 }
00018 
00019 void Map::myUpdate(MarControlPtr cause)
00020 {
00021   MarSystem::myUpdate(cause);
00022 
00023   const bool do_not_update = false;
00024 
00025   MarControlAccessor access_input(m_input_ctl, do_not_update);
00026   MarControlAccessor access_output(m_output_ctl, do_not_update);
00027 
00028   realvec & input = access_input.to<realvec>();
00029   realvec & output = access_output.to<realvec>();
00030 
00031   if (input.getRows() != inObservations_ ||
00032       input.getCols() != inSamples_)
00033   {
00034     input.create(inObservations_, inSamples_);
00035   }
00036 
00037   if (output.getRows() != onObservations_ ||
00038       output.getCols() != onSamples_)
00039   {
00040     output.create(onObservations_, onSamples_);
00041   }
00042 }
00043 
00044 void Map::myProcess(realvec & in, realvec & out)
00045 {
00046   {
00047     MarControlAccessor input_access(m_input_ctl);
00048     realvec & input_data = input_access.to<realvec>();
00049 
00050     assert(input_data.getRows() == in.getRows() &&
00051            input_data.getCols() == in.getCols());
00052 
00053     input_data = in;
00054   }
00055 
00056   const realvec & output_data = m_output_ctl->to<realvec>();
00057 
00058   assert(output_data.getRows() == out.getRows() &&
00059          output_data.getCols() == out.getCols());
00060 
00061   out = output_data;
00062 }
00063 
00064 } // namespace Marsyas