• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List

run_image.hh

00001 // Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE)
00002 //
00003 // This file is part of Olena.
00004 //
00005 // Olena is free software: you can redistribute it and/or modify it under
00006 // the terms of the GNU General Public License as published by the Free
00007 // Software Foundation, version 2 of the License.
00008 //
00009 // Olena 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 GNU
00012 // General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License
00015 // along with Olena.  If not, see <http://www.gnu.org/licenses/>.
00016 //
00017 // As a special exception, you may use this file as part of a free
00018 // software project without restriction.  Specifically, if other files
00019 // instantiate templates or use macros or inline functions from this
00020 // file, or you compile this file and link it with other files to produce
00021 // an executable, this file does not by itself cause the resulting
00022 // executable to be covered by the GNU General Public License.  This
00023 // exception does not however invalidate any other reasons why the
00024 // executable file might be covered by the GNU General Public License.
00025 
00026 #ifndef MLN_CORE_INTERNAL_RUN_IMAGE_HH
00027 # define MLN_CORE_INTERNAL_RUN_IMAGE_HH
00028 
00034 # include <mln/core/internal/image_primary.hh>
00035 # include <mln/core/site_set/p_run.hh>
00036 # include <mln/core/site_set/p_set_of.hh>
00037 
00038 namespace mln
00039 {
00040 
00041   namespace internal
00042   {
00043 
00049     template <typename T, typename P, typename E>
00050     class run_image_ : public internal::image_primary< P, p_set_of< p_run<P> >, E >
00051     {
00052     protected:
00053       run_image_();
00054 
00055     public:
00064       float compression() const;
00065 
00071       void finalize();
00072 
00080       P point_at(const mln_psite(p_set_of< p_run<P> >)& ps) const;
00081 
00086       bool has(const mln_psite(p_set_of< p_run<P> >)& ps) const;
00087     };
00088 
00089 # ifndef MLN_INCLUDE_ONLY
00090 
00091     template <typename T, typename P, typename E>
00092     inline
00093     run_image_<T, P, E>::run_image_()
00094     {
00095     }
00096 
00097     template <typename T, typename P, typename E>
00098     inline
00099     float
00100     run_image_<T, P, E>::compression() const
00101     {
00102       return float(exact(this)->data_->memory_size()) /
00103         float (sizeof(T) * exact(this)->data_->domain_.bbox().nsites());
00104     }
00105 
00106     template <typename T, typename P, typename E>
00107     inline
00108     void
00109     run_image_<T, P, E>::finalize()
00110     {
00111       exact(this)->data_->finalize();
00112     }
00113 
00114     template <typename T, typename P, typename E>
00115     inline
00116     P
00117     run_image_<T, P, E>::point_at(const mln_psite(p_set_of< p_run<P> >)& ps) const
00118     {
00119       const E* ima = exact(this);
00120       mln_precondition(ps.index() < ima->data_->domain_.nsites());
00121       mln_precondition(ps.p().index() < ima->data_->domain_[ps.index()].length());
00122       return ima->data_->domain_[ps.index()][ps.p().index()];
00123     }
00124 
00125     template <typename T, typename P, typename E>
00126     inline
00127     bool
00128     run_image_<T, P, E>::has(const mln_psite(p_set_of< p_run<P> >)& ps) const
00129     {
00130       const E* ima = exact(this);
00131       if (!ima->is_valid())
00132         return false;
00133       else
00134         return (ps.index() < ima->data_->domain_.nsites()
00135                 && ps.p().index() < ima->data_->domain_[ps.index()].length()
00136                 && ima->data_->domain_[ps.index()][ps.p().index()] == ps);
00137     }
00138 
00139 # endif // ! MLN_INCLUDE_ONLY
00140 
00141   } // end of namespace internal
00142 
00143 } // end of namespace mln
00144 
00145 
00146 #endif // ! MLN_CORE_INTERNAL_RUN_IMAGE_HH

Generated on Tue Oct 4 2011 15:24:23 for Milena (Olena) by  doxygen 1.7.1