EvolvingObjects
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 }
 All Classes Namespaces Files Functions Variables Typedefs Friends