STK++ 1.0
STK_IRunnerPtr2D.h
Go to the documentation of this file.
00001 /*--------------------------------------------------------------------*/
00002 /*     Copyright (C) 2004-2011  Serge Iovleff
00003 
00004  This program is free software; you can redistribute it and/or modify
00005  it under the terms of the GNU Lesser General Public License as
00006  published by the Free Software Foundation; either version 2 of the
00007  License, or (at your option) any later version.
00008 
00009  This program is distributed in the hope that it will be useful,
00010  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  GNU Lesser General Public License for more details.
00013 
00014  You should have received a copy of the GNU Lesser General Public
00015  License along with this program; if not, write to the
00016  Free Software Foundation, Inc.,
00017  59 Temple Place,
00018  Suite 330,
00019  Boston, MA 02111-1307
00020  USA
00021 
00022  Contact : Serge.Iovleff@stkpp.org
00023  */
00024 
00025 /*
00026  * Project:  stkpp::Sdk
00027  * Purpose:  main interface base class for running class on 2D Container.
00028  * Author:   iovleff, serge.iovleff@stkpp.org
00029  **/
00030 
00036 #ifndef STK_IRUNNERPTR2D_H
00037 #define STK_IRUNNERPTR2D_H
00038 
00039 #include "STK_IRunner.h"
00040 #include "STK_ITContainer2D.h"
00041 
00042 namespace STK
00043 {
00044 
00050 template < class TYPE, class TContainer2D>
00051 class IRunnerPtr2D : virtual public IRunnerBase
00052 {
00054   typedef ITContainer2D<TYPE, TContainer2D> Container2D;
00055 
00056   protected:
00058     IRunnerPtr2D( Container2D const* p_data)
00059                 : p_data_(p_data)
00060     { }
00062     IRunnerPtr2D( IRunnerPtr2D const& runner)
00063                 : IRunnerBase(runner)
00064                 , p_data_(runner.p_data_)
00065     { }
00066 
00067   public:
00069     virtual ~IRunnerPtr2D() { }
00070 
00074     inline TContainer2D const* p_data() const
00075     { return (p_data_) ? p_data_->asPtrLeaf() : 0;}
00076 
00080     virtual void setData( Container2D const* p_data)
00081     {
00082       p_data_ = p_data;
00083       update();
00084     }
00085 
00091     virtual bool run( typename Container2D::TContainerVe const& weights) =0;
00092 
00093   protected:
00095     Container2D const* p_data_;
00096 
00101     virtual void update() { ;}
00102 };
00103 
00104 } // namespace STK
00105 
00106 #endif /* STK_IRUNNERPTR2D_H_ */