monitors.cpp

00001 /*
00002     PyEO
00003     
00004     Copyright (C) 2003 Maarten Keijzer
00005 
00006     This program is free software; you can redistribute it and/or modify
00007     it under the terms of the GNU General Public License as published by
00008     the Free Software Foundation; either version 2 of the License, or
00009     (at your option) any later version.
00010 
00011     This program is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014     GNU General Public License for more details.
00015 
00016     You should have received a copy of the GNU General Public License
00017     along with this program; if not, write to the Free Software
00018     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 */
00020 
00021 #include <utils/eoParam.h>
00022 #include <utils/eoMonitor.h>
00023 #include "PyEO.h"
00024 
00025 using namespace boost::python;
00026 
00027 class MonitorWrapper : public eoMonitor
00028 {
00029     public:
00030         PyObject* self;
00031         list objects;
00032         
00033         MonitorWrapper(PyObject* p) :self(p) {}
00034 
00035         eoMonitor& operator()()
00036         {
00037             call_method<void>(self, "__call__");
00038             return *this;
00039         }
00040 
00041         std::string getString(int i)
00042         {
00043             if (static_cast<unsigned>(i) >= vec.size())
00044             {
00045                 throw index_error("Index out of bounds");
00046             }
00047             
00048             return vec[i]->getValue();
00049         }
00050 
00051         unsigned size() { return vec.size(); }
00052 };
00053 
00054 void monitors()
00055 {
00063     class_<eoMonitor, MonitorWrapper, boost::noncopyable>("eoMonitor", init<>())
00064         .def("lastCall", &eoMonitor::lastCall)
00065         .def("add", &eoMonitor::add)
00066         .def("__call__", &MonitorWrapper::operator(), return_internal_reference<1>() )
00067         .def("__getitem__", &MonitorWrapper::getString, 
00068                 "Returns the string value of the indexed Parameter")    
00069         .def("__len__", &MonitorWrapper::size)
00070         ;
00071 }
00072 

Generated on Thu Oct 19 05:06:41 2006 for EO by  doxygen 1.3.9.1