00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "MarSystemTemplateAdvanced.h"
00020 #include "MarControlManager.h"
00021
00022
00023 using std::ostringstream;
00024 using std::ofstream;
00025 using std::endl;
00026 using std::cout;
00027 using std::ios;
00028
00029 using namespace Marsyas;
00030
00031 MarSystemTemplateAdvanced::MarSystemTemplateAdvanced(mrs_string name):MarSystem("MarSystemTemplateAdvanced", name)
00032 {
00033
00034
00035
00036
00037
00038
00039
00040 addControls();
00041 }
00042
00043 MarSystemTemplateAdvanced::MarSystemTemplateAdvanced(const MarSystemTemplateAdvanced& a) : MarSystem(a)
00044 {
00045
00046
00047
00048
00049 ctrl_header_ = getctrl("mrs_myheader/hdrname");
00050 }
00051
00052 MarSystemTemplateAdvanced::~MarSystemTemplateAdvanced()
00053 {
00054 }
00055
00056 MarSystem*
00057 MarSystemTemplateAdvanced::clone() const
00058 {
00059 return new MarSystemTemplateAdvanced(*this);
00060 }
00061
00062 void
00063 MarSystemTemplateAdvanced::addControls()
00064 {
00065 someString_ = "";
00066
00067
00068 MarControlManager *mcm = MarControlManager::getManager();
00069 if (!mcm->isRegistered("mrs_myheader"))
00070 {
00071 mcm->registerPrototype("mrs_myheader", new MyHeaderT());
00072
00073
00074
00075
00076
00077 }
00078
00079
00080
00081 ctrl_header_ = mcm->create("mrs_myheader");
00082
00083
00084
00085 MyHeader myh;
00086 myh.someString = "abcd";
00087 myh.someValue = 50;
00088 myh.someFlag = true;
00089 myh.someVec.create(10);
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 ctrl_header_->setValue(myh);
00103
00104
00105
00106 addctrl("mrs_myheader/hdrname", ctrl_header_, ctrl_header_);
00107
00108
00109 ctrl_header_->setState(true);
00110 }
00111
00112 void
00113 MarSystemTemplateAdvanced::myUpdate(MarControlPtr sender)
00114 {
00115 MRSDIAG("MarSystemTemplateAdvanced.cpp - MarSystemTemplateAdvanced:myUpdate");
00116
00117 MarSystem::myUpdate(sender);
00118
00119
00120 const MyHeader& hdr = ctrl_header_->to<MyHeader>();
00121
00122
00123 if(someString_ != hdr.someString)
00124 {
00125 ofstream out(hdr.someString.c_str());
00126 out << hdr;
00127 someString_ = hdr.someString;
00128 }
00129 }
00130
00131 void
00132 MarSystemTemplateAdvanced::myProcess(realvec& in, realvec& out)
00133 {
00134 mrs_natural t,o;
00135
00136 const MyHeader& hdr = ctrl_header_->to<MyHeader>();
00137
00138
00139
00140 ofstream outfile(hdr.someString.c_str(), ios::app);
00141
00142
00143
00144
00145 for (o=0; o < inObservations_; o++)
00146 for (t = 0; t < inSamples_; t++)
00147 {
00148 out(o,t) = in(o,t);
00149 outfile << in(o,t) << endl;
00150 }
00151 }
00152
00153
00154
00155
00156
00157 bool
00158 Marsyas::operator==(const MyHeader& hdr1, const MyHeader& hdr2)
00159 {
00160
00161
00162 return (hdr1.someString == hdr2.someString &&
00163 hdr1.someValue == hdr2.someValue &&
00164 hdr1.someFlag == hdr2.someFlag &&
00165 hdr1.someVec == hdr2.someVec) ;
00166 }
00167
00168 bool
00169 Marsyas::operator!=(const MyHeader& hdr1, const MyHeader& hdr2)
00170 {
00171
00172
00173 return (hdr1.someString != hdr2.someString ||
00174 hdr1.someValue != hdr2.someValue ||
00175 hdr1.someFlag != hdr2.someFlag ||
00176 hdr1.someVec != hdr2.someVec) ;
00177 }
00178
00179 MyHeader
00180 Marsyas::operator+(MyHeader& hdr1, MyHeader& hdr2)
00181 {
00182 (void) hdr1; (void) hdr2;
00183 MRSASSERT(0);
00184 return MyHeader();
00185 }
00186
00187 MyHeader
00188 Marsyas::operator-(MyHeader& hdr1, MyHeader& hdr2)
00189 {
00190 (void) hdr1; (void) hdr2;
00191 MRSASSERT(0);
00192 return MyHeader();
00193 }
00194
00195 MyHeader
00196 Marsyas::operator*(MyHeader& hdr1, MyHeader& hdr2)
00197 {
00198 (void) hdr1; (void) hdr2;
00199 MRSASSERT(0);
00200 return MyHeader();
00201 }
00202
00203 MyHeader
00204 Marsyas::operator/(MyHeader& hdr1, MyHeader& hdr2)
00205 {
00206 (void) hdr1; (void) hdr2;
00207 MRSASSERT(0);
00208 return MyHeader();
00209 }
00210
00211 std::ostream&
00212 Marsyas::operator<<(std::ostream& os, const MyHeader& hdr)
00213 {
00214 os << "# MARSYAS mrs_myHeader" << endl;
00215 os << "# someString = " << hdr.someString << endl;
00216 os << "# someValue = " << hdr.someValue << endl;
00217 os << "# someFlag = " << hdr.someFlag << endl;
00218 os << "# someVec = " << hdr.someVec << endl;
00219
00220 return os;
00221 }
00222
00223 std::istream&
00224 Marsyas::operator>>(std::istream& is, MyHeader& hdr)
00225 {
00226 mrs_string skip;
00227 is >> skip >> skip >> skip;
00228
00229 if(skip != "mrs_myHeader")
00230 {
00231 MRSWARN("MyHeader::operator>> error reading stream");
00232 return is;
00233 }
00234
00235 is >> skip >> skip >> skip;
00236 is >> hdr.someString;
00237
00238 is >> skip >> skip >> skip;
00239 is >> hdr.someValue;
00240
00241 is >> skip >> skip >> skip;
00242 is >> hdr.someFlag;
00243
00244 is >> skip >> skip >> skip;
00245 is >> hdr.someVec;
00246
00247 return is;
00248 }